2011-03-17 208 views
5

我正在使用wp_signon()函數登錄用戶。我喜歡wordpress wp_signon函數不能正常工作

$creds = array();

$creds['user_login'] = $username;

$creds['user_password'] = $password;

$creds['remember'] = true;

$user = wp_signon($creds, false);

我想在登錄後發送用戶的主頁這樣做。

但我面臨以下錯誤:

警告:不能更改頭信息 - 頭已經發出(輸出開始在E:\ XAMPP \ htdocs中\ wpmoodle \可溼性粉劑內容\ \主題twentyten \的header.php :12)在E:\ xampp \ htdocs \ wpmoodle \ wp-includes \ pluggable.php on line 690.

在此先感謝。

回答

14

wp_signon()在您將任何實際頁面發送到瀏覽器之前需要運行。

這是因爲wp_signon()所做的一部分是設置您的身份驗證Cookie。它通過輸出一個「Set-Cookie:...」標題來實現 - 如果你查看pluggable.php的第690行,你的錯誤來自哪裏,你會看到該行設置了一個cookie。

如此,因爲wp_signon()輸出,你已經不能已將任何內容 - 因爲頭必須始終輸出內容之前。

但是,錯誤表明您已經發送了一些輸出 - 在header.php的第12行,大概是標準WordPress主題的第一個HTML的一部分。

這基本上表示您需要將您的wp_signon()調用移動到早些時候在WordPress處理中的某個位置,以便在發送任何頁面內容之前有機會輸出其標頭。

+0

你的回答已經解決了我的問題。我不知道你給了我這個過程,它對我來說是知識淵博的。非常感謝你.- :) – 2011-03-17 12:44:50

+0

嗨。我收到了同樣的錯誤。我應該什麼時候運行該功能?我在一個插件裏面執行'wp_signon'(生成一個簡碼)。謝謝 – DamianFox 2018-02-22 09:36:26

0

如果有人需要它,這是我的解決方案:

function custom_login() { 
    if (isset($_POST['submit'])) { 
     $login_data = array(); 
     $login_data['user_login'] = sanitize_user($_POST['username']); 
     $login_data['user_password'] = esc_attr($_POST['password']); 

     $user = wp_signon($login_data, false); 

     if (is_wp_error($user)) { 
      echo $user->get_error_message(); 
     } else {  
      wp_clear_auth_cookie(); 
      do_action('wp_login', $user->ID); 
      wp_set_current_user($user->ID); 
      wp_set_auth_cookie($user->ID, true); 
      $redirect_to = $_SERVER['REQUEST_URI']; 
      wp_safe_redirect($redirect_to); 
      exit; 
     } 
    } 
} 

add_action('after_setup_theme', 'custom_login');