我有一些帖子的作者是Administrator
Editor
以Editor
,我可以编辑Administrator
帖子。我想阻止这种情况。
我找到一些关于过滤器的信息,如user_has_cap
和map_meta_cap
但我不确定这是正确的方向。也许我挖得太深了,附近有一个更简单的解决方案?
我有一些帖子的作者是Administrator
Editor
以Editor
,我可以编辑Administrator
帖子。我想阻止这种情况。
我找到一些关于过滤器的信息,如user_has_cap
和map_meta_cap
但我不确定这是正确的方向。也许我挖得太深了,附近有一个更简单的解决方案?
map_meta_cap
是要使用的正确过滤器。
当WordPress检查您是否有权限编辑帖子时,它会检查edit_post
. 如果您是该帖子的作者,则该帖子将映射到edit_posts
功能,但如果不是,则映射到edit_others_posts
. 您可以使用此筛选器添加附加条件,即即使管理员有编辑也不能编辑帖子edit_others_posts
.
在本例中,当WordPress检查edit_post
, 如果帖子作者是管理员,则当前用户也需要是管理员才能编辑帖子:
add_filter(
\'map_meta_cap\',
function( $required_caps, $cap, $user_id, $args ) {
if ( \'edit_post\' === $cap) {
$post = get_post( $args[0] );
if ( $post && user_can( $post->post_author, \'administrator\' ) ) {
$required_caps[] = \'administrator\';
}
}
return $required_caps;
},
10,
4
);
在调试中,我每分钟都会收到以下通知序列。日志:[23-Oct-2012 13:27:33 UTC] PHP Notice: Trying to get property of non-object in mysite/wp-includes/capabilities.php on line 1022 [23-Oct-2012 13:27:33 UTC] PHP Notice: Trying to get property of non-object in mysite/wp-includes/