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_Queryarguments ... Donc, nous devrons utiliser posts_whereet posts_joinfiltrer.
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_wherefonction 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;
}