检查附件(已上传)图像的作者或上传者ID是否匹配?

时间:2016-07-17 作者:lonerunner

我正试图用dropzonejs uploader编写一个在前端上传和删除图像的函数,到目前为止,我设法使一切正常。

但问题是,我需要确保正在删除的图像实际上是由正在删除图像的用户上载的。

在媒体库的wordpress管理区域中,当我单击图像时,在附件详细信息中有一个Uploaded by 使用上载特定图像的用户名。

但在网上和wordpress codex上搜索时,我没有找到如何检索上传图像的用户id的任何信息。

所以id我有图像id并尝试用删除wp_delete_attachment 是否有办法检查谁是该图像的上载者,并将登录的用户id与图像上载者id进行比较,如果两者匹配,则删除该图像。

2 个回复
SO网友:knif3r

我在我的网站上使用了类似的东西,只显示其他用户上传的媒体附件,如果这是你的一个选项,你可以使用代码,也可以编辑它以满足你的需要,但事实是,它获取用户ID的方式与从带有post_author

下面是您可以测试的代码,看看这是否对您有好处。

//Hide Media Library images Start
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\');

add_filter(\'posts_where\', \'hide_attachments_wpquery_where\');

function hide_attachments_wpquery_where($where) {
    global $current_user;
    if (!current_user_can(\'manage_options\')) {
        if (is_user_logged_in()) {
            if (isset($_POST[\'action\'])) {
                if ($_POST[\'action\'] == \'query-attachments\') {
                    $where .= \' AND post_author=\' . $current_user->data->ID;
                }
            }
        }
    }
    return $where;
}

//Hide Media Library images END

SO网友:lonerunner

解决方案实际上非常简单,只需一行代码,因为我意识到附件id实际上与任何其他帖子id相同,我可以根据帖子字段检索用户id。

$post_author_id = get_post_field( \'post_author\', $post_id );
这将获取上载图像的用户的用户id$post_id 是图像附件id

所以进一步检查

if( $post_author_id == $current_user->ID )
检查图像的上载者和当前登录的用户是否相同,并允许或取消删除图像。

相关推荐

使用wp.media和wp.mce将图像添加到快捷代码的可视编辑器弹出窗口:更改图像复制快捷代码

tl;dr: 为什么在TinyMCE弹出窗口中使用media manager弹出窗口会导致短代码重复?这是我的准则还是生活的方式?[剧透:这是我的代码]我编写了一个小插件来创建一个可视化编辑器按钮和弹出窗口,插入一个表示;媒体对象:图像向右,文本向左。在可视化编辑器中,单击按钮,在弹出窗口中填写文本,选择图像万岁该短代码已正确插入编辑器中,媒体视图将很好地呈现它。(这是此问题的简化案例。完整弹出窗口有一堆选项。)我唯一的问题是我是否要编辑对象并更改图像。如果我编辑文本,一切都很好。如果我更改图像,那么整个