Wordpress:如何只对特定角色允许某些评论操作(删除、编辑...)?

Wordpress: How to allow some comment-actions (delete, edit...) only to specific roles?

是否可以通过操作、挂钩或任何方式自定义 Wordpress,

  1. 只有 "administrator" 或 "editor" 角色的用户可以从后端删除、发送垃圾邮件或编辑评论?
  2. 只有角色 "administrator" 或 "editor" 的用户可以将新评论生成的邮件中的评论丢弃、发送垃圾邮件或编辑评论?

我在 codex.wordpress.org 上没有找到任何东西,也没有找到合适的插件。 :-/

谢谢!

我建议为此使用 User Role Editor 之类的插件,但是嘿 - 这是一个有效的代码示例:):

在 class WP_Role 中你会发现一个名为 'edit_comment' 的 属性 映射到 'edit_posts' 因此是' 作为单独的功能处理。但是,我们可以通过对选定的用户角色应用过滤器来修改行为,我们希望使用 map_meta_cap 函数限制编辑评论。

示例: 只有用户 "administrator" 或 "editor" 可以从后端删除、发送垃圾邮件或编辑评论:

<?php
// Restrict editing capability of comments using `map_meta_cap`
function restrict_comment_editing( $caps, $cap, $user_id, $args ) {
 if ( 'edit_comment' == $cap ) {
      // Allowed roles 
      $allowed_roles = ['editor', 'administrator'];

      // Checks for multiple users roles
      $user = wp_get_current_user();
      $is_allowed = array_diff($allowed_roles, (array)$user->roles);

      // Remove editing capabilities on the back-end if the role isn't allowed
      if(count($allowed_roles) == count($is_allowed))
        $caps[] = 'moderate_comments';
      }
  }

  return $caps;
}

add_filter( 'map_meta_cap', 'restrict_comment_editing', 10, 4 );

// Hide comment editing options on the back-end*
add_action('init', function() {
  // Allowed roles
  $allowed_roles = ['editor', 'administrator'];

  // Checks for multiple users roles
  $user = wp_get_current_user();
  $is_allowed = array_diff($allowed_roles, (array)$user->roles);

  if(count($allowed_roles) == count($is_allowed)) {
    add_filter('bulk_actions-edit-comments', 'remove_bulk_comments_actions');
    add_filter('comment_row_actions', 'remove_comment_row_actions');
  }
});

function remove_bulk_comments_actions($actions) {
  unset($actions['unapprove']);
  unset($actions['approve']);
  unset($actions['spam']);
  unset($actions['trash']);

  return $actions;
}

function remove_comment_row_actions($actions) {
  unset($actions['approve']);
  unset($actions['unapprove']);
  unset($actions['quickedit']);
  unset($actions['edit']);
  unset($actions['spam']);
  unset($actions['trash']);

  return $actions;
}
?>

代码进入您的 functions.php 文件

感谢@Kradyy,我来到了 map_meta_cap and remove_cap

functions.php 中,链接在仪表板的评论部分以及发送给作者的电子邮件中被删除(除了管理员和编辑):

global $wp_roles;
$allowed_roles = ['editor', 'administrator'];
foreach (array_keys($wp_roles->roles) as $role){
    if (!in_array($role, $allowed_roles)) {
        $wp_roles->remove_cap( $role, 'moderate_comments' );
    }
}