3.5でメディアライブラリのデフォルトビューを変更しますか?


33

メディアを投稿に挿入するときに、Media-Libraryのデフォルトビューを「すべてのメディアアイテム」から「この投稿にアップロード」に変更する方法はありますか?

借りたスクリーンショット

この質問が抽出された別のスレッドがあります: 添付ファイルの関係を管理する方法


他のすべてのプラグインをオフにして、デフォルトのテーマに切り替えてから、toschoのプラグインをアクティブにしようとしましたか?JSの競合の可能性があります。
カイザー

回答:


22

私の以前の回答には2つの小さな間違いがありました。

  1. change親のイベントをトリガーするのを忘れました。
  2. すべてのAJAX呼び出しで関数を呼び出し、他の選択を不可能にしました。

修正されたコードは次のとおりです。

<?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
}

toscho、どうもありがとう!<br>ここにドロップしたプラグインコードは、今では私にとって魅力的なものです。(誰かがコメントの中に、この「答え」を転換し、回答にステータスを設定することができた場合、それはいいだろう)
divの

答えのチェックマークをオンにできるのはあなただけです。質問に使用したアカウントを使用する必要があります。両方のアカウントをマージしました。チェックマークをオンにできるはずです。:)
fuxia

3
この非常にエレガントなコードは、Add Mediaボタンをクリックしても機能しますが、ボタンをクリックしても機能しませんSet featured image。そこでも動作させる方法はありますか?
クリスティーンクーパー

私のシステムでも機能画像に対して機能します。
fuxia

1
これには潜在的な問題があり、value = uploadedを持つすべてを選択ているように見えます。また、すべてのアップローダーの初期化にjavascriptを追加する場合wp.media.view.UploaderWindow.prototype.on('ready',function() {console.log(jQuery('.media-modal-content'))...your code here...});は、より適切です。
NoBugs

13

上記のJSの唯一の問題は、ページがロードされ、すべてのメディア項目のダウンロードが既に開始された後に、選択ボックスを切り替えて変更をトリガーすることです。遅い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の両方については、上記のGISTを参照してください。

見事に動作します。うまくいけば、素晴らしいワードプレスの人々が次のアップデートでこれを修正することを願っていますが、今のところSewpaflyが私が見つけた最良のソリューションを持っています。再びバディに感謝します。

私は、膨張を使用および防止していないため、ビューアがデフォルトで無効にした(0,0に設定した)MEDIUMサイズの画像になっていることを発見したことに注意してください。中サイズが利用できない場合、ワードプレスはフルサイズの画像をロードします。以来、中サイズを有効にしています。


非常に役立つ-何らかの種類のフックを使用して、メディアライブラリに表示する画像の数を制限することはできませんか?
生れ

:個人的に、私も同様に、メディアのドロップダウンメニューを非表示になります。このCSS追加するpastebin.com/1dP6SR4g
Howdy_McGee

1
残念ながら、このソリューションには1つの大きな問題があります。次の手順を実行します。1.ポスト編集画面でポストを開きます。2. [メディアの追加]ボタンをクリックする前に、[注目の画像を設定]リンクをクリックします。3.これまでのところ、コードは正常に機能しています。次に、ウィンドウを閉じて、[メディアの追加]ボタンをクリックします。「すべてのメディア」オプションが選択されていることがわかりますが、アップロードされメディアが表示されています。すべての画像に切り替えるには、アップロードに切り替えてからすべてのメディアに切り替える必要があります。誰もこの問題の解決策を持っていますか?それでもこれをありがとう。
クリスティーンクーパー

4

@toschoああ、私はあなたのコードにバグを見つけました。私と一緒に裸にしてください。問題を再現するには、以下を正確に実行します。

1)ドラフト投稿を開きます。

2)ボタンをクリックしAdd Mediaます。jQuery関数がロードされるのを待ちます。

3)左側で、Set Featured Imageリンクをクリックします。

4)[メディア]ポップアップウィンドウを閉じ、投稿編集ページでSet featured image、右側のサイドバーのリンクをクリックします。

5)jQuery関数が機能しないことがわかります。

ただし、Set featured image編集後のロードで最初にリンクをクリックした場合、この機能は機能します。この問題を再現して解決策を見つけることができますか?これを回答として投稿して申し訳ありませんが、このプラットフォームは現在、より良いオプションを提供していません。

編集:誰かがこれについてトスコに知らせてください。彼の回答にコメントを追加することでこれを行うことができます。十分な評判がないためコメントを書くことができません...

編集2:この問題を必死に避けたい場合は、ポップアップの「注目画像を設定」リンクを削除し、ユーザーにサイドバーリンク(3.5より前のWPバージョンなど)の使用を強制することができます。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;
}

私が言ったように、これはメインコード用のソリューションが投稿されるまでは必死の修正です。


私はこれを知っています。プラグインを拡張する時間がありません。
FUXIA

近い将来にそれを延長する時間を見つけていただければ、私たち全員が感謝していることを理解しています。
クリスティーンクーパー

私はこの答えを、必死のもののための「言葉」で更新しました。トスコあなたが望むなら、これをあなたの答えに追加することができます...
クリスティーンクーパー

2

私がこれらのソリューションのほとんどについて気に入らなかった主なことは、多くの画面で点滅していることであり、「注目の画像」をクリックすると、すべての画像の表示に戻ります。いくつかの検索の後、これらの問題を解決するように見える恒久的な解決策を見つけたと思います(Ü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 
}

点滅しないことを意味するビューを変更しようとしても、「この投稿にアップロード」のみを表示するようにメディアライブラリを永続的に設定します。

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
}

2

wordpressの新しいバージョンは、メディアアップローダーに異なるアプローチ(高度なBackbonejs)を使用します。WordPressの新しいバージョンで動作するため、このプラグインのコードを確認してください。


2
リンクだけでなく、実際にコードを共有してくれたら良かったでしょう。
カイザー

0

これはdateFilter今月に設定する私のソリューションですが、AJAXを2回トリガーします。

.on('content:render:browse', function(a, b) {
  var filter = a.toolbar.secondary.get('dateFilter');           
  if (filter.model) {
    filter.model.set(filter.filters[1].props);
  }
})
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.