如何使WP页面仅对特定用户角色可访问

时间:2020-11-12 作者:George Eye

我正在创建一个网站,其中包括;主页“;(public)具有指向WP登录页面的登录链接,则将有不同的页面,这些页面仅可供特定登录成员访问,具体取决于其用户角色。例如,主页(公共)、第1页(角色x)、第2页和;3和;4(角色Y),第5页和;6(角色3)。是否有方法/插件将不同的WP页面与特定的用户角色相匹配?另外,我知道一些基本的编码,所以如果这是解决这个问题的唯一方法,我可以使用PHP代码段(在您的帮助下)。

向你问好,Geo

1 个回复
SO网友:Nilesh Chouhan

不知道是否有此插件,您应该通过搜索尝试"restrict page by user roles" 在里面WordPress directory.但如果您可以编写代码,并且知道一些条件标记以及如何使用它们,那么我认为您应该尝试以下代码片段,它将对您有用。

But Beware, 这将重定向到未在$allowed\\u pages数组中输入的所有其他页面的主页。因此,只需根据您的要求添加更多if条件。

add_action( \'template_redirect\', \'neo_restrict_pages_as_per_user_roles\' );
function neo_restrict_pages_as_per_user_roles(){
    if( is_user_logged_in() && !current_user_can(\'administrator\') && (!is_home() || !is_front_page() ) ){
        $user_meta = wp_get_current_user();
        $user_roles=$user_meta->roles;

        $allowed_pages = array(
                                \'subscriber\' => array(\'2\'),
                                \'author\' => array(\'16\',\'18\')
                            );

        if( array_key_exists($user_roles[0], $allowed_pages) ){
            $allowed_pages_ids = $allowed_pages[$user_roles[0]];
            if( !in_array( get_the_ID(), $allowed_pages_ids ) ){
                wp_redirect( home_url(), 302 );
            }
        }
    }
}
在上面的代码中,您只需在下面的数组中添加页面ID及其角色

$allowed_pages = array(
    \'subscriber\' => array(\'2\'),
    \'author\' => array(\'16\',\'18\')
    // user roles => array(\'page id 1\', \'page id 2\', ...)                       
);
把这个放在你的函数中。php文件的主题,但在此之前不要忘记备份该文件。因此,如果不能按照您的要求工作,您可以将其还原。