Je peux obtenir que wp_logout
fonctionne, mais non sans générer de nombreux avertissements ('Avertissement de PHP: impossible de modifier les informations d'en-tête - en-têtes déjà envoyés').
wp_logout
appelle wp_clear_auth_cookie
, qui appelle setcookie
, et les cookies doivent être associés aux en-têtes HTTP. J'appelle wp_logout
à l'intérieur de la page (dans l'en-tête ou le pied de page), d'où le problème.
Alors, comment je veux exactement déconnecter un utilisateur par programme? Je pourrais le faire en réponse à une demande ajax, mais cela semble aller au-delà. Merci.
EDIT
Code actuel comme suit:
add_action('wp_footer', 'fp_onload_php2');
function fp_onload_php2() {
$slug = basename(get_permalink());
if($slug != 'club-login')
return;
$jsmsg = '';
$loggedin = false;
if(is_user_logged_in()) {
$current_user = wp_get_current_user();
$loggedin = $current_user->has_cap('customer');
}
if($loggedin && isset($_GET['logout'])) {
wp_logout();
$jsmsg = 'You have been logged out.';
$loggedin = false;
} else if(!$loggedin && isset($_GET['logout']))
$jsmsg = "You are not logged in.";
if(!$loggedin)
echo
"<script type='text/javascript'> fp_onload_js2(0, '" . $jsmsg .
"'); </script>\n";
else
echo
"<script type='text/javascript'> fp_onload_js2(1, '" . $jsmsg .
"'); </script>\n";
} // fp_onload_php2()
Si vous utilisez wp_logout
dans votre propre code, il vaut probablement mieux utiliser exit
ou wp_redirect
immédiatement après.
Vous pouvez appeler wp_set_current_user(0)
après wp_logout()
pour déconnecter manuellement l'utilisateur instantanément, si vous devez continuer à exécuter PHP mais ne souhaitez pas que l'utilisateur soit connecté.
Ce n'est pas génial, mais semble fonctionner. Ce n'est pas aussi simple que d'appeler wp_logout
avant d'envoyer du contenu, car l'utilisateur peut ne pas être déconnecté avant le chargement du reste de la page (je ne le comprends pas). Dans mon cas, le contenu de la page dépend du fait que l'utilisateur soit effectivement connecté ou non (les menus changent et un code JS est appelé pour afficher le contenu différemment).
pour ce code, une demande de déconnexion redirige vers la page de connexion, avec un paramètre GET de logout=1
. Ceci est testé sur la page de connexion, qui appelle ensuite wp_logout
et redirige vers la page de connexion avec un paramètre GET de logout=0
, pour forcer une actualisation.
add_action('init', 'check_logout');
function check_logout() {
if(!isset($_GET['logout']) || ($_GET['logout'] != '1'))
return;
// get_permalink() and $post are not available here, so:
$path = parse_url($_SERVER["REQUEST_URI"], PHP_URL_PATH);
if($path != "/login/")
return;
if(is_user_logged_in()) {
wp_logout();
header("Location: http://fubar.com/login/?logout=0");
exit();
}
} // check_logout()