web-dev-qa-db-fra.com

Comment utiliser la fonction de déconnexion sur un lien de menu personnalisé?

Tout

J'utilise le menu personnalisé de wordpress et il y a un menu comme Déconnexion. Je connais la fonction de déconnexion de wordpress <?php echo wp_logout_url(); ?>

Mais comment puis-je l'utiliser dans un menu personnalisé?

4
Ajay Patel

Vous ne savez pas comment et où créer un bouton personnalisé, mais vous pouvez ajouter un tel lien par filtre: Ajoutez une fonction de filtre à 'wp_nav_menu_objects' et insérez le lien là où vous en avez besoin.

Voici un exemple de base:

add_filter( 'wp_nav_menu_objects', 'wpse_46547_add_log_out_link', 10, 2 );

function wpse_46547_add_log_out_link( $sorted_menu_items, $args )
{
    $link = array (
        'title'            => 'Log out',
        'menu_item_parent' => 0,
        'ID'               => '',
        'db_id'            => '',
        'url'              => wp_logout_url()
    );

    $sorted_menu_items[] = (object) $link;

    return $sorted_menu_items;
}

Vous devriez modifiez le code:

  • Vérifiez si vous êtes sur le bon menu. Par exemple, il faut une classe has_log_out_link pour le paramètre menu_class sur wp_nav_menu et tester $args->menu_class.
  • I18n pour le titre du menu. ;)
  • Définissez menu_item_parent sur un ID d'article autre que 0 si vous avez besoin du lien dans un sous-menu.
  • Il y a plus de paramètres pour le lien, voir mon autre réponse pour les inspecter.
6
fuxia

Au cas où quelqu'un d'autre aurait des difficultés avec cela, le moyen le plus simple que j'ai trouvé était simplement d'ajouter l'élément de menu Déconnexion exactement où vous le souhaitez, à l'aide de l'option de lien personnalisé. Faites de l’URL quelque chose d’unique, comme logouturl, et ajoutez simplement ce code à votre fichier functions.php ou à l’endroit où vous préférez ajouter du code personnalisé.

add_filter( 'wp_nav_menu_items', 'wp123e_loginout_menu_link', 10, 2 );

function wp123e_loginout_menu_link( $items, $args ) {
   if ($args->theme_location == 'primary') {
      if (is_user_logged_in()) {
         $items = str_replace('logouturl', wp_logout_url(), $items);
      }
   }
   return $items;
}

N'oubliez pas de remplacer ce premier paramètre de str_replace par la chaîne utilisée dans le lien personnalisé des paramètres du menu. Vous devrez peut-être également changer l’emplacement_thème de l’emplacement principal à l’emplacement approprié.

0
hugmin42