媒体库-将图像限制为自定义帖子类型


10

是否有一些wordpress magic / plugin可以使媒体库仅显示上载到特定自定义帖子类型的图像?我有一个称为“艺术家”的自定义帖子类型,我希望在管理员单击以上传/附加图像时,媒体库弹出窗口仅显示已上传到艺术家自定义类型的图像,而不是整个网站。

我使用ACF插件来处理自定义字段和自定义帖子类型ui。这可能吗?


让我检查一下我是否正确理解...。因此,您要更改媒体库弹出窗口,以便在编辑该CPT时打开它仅显示上传到特定CPT的图像。在编辑其他帖子类型时,它应该像往常一样工作吗?
KrzysiekDróżdż

这样做的背景/原因是什么?您是否要实施艺术家选择器?
汤姆·J·诺维尔

1
在我的案例中,用例是一个大型的WordPress网站,并非每个人都编辑相同的帖子类型。显示最新的相关文件上载(而不是从整个站点上载)更加整齐(且有用),以便可以轻松地选择需要重用的文件。(我最初并没有问这个问题,而是增加了赏金。我正在尝试完全按照Krzysiek的描述进行(感谢您回答,我会尝试))
guidod 2015年

Answers:


9

我不确定是否能正确解决您的问题,但...可能会为您提供帮助...

媒体上载器使用simple提供附件WP_Query,因此您可以使用许多过滤器来修改其内容。

唯一的问题是您不能使用WP_Query参数来查询具有特定CPT作为父项的帖子...因此,我们将不得不使用posts_whereposts_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;
}

感谢您的宝贵意见,我删除了答案,以免混淆任何人。为您的+1。
jackreichert

0

编辑特色图片时仅显示属性的图片

function my_bind_media_uploader_special_filters($query) 
{

    add_filter('posts_where', 'my_posts_where');
    return $query;
}

add_filter('ajax_query_attachments_args','my_bind_media_uploader_special_filters');

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 && 'property' == $post->post_type) {
            $where .= $wpdb->prepare(" AND id in (select distinct meta_value from 
            wpdb_postmeta where meta_key='fave_property_images' and post_id = $post_id)", 
            $post->post_type);
        }
    }
    return $where;
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.