web-dev-qa-db-ja.com

Wordpress 3.5 Media Manager - ボタンを追加する

私のプラグインでは、Media Managerに2つのボタン(「media-toolbar-primary」セクションの「Insert Into Post」の左側)を追加し、それにjQueryアクションを接続します。

  1. 最初のもの - 「すべて選択」ボタンを押すと、選択したオプションの値に応じて、すべての利用可能な画像(画像のみ)を選択できます(例:すべてのメディアアイテム、この投稿へのアップロードなど)。 「すべてのメディアアイテム」が選択されている場合 - 「この投稿にアップロード」が選択されている場合 - 現在の投稿に添付されている画像のみが選択されます。
  2. 2つ目 - "カスタム投稿への挿入" - すべての選択された画像(利用可能なフルサイズの画像ソース、代替テキスト、サイズなど)の画像データを取得し、追加のhtmlコードでラップしながら、コードをTinymceエディタに返します。

2番目のボタンの戻りコードは、次のようになります。

<ul>
  <li><img src="full/path/to/001.jpg" alt="alt text 1" /></li>
  <li><img src="full/path/to/002.jpg" alt="alt text 2" /></li>
  <li><img src="full/path/to/003.jpg" alt="alt text 3" /></li>
  <li><img src="full/path/to/004.jpg" alt="alt text 4" /></li>
  <li><img src="full/path/to/005.jpg" alt="alt text 5" /></li>
</ul>

私が理解している限りでは、唯一の方法は適切なバックボーンビューを上書きすることですが、それに加えて、それが今のところ私が知っていることすべてです。

手伝ってくれてありがとう。

8
Marcin Bobowski

このコードブロックで、[投稿に挿入]ボタンのすぐ隣にボタンが追加されます。クリックすると、選択した画像がWPエディタに送信され、それぞれがテンプレートのHTMLにラップされます。

var wpMediaFramePost = wp.media.view.MediaFrame.Post;
wp.media.view.MediaFrame.Post = wpMediaFramePost.extend(
{
    mainInsertToolbar: function( view )
    {
        "use strict";

        wpMediaFramePost.prototype.mainInsertToolbar.call(this, view);

        var controller = this;

        this.selectionStatusToolbar( view );

        view.set( "customInsertIntoPost", {
            style: "primary",
            priority: 80,
            text: "Insert selected images into post",
            requires: { selection: true },

            click: function()
            {
                var state = controller.state(),
                    selection = state.get("selection")._byId,
                    template = _.template('<li><img src="<%= imagePath %>" alt="<%= altText %>" /></li>'),
                    output = "<ul>";

                _.each(selection, function( item )
                {
                    if( item.attributes.type === "image" )
                    {
                        output += template({
                            imagePath: item.attributes.sizes.full.url,
                            altText: item.attributes.alt
                        });
                    }
                });

                output += "</ul>";

                send_to_editor(output);
            }
        });
    }
});

カスタムボタンを追加しても問題ありません。 WP 3.5メディアブラウザでは添付ファイルが少しずつ読み込まれるため、「すべての画像」を選択するのは少し面倒です。調べてみますが、添付ファイルを手動で選択することをお勧めします。

11
aesqe

小さなプラグインを書き、オーバーレイポップアップ内のメディアマネージャの左側のサイドバーのリストに項目を追加するために次のサンプルソースを使用してください。

以下の情報源の結果: enter image description here

add_action( 'admin_footer-post-new.php', 'wpse_78881_script' );
add_action( 'admin_footer-post.php', 'wpse_78881_script' );
function wpse_78881_script() {
    ?>
    <script type="text/javascript">
        jQuery(window).on('load', function() {
            var media   = window.wp.media,  
            Attachment  = media.model.Attachment,
            Attachments = media.model.Attachments,
            Query       = media.model.Query,
            l10n        = media.view.l10n = typeof _wpMediaViewsL10n === 'undefined' ? {} : _wpMediaViewsL10n,
            My_new_item = undefined,
            Item_string = 'New Item!';

            jQuery(document).on( 'click', '.insert-media', function( event ) {
                var workflow = wp.media.editor.get();
                var options  = workflow.options;

                if ( undefined == My_new_item ) {
                    // see for wp.media.view.RouterItem also: wp-includes/js/media-views.js
                    My_new_item = new wp.media.view.RouterItem( _.extend( options, { text: Item_string } ) );
                    workflow.menu.view.views.set( '.media-menu', My_new_item, _.extend( options, { add: true } ) );
                }

            });
        });
    </script>
    <?php
}
6
bueltge

Thomas Griffinさんが、新しいメディアマネージャの使い方についてのプラグインの例 New Media Image Uploader を作成しました。

このプラグインは、画像ファイルをテキストフィールドにアップロード/挿入する方法を示すことによって、新しいメディアマネージャのワークフローをプラグイン/テーマに統合するための堅実な例を提供します。

3
Elliott

あなたの質問に対する完全な答えはありませんが、ここから始めるのが良いでしょう。新しいMedia Managerをカスタマイズするには、wp-includes/js/media-views.jsのjavascript Backboneコードを検討する必要があります。例えば、「Insert from URL」ツールバーに「Select All」ボタンを追加する小さなプラグインがあります。

custom.php

add_action('admin_enqueue_scripts', 'custom_add_script');
function custom_add_script(){
    wp_enqueue_script('custom', plugins_url('custom.js', __FILE__), array('media-views'), false, true);
}

custom.js

var originalToolbar = wp.media.view.Toolbar.Embed;
wp.media.view.Toolbar.Embed = originalToolbar.extend({
    // code modified from media-views.js, l 2500
    initialize: function() {

        this.options.items = _.defaults( this.options.items || {}, {
            // keep the original button
            select: {
                style:    'primary',
                text:     wp.media.view.l10n.insertIntoPost,
                priority: 80,
                click:    this.clickSelect,
                requires: false
            },
            // and add a new one
            selectAll: {
                text: 'Select All',
                style: 'primary',
                priority: 80,
                requires: false,
                click: this.selectAll
            }
        });

        wp.media.view.Toolbar.Select.prototype.initialize.apply( this, arguments );
    },

    selectAll: function(){
        console.log('select All');
    }
});

[投稿へのカスタム挿入]ボタンについては、代わりにギャラリーのショートコードを使用することをお勧めします。目的の画像を選択し、ショートコードを正しい場所にショートコードを挿入するためのUIはすでに存在します。あなたがしなければならないのはあなた自身のギャラリーのショートコードフォーマットを書くことだけです。

gallery_shortcodewp-includes/media.php関数を見て、post_galleryフィルターを使用してください。

3

WP 3.6で、選択されたそれぞれの画像に対するidcidの両方を含むバックボーンのstate.get("selection")._byIdのためにaesqeの(非常に役に立つ)答えが2回挿入される画像になるケースに遭遇しました。

state.get("selection")._byIdstate.get("selection").modelsに変更することで、各オブジェクトの属性を保持しながら、これを修正しました。

うまくいけば、これは誰かにいくつかのフラストレーションを保存します。答えではなくコメントとしてこれを投稿したはずですが、残念ながら、私は評判がありません。

2
Dameian