不在媒体库中显示头像

时间:2015-12-31 作者:Ivannnnn

我允许用户上传我创建的头像子文件夹中的上传文件夹中存储的头像。

问题是,现在头像与其他上传的图像一起列在媒体库中。

我怎样才能防止这种情况?

我正在寻找一个过滤器来过滤掉正在显示的内容,但找不到。如果有必要的话,我不介意将avatars文件夹放在uploads文件夹之外。

2 个回复
最合适的回答,由SO网友:s_ha_dum 整理而成

就像WordPress中的大多数页面加载一样,WP_Query 与意义密切相关pre_get_posts 是你的朋友。概念验证:

function step_2($qry) {
  $qry->set(\'post__not_in\',array(468,303));
}
function step_1() {
  add_action(\'pre_get_posts\',\'step_2\');
}
add_action(\'load-upload.php\',\'step_1\');
我正在使用load-upload.php hook 将筛选器隔离到“库”页面。如果您已经更改了头像的上传文件夹,那么您已经有了一些“上传”代码。你需要扩展它来跟踪你的头像ID并检索它们,而不是像我那样硬编码。也可以使用其他机制来过滤结果。

虽然我还没有对此进行测试,但如果您将其作为“附件”以外的其他帖子类型进行上传,那么其余的内容可能会在无需进一步努力的情况下完成。

SO网友:jgraup

大概How can I hide media library images from general users? 与您当前的问题有点关联。在下面的例子中,如果用户不是管理员,他们只能看到自己上传的图片。

这个技巧还可以通过在上传后在图像上附加元数据来表示这是一个特殊的上传,然后修改查询以排除带有该特殊元数据的项目。

function hide_posts_media_by_other($query) {
    global $pagenow;
    if( ( \'edit.php\' != $pagenow && \'upload.php\' != $pagenow   ) || !$query->is_admin ){
        return $query;
    }
    if( !current_user_can( \'manage_options\' ) ) {
        global $user_ID;
        $query->set(\'author\', $user_ID );
    }
    return $query;
}
add_filter(\'pre_get_posts\', \'hide_posts_media_by_other\');

/*
 * Hide Media Images
 */
function hide_attachments_wpquery_where( $where ){
    global $current_user;
    if( !current_user_can( \'manage_options\' ) ) {
        if( is_user_logged_in() ){
            if( isset( $_POST[\'action\'] ) ){
                // library query
                if( $_POST[\'action\'] == \'query-attachments\' ){
                    $where .= \' AND post_author=\'.$current_user->data->ID;
                }
            }
        }
    }
    return $where;
}
add_filter( \'posts_where\', \'hide_attachments_wpquery_where\' );

// via: http://phpbits.net/hide-wordpress-posts-and-media-uploaded-by-other-users/

相关推荐

Rest API rename media

我已经能够使用REST API上传图像,但现在名称错误,我正在考虑浏览我所有的产品并重命名图像。因为我有500多种产品,所以它似乎需要一些自动化。是否有方法更新媒体实体上的文件名?不要谈论标题,这是其他的东西,很容易做到。我见过一些插件,但它们一个接一个地运行,这是不受欢迎的。有什么提示吗?