ฉันไม่แน่ใจ 100% ว่าปัญหาของคุณถูกต้องหรือไม่ แต่ ... บางทีนี่อาจช่วยคุณได้ ...
Media uploader ได้รับไฟล์แนบที่ใช้งานง่ายWP_Query
ดังนั้นคุณสามารถใช้ตัวกรองจำนวนมากเพื่อแก้ไขเนื้อหาได้
ปัญหาเดียวคือคุณไม่สามารถค้นหาโพสต์ด้วย CPT เฉพาะในฐานะผู้ปกครองโดยใช้WP_Query
อาร์กิวเมนต์ ... ดังนั้นเราจะต้องใช้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;
}