2017-07-24 140 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