是否允许用户或角色查看草稿和预览,但不允许其他管理员权限?

时间:2021-09-30 作者:Michael

如何允许特定用户或特定角色查看草稿和预览,但不允许他们编辑帖子或具有任何其他管理功能?我可以为角色添加自定义功能,但不知道允许他们查看草稿和预览的逻辑。有什么想法吗?

2 个回复
SO网友:Michael

找到了一个更简单的方法。我给了他们edit_other_postsedit_other_pages 角色功能,然后使用以下内容阻止他们访问管理区域:

add_action( \'init\', \'eri_block_nonadmins_init\' );
function eri_block_nonadmins_init() {
    $current_url = eri_get_current_url( true, false);
    if ( (!current_user_can( \'administrator\' ) && !( defined( \'DOING_AJAX\' ) && DOING_AJAX )) 
        && (is_admin() || $current_url == \'/cornerstone/\') ) {
        wp_redirect( home_url() );
        exit;
    }
}
当然,我也阻止了他们访问我们的基石前端编辑器。

如果你对eri_get_current_url() 函数执行以下操作:

function eri_get_current_url( $params = true, $domain = true ){
    if ($domain) {
        $protocol = isset($_SERVER[\'HTTPS\']) && $_SERVER[\'HTTPS\'] !== \'off\' ? \'https\' : \'http\';
        $domain = $protocol."://$_SERVER[HTTP_HOST]";
    } else {
        $domain = \'\';
    }

    $full_url = $domain.$_SERVER[\'REQUEST_URI\'];

    if (!$params) {
        return strtok($full_url, \'?\');
    } else {
        return $full_url;
    }
}

SO网友:vancoder

允许正常排除的角色访问预览的一种方法是利用posts_results 挂钩,与is_preview 条件下面是contributor 角色

   function contributor_preview_access( $posts ) {
    
        if (
            is_preview()
            && ! empty( $posts )
            && in_array( \'contributor\', wp_get_current_user()->roles, true )
        ) {
            $posts[0]->post_status = \'publish\';
        }
    
        return $posts;
    }
    
    add_filter( \'posts_results\', \'contributor_preview_access\', 10, 2 );