因此,我的解决方案可能有点老套,但确实有效。评论可以无限期编辑,并且只能由管理员和发布评论的注册用户编辑。
我要处理的部分问题是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);