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
);