我不能百分之百确定我是否正确地解决了你的问题,但是。。。也许这会帮助你。。。
媒体上载程序通过简单WP_Query
, 因此,您可以使用许多过滤器来修改其内容。
唯一的问题是,您无法使用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;
}