2011-03-17 13 views
5

Sto utilizzando la funzione wp_signon() per accedere all'utente. Sto facendo questo comewordpress Funzione wp_signon non funzionante

$creds = array();

$creds['user_login'] = $username;

$creds['user_password'] = $password;

$creds['remember'] = true;

$user = wp_signon($creds, false);

voglio inviare all'utente alla home page dopo il login.

ma sto affrontando seguente errore:

Attenzione: Non è possibile modificare le informazioni di intestazione - headers already sent by (output iniziato in E: \ xampp \ htdocs \ wpmoodle \ wp-content \ Themes \ TwentyTen \ header.php : 12) in E: \ xampp \ htdocs \ wpmoodle \ wp-includes \ pluggable.php sulla riga 690.

Grazie in anticipo.

risposta

14

wp_signon() deve essere eseguito prima di aver inviato una qualsiasi pagina effettiva al browser.

Questo perché parte di ciò che fa wp_signon() è impostare i cookie di autenticazione. Lo fa emettendo un'intestazione "Set-Cookie: ..." - se guardi la riga 690 di pluggable.php, da dove proviene il tuo errore, vedrai che quella linea imposta un cookie.

così, perché wp_signon() uscite intestazioni, non si può già hanno inviato alcun contenuti - perché le intestazioni devono sempre essere emessi prima del contenuto.

Tuttavia, l'errore indica che hai già inviato alcuni output - nella riga 12 di header.php, presumibilmente alcuni dei primi HTML del tema WordPress standard.

Questo in pratica indica che è necessario spostare la chiamata wp_signon() in qualche punto prima nell'elaborazione di WordPress, quindi ha la possibilità di stampare le intestazioni prima che venga inviato qualsiasi contenuto di pagina.

+0

tua risposta ha risolto il mio problema. Non ero a conoscenza di questo processo che mi hai dato, era a conoscenza per me. Grazie mille.- :) –

+0

Ciao. Sto ottenendo lo stesso errore. Quando dovrei eseguire quella funzione? Sto eseguendo 'wp_signon' all'interno di un plugin (che genera uno shortcode). Grazie – DamianFox

0

Se qualcuno ha bisogno, ecco la mia soluzione:

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'); 
Problemi correlati