web-dev-qa-db-ja.com

メディアフレームを開いて添付ファイルを選択する

data-attachment_id属性を持つリンクをクリックしたときにメディアフレームを開くには、次のコードを使用します。この属性は、フレームが開いたときに選択したい添付ファイルのIDを保持します。

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();

    });

});

初めてリンクをクリックすると、フレームが開き、適切な添付ファイルが選択されます。しかし、フレームを閉じてリンクをもう一度クリックすると、フレームは再び開きますが、添付ファイルは選択されていません。

私が間違っているかもしれないことに関して何か洞察がありますか?

前もって感謝します

5
leemon

まあ、私は答えを自分で見つけました。私はそれが他の人に役立つことを願います:

両方のインスタンスを置き換えました。

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

と:

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

どうやらreset()関数は配列を空にしてから要素を追加するのにも使えます。

4
leemon