特定のカスタム投稿タイプにアップロードされた画像だけをメディアライブラリに表示させるWordpressの魔法/プラグインはありますか? 「アーティスト」と呼ばれるカスタム投稿タイプがあります。管理者がクリックして画像をアップロード/添付すると、メディアライブラリのポップアップにはアーティストのカスタムタイプにアップロードされた画像のみが表示されます。
私は、カスタムフィールドとカスタム投稿タイプのUIを処理するためにACFプラグインを使います。これは可能ですか?
私はあなたの問題が正しいかどうか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;
}