is_user_logged_in() non funziona - Risoluzione problemi WordPress
Sto creando un form di login per il mio sito, e ho questa sezione:
<?php
if (is_user_logged_in()) {
echo 'Ciao, ', $user_login, '. <a href="', wp_logout_url(), '" title="Esci">Esci</a>';
} else {
wp_login_form();
}
Dopo il login, la pagina si ricarica senza mostrare alcuna indicazione dell'avvenuto accesso.
Sospetto che is_user_logged_in()
non funzioni, ma non so come debuggare questo problema.
AGGIORNAMENTO: Quando faccio questo:
global $current_user;
var_dump($current_user);
Ottengo sempre:
ect(WP_User)#3 (7) { ["data"]=> NULL ["ID"]=> int(0) ["caps"]=> array(0) { } ["cap_key"]=> NULL ["roles"]=> array(0) { } ["allcaps"]=> array(0) { } ["filter"]=> NULL }
Anche se ho effettuato il login con il form sopra.
Non c'è nulla di sbagliato nella funzione, è il fatto che in realtà non ti stai autenticando!
Dici che stai creando il tuo modulo di login? Questo invia i dati al classico wp-login.php
, oppure gestisci tu la richiesta?
Il percorso/dominio del modulo è diverso da quello di WordPress? Se esamini i tuoi cookie, ce ne sono di impostati?

Sto usando wp_login_form()
Per quanto riguarda il percorso/dominio, non sono proprio sicuro.
Sto usando Chrome, e secondo lo strumento di debug del profilo, suggerisce:
Dominio:localhost Percorso:/ Data:Fri, 10 Aug 2012 11:14:30 GMT Dimensione:70

E per il form, è memorizzato in:
http://localhost/newgameplus/TEST/scripts/php/testWP.php
E l'installazione di WordPress è in:
http://localhost/newgameplus/wordpress/

Penso che sia il problema - WordPress imposterà un cookie con il percorso /newgameplus/wordpress/
, che non verrà letto sotto /newgameplus/TEST/scripts/php/testWP.php
. Prova define( 'COOKIEPATH', '/' );
nel tuo wp-config.php

A proposito, consiglio vivamente di utilizzare virtual host per lo sviluppo: http://wordpress.stackexchange.com/questions/32331/wordpress-local-development-environment

So che è un po' tardi, ma sto aggiungendo la mia risposta per aiutare gli altri. Se utilizzi la funzione wp_signon()
per effettuare il login e successivamente verifichi con is_user_logged_in()
, devi prima impostare l'utente corrente con wp_set_current_user()
perché wp_signon()
non gestisce l'impostazione dell'utente corrente come descritto nel codex di WP:
https://developer.wordpress.org/reference/functions/wp_signon/
Questo è uno dei motivi per cui la funzione is_user_logged_in()
restituisce false quando pensavi di aver già effettuato il login di un utente.
