WordPress : Arguments ignorés/balisage modifié dans wp_nav_menu si aucun menu n’est sélectionné
J’ai créé un menu en utilisant wp_nav_menu dans mon thème en utilisant la configuration la plus simple possible :
wp_nav_menu( array( 'theme_location' => 'my_theme_top_menu') );
Et dans mon functions.php :
register_nav_menus(
array('my_theme_top_menu' => 'Top Menu' )
);
Cependant, je rencontre un comportement étrange lorsque l’utilisateur crée un menu dans wp-admin et l’attribue à ce menu. Lorsque vous sélectionnez le thème pour la première fois, il s’agit par défaut du menu par défaut construit à partir des pages, le balisage ressemble à ceci :
<div class="menu">
<ul>
<li class="page_item page-item-51">
<a href="http://www.mdunham.co.uk/bligs/">About Us</a>
Mais, si un utilisateur sélectionne l’un de ses menus prédéfinis, le balisage qui construit le menu change complètement :
<div class="menu-main-menu-container">
<ul id="menu-main-menu" class="menu">
<li id="menu-item-102" class="menu-item menu-item-type-post_type menu-item-object-page current-menu-item page_item page-item-29 current_page_item menu-item-102">
<a href="http://www.site.co.uk/">Home</a></li>
Pourquoi cela arrive-t-il? C’est comme lorsque vous utilisez un menu WP défini, le menu WP est défini par défaut (ou les paramètres que j’ai définis), mais lorsqu’il n’y a pas de menu défini et qu’il retombe, il utilise un ensemble d’options différent et bâtard que je n’ai défini nulle part moi-même .
Solution n°1 trouvée
Voici l’utilisation par défaut dewp_nav_menu()
:
<?php
$defaults = array(
'theme_location' => ,
'menu' => ,
'container' => 'div',
'container_class' => 'menu-{menu slug}-container',
'container_id' => ,
'menu_class' => 'menu',
'menu_id' => ,
'echo' => true,
'fallback_cb' => 'wp_page_menu',
'before' => ,
'after' => ,
'link_before' => ,
'link_after' => ,
'items_wrap' => '<ul id="%1$s" class="%2$s">%3$s</ul>',
'depth' => 0,
'walker' =>
);
?>
Notez que la solution de repli par défaut pour wp_nav_menu()
est wp_page_menu(), pour laquelle les valeurs par défaut sont :
<?php
$args = array(
'sort_column' => 'menu_order, post_title',
'menu_class' => 'menu',
'include' => '',
'exclude' => '',
'echo' => true,
'show_home' => false,
'link_before' => '',
'link_after' => ''
);
?>
Ceux-ci devraient produire principalement le même résultat, avec le même ensemble de pages. Cependant, si vous avez besoin d’un contrôle plus spécifique, vous avez plusieurs options :
-
Attribuez un rappel personnalisé ici :
‘fallback_cb’ => ‘mytheme_wp_nav_menu_cb’
…et ensuite, définissez :
function mytheme_wp_nav_menu_cb() { // Output whatever menu you want here }
…pour que vous annuliez
wp_page_menu()
-
Enveloppez votre
wp_nav_menu()
appel dans unhas_nav_menu()
conditionnel :if ( has_nav_menu( 'my_theme_top_menu' ) ) { // User has applied a custom menu // to the my_theme_top_menu location; // output it wp_nav_menu( array( 'theme_location' => 'my_theme_top_menu') ); } else { // User has NOT applied a custom menu; // Do something else }
… dans la
else
déclaration, vous pouvez faire n’importe quoi.
0 commentaire