Je ne suis pas sûr à 100% de bien résoudre votre problème, mais ... Peut-être que cela vous aidera ...
L'outil de téléchargement de médias obtient des pièces jointes avec une simplicité WP_Query
, vous pouvez donc utiliser de nombreux filtres pour modifier son contenu.
Le seul problème est que vous ne pouvez pas interroger les publications avec CPT spécifique comme parent en utilisant des WP_Query
arguments ... Donc, nous devrons utiliser posts_where
et posts_join
filtrer.
Pour être sûr, que nous ne modifierons que la requête de l'uploader de média, nous utiliserons ajax_query_attachments_args
.
Et voici à quoi cela ressemble, une fois combiné:
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');
Lorsque vous ouvrez la boîte de dialogue de téléchargement de média pendant la modification de la publication (publication / page / CPT), vous ne verrez que les images attachées à ce type de publication spécifique.
Si vous souhaitez que cela ne fonctionne que pour un type de publication spécifique (disons les pages), vous devrez changer la condition de la my_posts_where
fonction comme suit:
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;
}