用户能够编辑自己的评论

时间:2019-12-16 作者:Tinstar

我希望允许某些(登录的)用户能够编辑他们的评论。我不在乎他们是否只能通过后端进行编辑——显然,前端编辑会很好,但我愿意在这一点上尽我所能。许多在线问题指向edit_posts 作为上限添加,但似乎没有做到这一点。在玩弄了自定义角色和功能之后,我注意到启用注释编辑的实际上是edit_others_posts.

我很困惑。我看到的每个答案都提到了edit_posts 一直提到,在内部,评论都是帖子。但只要edit_posts, 您仍然可以编辑自己的帖子,而其他人撰写的帖子则受到限制。那么,如果评论也是帖子,为什么您需要能够通过edit_others_posts 为了编辑任何评论?

另外:是否有一个很好的解决方案?我需要这些用户能够编辑无限期,如果可能的话。我假设这将涉及一些挂钩/过滤器,因为单凭这些功能似乎无法解决这一问题。

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

因此,我的解决方案可能有点老套,但确实有效。评论可以无限期编辑,并且只能由管理员和发布评论的注册用户编辑。

我要处理的部分问题是edit_posts 只允许帖子的作者编辑所有评论,不一定是评论人自己。为了做到这一点,您需要editable_commenter 角色edit_others_posts 功能,以便他们可以编辑评论,无论他们是否编写了父帖子。然后,你需要系统性地取消所有允许他们接触其他人帖子或评论的管理选项。

首先,移除comment_row_actions 为您的editable_commenters 在Comments backend页面上查找用户未创作的每条评论。我使用电子邮件将用户与评论进行匹配,因为这是最不可能改变的部分。

// Hide the comments row for non-admins who don\'t match the email
function edit_own_comments_backend($actions, $comment) {
    if(is_user_logged_in()) {
        $comment_email = get_comment_author_email($comment->comment_ID);
        $email = wp_get_current_user()->user_email;

        if ($comment_email != $email && !current_user_can(\'administrator\')) {
            unset($actions[\'inline hide-if-no-js\']);
            unset($actions[\'edit\']);
            unset($actions[\'trash\']);
            unset($actions[\'approve\']);
            unset($actions[\'unapprove\']);
            unset($actions[\'spam\']);
            unset($actions[\'delete\']);
            unset($actions[\'quickedit\']);
            unset($actions[\'reply\']);
        }
    }

    return $actions;
}

add_filter(\'comment_row_actions\', \'edit_own_comments_backend\', 10, 2);
就我而言editable_commenters 这个角色仅仅是一个评论者,他们永远不能编辑、创建或删除任何帖子。因此,我们从侧边栏中删除帖子,并从顶部对齐的管理栏中进行新建和编辑。

// Hide the "Posts" menu item from all editable_commenters

function hide_others_posts_backend() {
    if (is_user_logged_in() && current_user_can(\'editable_commenters\')) {
        remove_menu_page(\'edit.php\');
    }
}

add_action(\'admin_menu\', \'hide_others_posts_backend\');

// Remove "New" and "Edit" from the admin top bar for commenters
function remove_top_admin_nodes($wp_admin_bar) {
    if (current_user_can(\'editable_commenter\')) {
        $wp_admin_bar->remove_node(\'new-content\');
        $wp_admin_bar->remove_node(\'edit\');
    }   
}
add_action(\'admin_bar_menu\', \'remove_top_admin_nodes\', 999);
您还需要隐藏“评论后端”页面上的“回复”列,因为他们仍然可以单击帖子标题访问编辑窗口,但我还没有添加。

最后,在帖子页面上,如果您想保留编辑链接,但想将其限制为仅限于用户的帖子,请包括此内容。

// Show or hide the edit link on comments if you are/aren\'t the author
function show_single_edit_comments($link, $comment_id, $text) {
    if(is_user_logged_in()) {
        $comment_email = get_comment_author_email($comment_id);
        $email = wp_get_current_user()->user_email;

        if ($comment_email == $email || current_user_can(\'administrator\')) {
            return $link;
        }
        else {
            return false;
        }
    }

    return false;
}

add_filter(\'edit_comment_link\', \'show_single_edit_comments\', 10, 3);

相关推荐

使用htaccess通过wp-Comments-post.php阻止垃圾邮件

我的WordPress网站上有很多垃圾评论。正在使用wp-comments-post.php 文件我可以从日志中看到:\"POST /wp/wp-comments-post.php HTTP/1.0\" 302 3744 \"https://example.com/wp/link/\" \"Mozilla/5.0 (Windows NT 6.1; WOW64) 我已经在我的.htaccess 文件:RewriteEngine On RewriteCond %{REQUEST_METHOD