如何阻止具有“EDIT_OTHERS_POSTS”权限的用户编辑管理员帖子

时间:2020-07-30 作者:kanlukasz

我有一些帖子的作者是AdministratorEditor

Editor,我可以编辑Administrator帖子。我想阻止这种情况。

我找到一些关于过滤器的信息,如user_has_capmap_meta_cap 但我不确定这是正确的方向。也许我挖得太深了,附近有一个更简单的解决方案?

1 个回复
最合适的回答,由SO网友:Jacob Peattie 整理而成

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

相关推荐

正在尝试获取wp-includes/capabilities.php中非对象的属性

在调试中,我每分钟都会收到以下通知序列。日志:[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/