问题描述
有没有一些 wordpress 魔术/插件,将使媒体库只显示上传到特定的自定义帖子类型的图像?我有一个名为”artists” 的自定义帖子类型,我想要,当管理员单击上传/附加图像时,媒体库弹出窗口只显示已上传到艺术家自定义类型的图像,而不是整个网站。
我使用 ACF 插件来处理自定义字段,以及定制的 post 类型 ui 。这可能吗?
最佳解决方案
我不是 100%肯定如果我得到你的问题正确,但… 也许这将帮助你…
媒体上传器使用简单的 WP_Query
获取附件,因此您可以使用许多过滤器来修改其内容。
唯一的问题是,您不能使用 WP_Query
参数查询具有特定 CPT 的帖子作为父级,所以我们必须使用 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;
}
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。