wp_signon returnează utilizatorul, dar utilizatorul nu este autentificat
Folosesc wp_signon()
și returnează un utilizator, nu o eroare. Cu toate acestea, când execut is_user_logged_in()
acesta returnează fals.
Orice ajutor ar fi foarte apreciat :)

get_currentuserinfo() nu a funcționat pentru mine. Am scris despre această problemă și soluție pe blogul meu:
http://blog.rhysgoodwin.com/programming/wordpress-wp_signon-current_user-is-not-populated/
Noroc, Rhys

Chiar a ajutat. În caz că blogul dispare, a spus să folosești wp_set_current_user()
după wp_signon()
.

După utilizarea funcției wp_signon()
, informațiile utilizatorului nu sunt setate, iar WP verifică dacă un utilizator este autentificat prin intermediul funcției is_user_logged_in()
. Soluția ar fi să apelați funcția get_currentuserinfo()
imediat după wp_signon()
.

Este posibil să replici utilizatorul care s-a autentificat prin formularul de logare. Aș dori ca utilizatorul să rămână autentificat, ca la o autentificare obișnuită.

Am avut aceeași problemă. Iată fragmentul complet funcțional care a rezolvat 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;
De asemenea, wp_logout()
are aceeași problemă. Iată cum să o faci să funcționeze și ea:
wp_logout();
wp_set_current_user(0);

//funcția wp_signon este încă în construcție, dacă deschideți fișierele nucleare WordPress
//veți găsi acest comentariu
// TODO deprechem acțiunea wp_authentication?
//am găsit o soluție
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);
}
//apoi ar trebui să o apelați astfel
//înainte de get_header() sau orice html
login_after_register($_POST['r_user_name'],$_POST['r_password']);
