En ce moment quand je me déconnecte via:
<a href="<?php bloginfo('url'); ?>/wp-login.php?action=logout">Log out</a>
il me redirige vers la page où je dois confirmer la déconnexion.
Comment éliminer la confirmation et rediriger vers la page d'accueil après la déconnexion?
Cela se produit car il manque le nonce nécessaire dans l'URL, qui est en cours de vérification dans wp-login.php
case 'logout' :
check_admin_referer('log-out');
...
Utilisez wp_logout_url
afin de récupérer l'URL, y compris le nonce. Si vous souhaitez rediriger vers une URL personnalisée, transmettez-la simplement en tant qu'argument.
<a href="<?php echo wp_logout_url('/redirect/url/goes/here') ?>">Log out</a>
Vous pouvez également utiliser wp_loginout
qui génère le lien pour vous, y compris la traduction:
echo wp_loginout('/redirect/url/goes/here')
Si vous ne pouvez pas utiliser la fonction wp_logout_url()
, vous pouvez désactiver cette validation à l'aide du code suivant:
add_action('check_admin_referer', 'logout_without_confirm', 10, 2);
function logout_without_confirm($action, $result)
{
/**
* Allow logout without confirmation
*/
if ($action == "log-out" && !isset($_GET['_wpnonce'])) {
$redirect_to = isset($_REQUEST['redirect_to']) ? $_REQUEST['redirect_to'] : 'url-you-want-to-redirect';
$location = str_replace('&', '&', wp_logout_url($redirect_to));
header("Location: $location");
die;
}
}
Remplacez 'url-you-want-to-redirect'
par l'URL que vous souhaitez rediriger après la déconnexion.
Ajoutez-le dans votre functions.php
Si vous créez un lien personnalisé dans votre menu, définissez l'étiquette sur “Logout”
et définissez l'URL sur http://yourdomain.com/wp-login.php?action=logout
. Ajoutez ensuite cette fonction à votre fichier functions.php
:
function change_menu($items){
foreach($items as $item){
if( $item->title == "Logout"){
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' );
}
}
return $items;
}
add_filter('wp_nav_menu_objects', 'change_menu');
Si vous souhaitez rediriger vers la page de connexion après la déconnexion, vous devez ajouter l'URL de connexion comme suit:
$item->url = $item->url . "&_wpnonce=" . wp_create_nonce( 'log-out' ).'&redirect_to='.wp_login_url();