私のプラグインでは、Media Managerに2つのボタン(「media-toolbar-primary」セクションの「Insert Into Post」の左側)を追加し、それにjQueryアクションを接続します。
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>
私が理解している限りでは、唯一の方法は適切なバックボーンビューを上書きすることですが、それに加えて、それが今のところ私が知っていることすべてです。
手伝ってくれてありがとう。
このコードブロックで、[投稿に挿入]ボタンのすぐ隣にボタンが追加されます。クリックすると、選択した画像が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メディアブラウザでは添付ファイルが少しずつ読み込まれるため、「すべての画像」を選択するのは少し面倒です。調べてみますが、添付ファイルを手動で選択することをお勧めします。
小さなプラグインを書き、オーバーレイポップアップ内のメディアマネージャの左側のサイドバーのリストに項目を追加するために次のサンプルソースを使用してください。
以下の情報源の結果:
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
}
Initソリューションフォーム このWPSE回答 。
ドラフトプラグインへのリンク WP3.5 Media LibraryポップアップにJavaScriptメニューを追加する例
Thomas Griffinさんが、新しいメディアマネージャの使い方についてのプラグインの例 New Media Image Uploader を作成しました。
このプラグインは、画像ファイルをテキストフィールドにアップロード/挿入する方法を示すことによって、新しいメディアマネージャのワークフローをプラグイン/テーマに統合するための堅実な例を提供します。
あなたの質問に対する完全な答えはありませんが、ここから始めるのが良いでしょう。新しい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_shortcode
のwp-includes/media.php
関数を見て、post_gallery
フィルターを使用してください。
WP 3.6で、選択されたそれぞれの画像に対するid
とcid
の両方を含むバックボーンのstate.get("selection")._byId
のためにaesqeの(非常に役に立つ)答えが2回挿入される画像になるケースに遭遇しました。
state.get("selection")._byId
をstate.get("selection").models
に変更することで、各オブジェクトの属性を保持しながら、これを修正しました。
うまくいけば、これは誰かにいくつかのフラストレーションを保存します。答えではなくコメントとしてこれを投稿したはずですが、残念ながら、私は評判がありません。