メディアを投稿に挿入するときに、Media-Libraryのデフォルト表示を「すべてのメディアアイテム」から「この投稿にアップロード」に変更する方法はありますか。
この質問が抜粋された別のスレッドがあります: 添付ファイルの関係を管理する方法
私の前の答えには2つの小さな間違いがありました:
change
イベントをトリガーするのを忘れていました。これが固定コードです。
<?php
/**
* Plugin Name: Pre-select post specific attachments
*/
add_action( 'admin_footer-post-new.php', 'wpse_76048_script' );
add_action( 'admin_footer-post.php', 'wpse_76048_script' );
function wpse_76048_script()
{
?>
<script>
jQuery(function($) {
var called = 0;
$('#wpcontent').ajaxStop(function() {
if ( 0 == called ) {
$('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
called = 1;
}
});
});
</script>
<?php
}
上記のJSに関する唯一の問題は、ページがロードされた後、およびすでにALL MEDIA ITEMSをダウンロードし始めた後に、変更をトリガーするために選択ボックスを切り替えることです。遅いT1の私のクライアントにとって、これはALL MEDIA TIMESとUPLOADED TO THIS POSTの両方のアイテムを一緒にダウンロードするので事をロックしました。
Post Thumbnail Editor Pluginを開発しているすばらしいSewpaflyから助けを得ました。彼は、すべてのメディアアイテムのロードを防止し、デフォルトで "この投稿にアップロードされた"イメージのみをロードするよう強制するすばらしいJSを共有しました。
ファイル: myadmin.js
jQuery(function($) {
var called = 0;
$('#wpcontent').ajaxStop(function() {
if ( 0 == called ) {
$('[value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
called = 1;
}
});
var oldPost = wp.media.view.MediaFrame.Post;
wp.media.view.MediaFrame.Post = oldPost.extend({
initialize: function() {
oldPost.prototype.initialize.apply( this, arguments );
this.states.get('insert').get('library').props.set('uploadedTo', wp.media.view.settings.post.id);
}
});
});
ファイル: functions.php
add_action('admin_enqueue_scripts', 'add_admin_js');
function add_admin_js() {
wp_enqueue_script('admin_js', get_bloginfo( 'template_directory' ) . '/js/admin.js');
}
GitHub上の同じコード: https://Gist.github.com/fishnyc22/5593693
私はそれをJSファイルにドロップし、admin_enqueue_scriptsを使ってfunctions.phpでそれを呼び出しました。 PHPとJSの両方については上記の要旨を参照してください。
見事に動作します。うまくいけば、素晴らしいwordpressの人々は今後のアップデートでこれを修正しますが、今のところ Sewpafly は私が見つけた最高の解決策を持っています。またありがとうございます。
私は使用していないし、膨張を防いでいたので、ビューアがデフォルトで私が無効にした(0,0に設定された)中サイズの画像になっていることを発見しました。中サイズが利用できないとき、wordpressはフルサイズの画像をロードします。私はそれ以来、中型を可能にしました。
@ toschoああ、私はあなたのコードにバグを見つけました。私と裸でください。問題を再現するには、次の手順を実行してください。
1)下書き投稿を開きます。
2)Add Media
ボタンをクリックしてください。 jQuery関数がロードされるのを待ちます。
3)左側にあるSet Featured Image
リンクをクリックしてください。
4)メディアポップアップウィンドウを閉じ、投稿編集ページで、右側のサイドバーにあるSet featured image
リンクをクリックします。
5)jQuery関数が機能しないことがわかります。
ただし、編集後の読み込みで最初にSet featured image
リンクをクリックした場合は、機能は機能します。この問題を再現して解決策を見つけることができますか?回答としてこれを投稿して申し訳ありませんが、このプラットフォームは現在のところ私に良い選択肢を提供していません。
編集:誰かが toscho について教えてください。あなたは私が彼に通知を与えるべきだと私が思う彼の答えにコメントを加えることによってこれをすることができます。私は十分な評判がないので私はコメントを書くことができません...
編集2 :この問題を絶対に避けたい場合は、ポップアップの[Set Featured Image]リンクを削除し、ユーザーにサイドバーリンクを使用させることができます(WPバージョンより前のバージョン)。 3.5)。 WP 3.5で導入されたこのフィルタを使用してください。
add_filter( 'media_view_strings', 'cor_media_view_strings' );
/**
* @see wp-includes|media.php
*/
function cor_media_view_strings( $strings ) {
unset( $strings['setFeaturedImageTitle'] );
return $strings;
}
私が言ったように、これはメインコードのために投稿された解決策があるまで絶望的な修正です。
新しいバージョンのwordpressはメディアアップローダーに対して異なるアプローチ(advanced Backbonejs )を使用します。 このプラグイン からのコードをチェックしてください。これはWordPressの新しいバージョンで動作します。
私がこれらの解決策のほとんどについて好きではなかった主なことはそれがたくさんの画面で点滅していたということです、そしてあなたが 注目の画像 をクリックするとそれはすべての画像を表示することに戻ります。いくつかの検索の後、私はそれがこれらの問題を解決するように見える恒久的な解決策(Thanks to ÜnsalKorkmaz )を見つけたと思います。コード:
add_action( 'admin_footer-post-new.php', 'media_library_filter' );
add_action( 'admin_footer-post.php', 'media_library_filter' );
function media_library_filter() {
?>
<script type="text/javascript">
jQuery(document).on("DOMNodeInserted", function(){
jQuery('select.attachment-filters [value="uploaded"]').attr( 'selected', true ).parent().trigger('change');
});
</script>
<?php
}
あなたが試してみて点滅していないことを意味するビューを変更したとしても、これはメディアライブラリを永久に "Uploaded To This Post"だけを表示するように設定します。
Selectboxを完全に削除するためにこのコードを追加しました。
add_action( 'admin_head', 'hide_select_ddl' );
function hide_select_ddl()
{
?>
<style type="text/css">
div.media-menu a.media-menu-item:nth-child(3) {display:none!important;}
.media-frame-content .attachment-filters:first-child {
display:none;
}
</style>
<?php
}
これは、AJAXを2回トリガーするものの、dateFilter
を現在の月に設定するための私の解決策です。
.on('content:render:browse', function(a, b) {
var filter = a.toolbar.secondary.get('dateFilter');
if (filter.model) {
filter.model.set(filter.filters[1].props);
}
})