J'essaie d'utiliser wp_nav_menu pour n'afficher qu'un menu s'il en existe un, sinon rien n'a été affiché.
Si je supprime le menu, une liste des pages sera affichée.
Mon fichier functions.php contient:
if (function_exists('register_nav_menus')) {
register_nav_menus (
array('main_nav' => 'Main Navigation Menu'));}
Comment puis-je utiliser wp_nav_menu pour afficher un menu s'il en existe un, sinon rien?
Utilisez has_nav_menu()
et testez theme_location
plutôt que menu_id
:
<?php
if ( has_nav_menu( $theme_location ) ) {
// User has assigned menu to this location;
// output it
wp_nav_menu( array(
'theme_location' => $theme_location,
'menu_class' => 'nav',
'container' => ''
) );
}
?>
Vous pouvez générer du contenu alternatif en ajoutant une clause else
.
EDIT
Vous devez remplacer $theme_location
par votre réeltheme_location
:
<?php
if ( has_nav_menu( 'main_nav' ) ) {
// User has assigned menu to this location;
// output it
wp_nav_menu( array(
'theme_location' => 'main_nav',
'menu_class' => 'nav',
'container' => ''
) );
}
?>
Vous pouvez simplement spécifier false comme argument fallback_cb
de wp_nav_menu
. Rien ne s'affichera - wp_nav_menu retournera plutôt faux (sans rien de nouveau).
<?php
wp_nav_menu(array(
'theme_location' => $main_nav,
'menu_class' => 'nav',
'container' => '',
'fallback_cb' => false
));
Vous pouvez simplement enregistrer le menu d'abord sans spécifier l'emplacement.
Dans functions.php
:
add_action( 'init', 'register_my_menus' );
function register_my_menus() {
register_nav_menus(
array(
'header' => __( 'Header Menu' )
)
);
}
Et lorsque vous appelez le menu dans header.php
, vérifiez avec has_nav_menu()
:
if ( has_nav_menu( 'header' ) ) {
wp_nav_menu( array( 'theme_location' => 'header' ) );
}
Lis ça:
http://codex.wordpress.org/Function_Reference/wp_nav_menu
set 'fallback_cb' => false et aucun ne sera affiché, c'est la méthode standard suggérée par wp les gars.