2011-03-17 16 views
5

estoy usando wp_signon función() para iniciar la sesión del usuario. Estoy haciendo esto comofunción wp_signon wordpress no trabajar

$creds = array();

$creds['user_login'] = $username;

$creds['user_password'] = $password;

$creds['remember'] = true;

$user = wp_signon($creds, false);

quiero enviar el usuario a la página principal después de inicio de sesión.

Pero estoy frente error siguiente:

Advertencia: No se puede modificar la información de cabecera - cabeceras ya enviado por (la producción empezó en E: \ xampp \ htdocs \ wpmoodle \ wp-content \ themes \ TwentyTen \ header.php : 12) en E: \ xampp \ htdocs \ wpmoodle \ wp-includes \ pluggable.php en la línea 690.

Gracias de antemano.

Respuesta

14

wp_signon() tiene que correr antes de que haya enviado cualquiera de su página real al navegador.

Esto se debe a que parte de lo que hace es wp_signon() para establecer las cookies de autenticación. Para ello, se emite el "Set-Cookie: ..." de cabecera - si nos fijamos en la línea 690 de pluggable.php, donde entra en juego el error de, usted verá que esa línea establece una cookie.

así, porque wp_signon() salidas cabeceras, no se puede ya han enviado ningún contenido - porque los encabezados deben ser siempre de salida antes de contenido.

Sin embargo, el error indica que ya ha enviado alguna salida, en la línea 12 de header.php, presumiblemente parte del primer HTML del tema estándar de WordPress.

Esto básicamente indica que debe mover su llamada wp_signon() a un lugar anterior en el procesamiento de WordPress, por lo que tiene la posibilidad de generar sus encabezados antes de que se envíe el contenido de la página.

+0

Su respuesta ha resuelto mi problema. Yo no estaba al tanto de este proceso que me diste, fue muy útil para mí. Gracias usted much.- :) –

+0

Hola. Estoy obteniendo el mismo error. ¿Cuándo debería ejecutar esa función? Estoy ejecutando 'wp_signon' dentro de un complemento (que genera un código corto). Gracias – DamianFox

0

Si alguien lo necesita, aquí está mi solución:

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