メディアライブラリ-画像をカスタム投稿タイプに制限する


10

メディアライブラリに特定のカスタム投稿タイプにアップロードされた画像のみを表示させるワードプレスマジック/プラグインはありますか?「アーティスト」と呼ばれるカスタム投稿タイプがあります。管理者が画像をアップロード/添付すると、メディアライブラリのポップアップには、サイト全体ではなく、アーティストカスタムタイプにアップロードされた画像のみが表示されます。

カスタムフィールドとカスタム投稿タイプUIの処理にACFプラグインを使用しています。これは可能ですか?


正しく理解しているか確認してみましょう...このCPTの編集中に開いた場合に、特定のCPTにアップロードされた画像のみが表示されるように、メディアライブラリポップアップを変更します。そして、他の投稿タイプを編集しているときはいつものように動作するはずですか?
KrzysiekDróżdż

これを行うことの背景/理由は何ですか?アーティストピッカーを実装しようとしていますか?
トムJノウェル

1
私の場合のユースケースは、誰もが同じ投稿タイプを編集するわけではない大規模なWordPressサイトです。再利用が必要なファイルを簡単に選択できるように、サイト全体からのアップロードとは対照的に、最新の関連ファイルのアップロードを表示することは非常に整然としていて便利です。(私はもともとこの質問をしませんでしたが、賞金を追加しました。私はKrzysiekが説明したとおりに実行しようとしています(回答をありがとう、それを試してみる))
guidod

回答:


9

私はあなたの問題を正しく解決するかどうか100%確かではありませんが...多分これはあなたを助けるでしょう...

メディアアップローダーはシンプルな添付ファイルを取得WP_Queryするため、多くのフィルターを使用してコンテンツを変更できます。

唯一の問題は、WP_Query引数を使用して、特定のCPTを親として持つ投稿をクエリできないことです。そのためposts_where、とposts_joinフィルターを使用する必要があります。

確かに、メディアアップローダーのクエリのみを変更するので、を使用しますajax_query_attachments_args

そして、これを組み合わせたときの外観は次のとおりです。

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post ) {
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

function my_posts_join($join) {
    global $wpdb;

    $join .= " LEFT JOIN {$wpdb->posts} as my_post_parent ON ({$wpdb->posts}.post_parent = my_post_parent.ID) ";

    return $join;
}


function my_bind_media_uploader_special_filters($query) {
    add_filter('posts_where', 'my_posts_where');
    add_filter('posts_join', 'my_posts_join');

    return $query;
}
add_filter('ajax_query_attachments_args', 'my_bind_media_uploader_special_filters');

投稿(投稿/ページ/ CPT)の編集中にメディアアップローダーダイアログを開くと、この特定の投稿タイプに添付された画像のみが表示されます。

特定の投稿タイプ(ページとしましょう)でのみmy_posts_where機能するようにするには、次のように関数の条件を変更する必要があります。

function my_posts_where($where) {
    global $wpdb;

    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];

        $post = get_post($post_id);
        if ( $post && 'page' == $post->post_type ) {  // you can change 'page' to any other post type
            $where .= $wpdb->prepare(" AND my_post_parent.post_type = %s ", $post->post_type);
        }
    }

    return $where;
}

役立つコメントをありがとう、混乱を避けるために回答を削除しました。あなたの+1。
jackreichert 2015年

0

注目の画像を編集するときにプロパティの画像のみを表示します

function my_bind_media_uploader_special_filters($query) 
{

    add_filter('posts_where', 'my_posts_where');
    return $query;
}

add_filter('ajax_query_attachments_args','my_bind_media_uploader_special_filters');

function my_posts_where ($where) 
{

    global $wpdb;
    $post_id = false;
    if ( isset($_POST['post_id']) ) {
        $post_id = $_POST['post_id'];
        $post = get_post($post_id);
        if ( $post && 'property' == $post->post_type) {
            $where .= $wpdb->prepare(" AND id in (select distinct meta_value from 
            wpdb_postmeta where meta_key='fave_property_images' and post_id = $post_id)", 
            $post->post_type);
        }
    }
    return $where;
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.