Wordpress:如何只对特定角色允许某些评论操作(删除、编辑...)?
Wordpress: How to allow some comment-actions (delete, edit...) only to specific roles?
是否可以通过操作、挂钩或任何方式自定义 Wordpress,
- 只有 "administrator" 或 "editor" 角色的用户可以从后端删除、发送垃圾邮件或编辑评论?
- 只有角色 "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' );
}
}
是否可以通过操作、挂钩或任何方式自定义 Wordpress,
- 只有 "administrator" 或 "editor" 角色的用户可以从后端删除、发送垃圾邮件或编辑评论?
- 只有角色 "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' );
}
}