wp_signon devuelve usuario, pero el usuario no está conectado
Uso wp_signon()
y devuelve un usuario, no un error. Sin embargo, cuando ejecuto is_user_logged_in()
devuelve falso.
Agradecería mucho la ayuda :)

get_currentuserinfo() no funcionó para mí. He escrito sobre este problema y su solución en mi blog:
http://blog.rhysgoodwin.com/programming/wordpress-wp_signon-current_user-is-not-populated/
Saludos, Rhys

Esto realmente ayudó. En caso de que el blog desaparezca, dijo que hay que usar wp_set_current_user()
después de wp_signon()
.

¿Es posible replicar que el usuario haya iniciado sesión a través del formulario de inicio de sesión? Me gustaría que el usuario permanezca conectado, como con un inicio de sesión normal.

Tuve el mismo problema. Aquí el fragmento de código completo que solucionó ese problema:
if( isset($_POST['log']) && isset($_POST['pwd']) ):
$creds = array( 'user_login' => $_POST['log'], 'user_password' => $_POST['pwd'], 'remember' => $_POST['rememberme'] );
$user = wp_signon( $creds, false );
if ( is_wp_error($user) ): echo $user->get_error_message(); endif;
wp_set_current_user($user->ID);
return $user;
endif;
También wp_logout()
tiene el mismo problema. Así es como hacer que funcione también:
wp_logout();
wp_set_current_user(0);

//la función wp_signon está en construcción aún, si abres los archivos núcleo de WordPress
//encontrarás este comentario
// TODO ¿deprecamos la acción wp_authentication?
//encontré una solución
function login_after_register($userlogin,$userpass){
$credentials = array( 'user_login' => $userlogin, 'user_password' => $userpass, 'remember' => true );
$secure_cookie = is_ssl();
$secure_cookie = apply_filters('secure_signon_cookie', $secure_cookie, $credentials);
add_filter('authenticate', 'wp_authenticate_cookie', 30, 3);
$user = wp_authenticate($credentials['user_login'], $credentials['user_password']);
wp_set_auth_cookie($user->ID, $credentials["remember"], $secure_cookie);
do_action('wp_login', $user->user_login, $user);
}
//luego deberías llamarla de esta forma
//antes de get_header() o cualquier html
login_after_register($_POST['r_user_name'],$_POST['r_password']);
