2011-03-17 16 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 \ WP-コンテンツ\テーマtwentyten \ \ header.phpのを:12)E:\ xampp \ htdocs \ wpmoodle \ wp-includes \ pluggable.php 690行にあります。

ありがとうございます。

答えて

14

wp_signon()は、実際のページをブラウザに送信する前に実行する必要があります。

これは、wp_signon()が認証クッキーを設定することの一部であるためです。これは、 "Set-Cookie:..."ヘッダーを出力することで行います。 - エラーが発生するpluggable.phpの690行目を見ると、その行がクッキーを設定していることがわかります。

ので、wp_signon()出力ヘッダので、あなたはすでにどのコンテンツを送ったことはできません - ヘッダが常にコンテンツの前に出力されなければならないからです。

しかし、このエラーは、既にという12行目の出力(おそらく、標準のWordPressテーマの最初のHTMLの一部)を送信したことを示しています。

これは基本的には、WordPress処理の前のどこかにあなたのwp_signon()コールを移動する必要があることを示しているため、ページコンテンツが送信される前にヘッダーを出力する機会があります。

+0

あなたの答えは私の問題を解決しました。私はあなたが私に与えたこのプロセスを知らなかった、それは私に知っていた。ありがとうございます.- –

+0

こんにちは。同じエラーが発生しています。その機能はいつ実行する必要がありますか?私はショートコードを生成するプラグインの中で 'wp_signon'を実行しています。ありがとう – DamianFox

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'); 
関連する問題