-1

是否可以通过动作、钩子或任何东西来自定义 Wordpress

  1. 只有角色“管理员”或“编辑”的用户可以从后端删除、发送垃圾邮件或编辑评论?
  2. 只有“管理员”或“编辑”角色的用户可以删除、垃圾邮件或编辑邮件中的评论,这些评论将由新评论生成?

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

谢谢!

4

2 回答 2

0

我建议为此使用诸如用户角色编辑器之类的插件,但是,嘿-这是一个有效的代码示例:):

在该类中WP_Role,您会找到一个名为“edit_comment”的属性,该属性映射到“edit_posts”,因此不作为单独的功能处理。但是,我们可以通过使用map_meta_cap函数将过滤器应用于我们想要限制编辑评论的选定用户角色来修改行为。

示例: 只有用户“管理员”或“编辑”可以从后端删除、发送垃圾邮件或编辑评论:

<?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文件

于 2019-11-14T12:40:58.687 回答
0

感谢@Kradyy,我找到了map_meta_capremove_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' );
    }
}
于 2019-11-14T15:02:32.230 回答