2017-07-24 123 views
0

我有一个自定义页面模板,只有某些用户角色可以访问。如果访问者没有登录或者没有被授予角色,他会被重定向到登录页面。WordPress的不识别登录的用户

问题是,如果用户在登录之前尝试访问此页面,他无论如何都会被重定向(登录后) - 只有在清除浏览器数据和重新记录后才能解决问题。如果用户先登录然后尝试访问该页面,则不会发生这种情况。

function ts_restrict_user_access() { 

    if (is_page_template('templates/ts-sample.php')) { 

     $redirect = true; 

     if (is_user_logged_in()) { 

      $user = wp_get_current_user(); 

      if (in_array('worker', (array) $user->roles) || in_array('administrator', (array) $user->roles)) { 
       $redirect = false; 
      } 
     } 

     if ($redirect) { 
      wp_redirect(esc_url(home_url('/login')), 301); 
     } 

    } 
} 
+0

您是否使用某种缓存插件来缓存响应?另外我不认为你需要$ redirect变量和逻辑来处理它。 – Peter

+0

谢谢。除了我正在构建的内容外,我没有任何活动插件,但是,我使用此片段从插件中进行模板化:http://www.wpexplorer.com/wordpress-page-templates-plugin/ – synergy

回答

0

如果您使用任何缓存插件,请将其禁用并重试您的代码。

我简化了一下你的代码,请看下面。

function ts_restrict_user_access() { 
    if (is_page_template('templates/ts-sample.php') && is_user_logged_in()) { 
     $user = wp_get_current_user(); 
     $allowed_roles = array('worker', 'administrator'); 
     if (!array_intersect($allowed_roles, $user->roles) { 
      wp_redirect(esc_url(home_url('/login')), 301); 
     } 
    } 
} 
+0

谢谢。除了我正在构建的内容外,我没有任何活动插件,但是,我使用此片段从插件中进行模板化:http://www.wpexplorer.com/wordpress-page-templates-plugin/ – synergy

+0

愚蠢的错误花费了我很多时间 - .-改变重定向到302后,它工作得很好。 – synergy