2011-08-10 21 views
1

我正在構建一個Wordpress網站,用戶需要先登錄才能訪問博客本身。現在,我用這個:讓WordPress的博客完全私人註銷訪客?

add_action('wp_head','foofunc'); 
function foofunc() { 
    if(!is_user_logged_in()) die(); 
} 

然而,這種方式我不能將用戶重定向到另一個網址,如輸出已經啓動。有沒有辦法將未登錄的用戶重定向到一個url?

我會用戶init,但也重定向wp-admin用戶。

馬爾蒂·萊恩

回答

5

使用帶有is_admin的「初始化」處理一起()來檢查,如果用戶已經在管理面板與否:

add_action('init','foofunc'); 
function foofunc() { 
    $isLoginPage = strpos($_SERVER['REQUEST_URI'], "wp-login.php") !== false; 
    if(!is_user_logged_in() && !is_admin() && !$isLoginPage) { 
     header('Location: http://yourdomain.com/login') ; 
     die(); 
    } 
} 
+0

我讓它成爲一個插件,所以它需要通過'add_action'完成。 –

+0

因此'add_action(「init」,「foofunc」)'是解決方案。如果它導致wp-admin出現問題,只需使用is_admin()來檢測用戶是否已經在管理面板中。我將用新代碼更新我的答案。 –

+0

'is_admin'就是我正在尋找的東西!謝謝。 –

1
  1. 您可以使用s2member插件。它創建了4個用戶級別,第一級爲免費用戶。當您創建頁面時,您可以爲該頁面選擇一個S2Member用戶級別要求。
  2. http://www.rlmseo.com/blog/require-login-for-wordpress-pages/創建一個遵循該鏈接格式的頁面密碼保護模板。將模板應用於您想要密碼保護的頁面。
  3. 您可以編寫一個函數,檢查用戶是否使用* is_user_logged_in()*,* is_admin()*和* is_page()*在頁面上登錄,然後重定向。使該功能成爲一項行動。然後將該動作掛接到init。 (如果init是正確的鉤子,我有點模糊,但是如果有任何輸出已經發送到屏幕,則不會發生重定向)
0

最清潔的實現:

if((!is_user_logged_in()) && ($GLOBALS['pagenow'] !== 'wp-login.php') ) { 
    wp_redirect('http://anothersite.com'); 
} 

可以放在這在functions.php的