Tôi không chắc chắn 100% nếu tôi hiểu đúng vấn đề của bạn, nhưng ... Có lẽ điều này sẽ giúp bạn ...
Trình tải lên đa phương tiện có các tệp đính kèm đơn giản WP_Query
, vì vậy bạn có thể sử dụng nhiều bộ lọc để sửa đổi nội dung của nó.
Vấn đề duy nhất là bạn không thể truy vấn các bài đăng có CPT cụ thể bằng cách sử dụng WP_Query
đối số ... Vì vậy, chúng tôi sẽ phải sử dụng posts_where
và posts_join
lọc.
Để chắc chắn, chúng tôi sẽ chỉ thay đổi truy vấn của người tải lên phương tiện, chúng tôi sẽ sử dụng ajax_query_attachments_args
.
Và đây là giao diện của nó, khi kết hợp:
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');
Khi bạn mở hộp thoại tải lên phương tiện trong khi chỉnh sửa bài đăng (bài / trang / CPT), bạn sẽ chỉ thấy hình ảnh được đính kèm với loại bài đăng cụ thể này.
Nếu bạn muốn nó chỉ hoạt động cho một loại bài đăng cụ thể (giả sử các trang), bạn sẽ phải thay đổi điều kiện trong my_posts_where
chức năng như vậy:
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;
}