Ich bin nicht 100% sicher, ob ich Ihr Problem richtig verstehe, aber ... Vielleicht hilft Ihnen das ...
Media Uploader erhält Anhänge mit einfachen WP_Query
, so dass Sie viele Filter verwenden können, um seinen Inhalt zu ändern.
Das einzige Problem ist, dass Sie keine Beiträge mit einem bestimmten CPT als übergeordnetem Element mit WP_Query
Argumenten abfragen können. Wir müssen also verwenden posts_where
und posts_join
filtern.
Um sicherzugehen, dass wir nur die Abfrage des Medien-Uploaders ändern, verwenden wir diese ajax_query_attachments_args
.
Und so sieht es aus, wenn es kombiniert wird:
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');
Wenn Sie das Dialogfeld zum Hochladen von Medien öffnen, während Sie den Beitrag bearbeiten (Beitrag / Seite / CPT), werden nur Bilder angezeigt, die diesem bestimmten Beitragstyp zugeordnet sind.
Wenn Sie möchten, dass es nur für einen bestimmten Beitragstyp funktioniert (z. B. Seiten), müssen Sie die my_posts_where
Funktionsbedingungen wie folgt ändern :
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;
}