it-swarm.com.de

Öffnen Sie den Medienrahmen und wählen Sie einen Anhang aus

Ich verwende den folgenden Code, um einen Medienrahmen zu öffnen, wenn ich auf einen Link mit einem data-attachment_id-Attribut klicke. Dieses Attribut enthält die ID eines Anhangs, den ich beim Öffnen des Frames auswählen möchte:

jQuery(document).ready(function($){

    $( '#gallery_images_container' ).on( 'click', 'a.edit', function( event ) {
        var $el = $( this );
        var selected = $( this ).attr( 'data-attachment_id' );

        event.preventDefault();

        // If the media frame already exists, reopen it.
        if ( gallery_items_frame ) {

            // Select the attachment when the frame opens
            gallery_items_frame.on( 'open', function() {
                var selection = gallery_items_frame.state().get( 'selection' );
                if ( selected ) {
                    selection.add( wp.media.attachment( selected ) );
                }
            });

            // Open the modal.
            gallery_items_frame.open();

            return;
        }

        // Create the media frame.
        gallery_items_frame = wp.media.frames.gallery_items = wp.media({
            // Set the title of the modal.
            title: $el.data( 'choose' ),
            button: {
                text: $el.data( 'update' )
            },
            states: [
                new wp.media.controller.Library({
                    title: $el.data( 'choose' ),
                    filterable: 'all',
                    multiple: true
                })
            ]
        });

        // Select the attachment when the frame opens
        gallery_items_frame.on( 'open', function() {
            var selection = gallery_items_frame.state().get( 'selection' );
            if ( selected ) {
                selection.add( wp.media.attachment( selected ) );
            }
        });

        // Open the modal.
        gallery_items_frame.open();

    });

});

Wenn ich zum ersten Mal auf den Link klicke, wird der Rahmen geöffnet und der entsprechende Anhang ausgewählt. Wenn ich den Rahmen schließe und erneut auf den Link klicke, wird der Rahmen erneut geöffnet, aber es ist kein Anhang ausgewählt.

Irgendwelche Einsichten, was ich falsch machen könnte?

Danke im Voraus

5
leemon

Nun, ich habe die Antwort selbst gefunden. Ich hoffe es hilft anderen:

Ich ersetzte beide Instanzen von:

if ( selected ) {
    selection.add( wp.media.attachment( selected ) );
}

mit:

selection.reset( selected ? [ wp.media.attachment( selected ) ] : [] );

Anscheinend kann die Funktion reset() verwendet werden, um ein Array zu leeren und dann auch Elemente hinzuzufügen.

4
leemon