web-dev-qa-db-fra.com

Comment se déconnecter sans confirmation "Voulez-vous vraiment vous déconnecter?"?

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?

11
Derfder

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')
27
ndm

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('&amp;', '&', 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();

Lien de référence

3
Gufran Hasan