如何限制订阅者在后台编辑其他帖子但阅读特定帖子

时间:2020-07-23 作者:Juliana Jul

我需要允许订阅者编辑他们的帖子(完成)和阅读(见后端)特定作者或具有特定ID的帖子(复制)。我找到了代码,但这还不够:

function posts_for_current_author ($query) {
        if( $query->is_admin && \'edit.php\' == $GLOBALS[\'pagenow\'] && !current_user_can( \'edit_others_posts\' ) ) {
            $query->set(\'author\', $GLOBALS[\'user_ID\'] );
        }
        return $query;
    };
    add_filter(\'pre_get_posts\', \'posts_for_current_author\');

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

要查询具有多个作者ID的帖子,可以使用author__in 参数这将使选定作者的帖子对当前用户可见(只读)。

add_filter(\'pre_get_posts\', \'posts_for_current_author\');
function posts_for_current_author($query) {
    if (
        $query->is_admin &&
        \'edit.php\' === $GLOBALS[\'pagenow\'] &&
        ! current_user_can( \'edit_others_posts\' )
    ) {
        $query->set(\'author__in\', array(get_current_user_id(), 1, 2, 3) ); // add 1 or more user IDs
    }
    return $query;
};
查询具有多个作者ID和帖子ID的帖子的一个选项是操作where 带有的子句posts_where 滤器我从一个old WPSE Q&A. 这将使选定作者的帖子和选定帖子对当前用户可见(只读)。

有了这个你就可以OR 比较而不是AND, 使用两者author__inpost__in 在里面pre_get_posts 会导致(至少基于我在本地运行的测试)

add_filter( \'posts_where\', \'wpse_posts_where\' );
function wpse_posts_where( $where ) {
    if (
        is_admin() &&
        \'edit.php\' === $GLOBALS[\'pagenow\'] &&
        ! current_user_can( \'edit_others_posts\' )
    ) {
        remove_filter( current_filter(), __FUNCTION__ );
        global $wpdb;

        $current_user_id = get_current_user_id();
        $authors = array(
            $current_user_id,
            1,
            2,
            3,
        );

        $posts = array(
            1,
            2,
            3,
        );

        return str_ireplace(
            "{$wpdb->posts}.post_author in ({$current_user_id})",
            sprintf(
                "({$wpdb->posts}.post_author in (%s) OR {$wpdb->posts}.ID in (%s))",
                implode(\',\', $authors),
                implode(\',\', $posts)
            ),
            $where
        );
    } else {
        return $where;
    }
}

相关推荐

正在尝试获取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/