salut à tous,
J'écris une fonction automatisée qui génère un menu à partir d'une fonction. il appelle wp_nav_menu sur chaque élément d'un tableau, car je veux que ce soit dynamique. le problème est, peu importe la façon dont je l'ai défini, si le menu n'existe pas, wp_nav_menu génère un menu, par exemple le 'default'. voici mon code (les éléments sont juste un ensemble de chaînes):
for($i=0;$i<count($items);$i++) {
$themenu=$items[$i];
$mymenu = wp_nav_menu(array(
'menu' => $themenu,
'menu_class' => 'mymenu',
'container' => 'false',
'fallback_cb' => 'false',
'echo' => false
)
);
echo $themenu;
}
je sais que cela fonctionne partiellement, car si $ themenu existe, il affiche le bon. mais si ce n'est pas le cas, il vous suffira d'afficher un menu! non seulement ennuyeux, mais brise également activement l'expérience utilisateur.
wp_nav_menu()
essaie en effet beaucoup de vous fournir un menu, et fallback_cb
n'est exécuté que lorsque rien d'autre ne fonctionne. À partir du code :
menu
est fourni et fait référence à un menu existant (recherché via wp_get_nav_menu_object()
, qui accepte un identifiant, un slug ou un nom), ce sera le menu.theme_location
est défini sur un emplacement de menu enregistré, il sera transmis à wp_get_nav_menu_object()
fallback_cb
est appelé, qui est par défaut wp_page_menu
, qui est un menu de toutes les pages.Donc, si vous souhaitez uniquement utiliser l'argument menu
, vous devez le tester vous-même en appelant wp_get_nav_menu_object()
. Si cela retourne quelque chose, appelez wp_nav_menu()
.
Essayez d’envelopper votre écho dans une condition has_nav_menu()
:
for($i=0;$i<size($items);$i++) {
$themenu=$items[$i];
$mymenu = wp_nav_menu(array(
'menu' => $themenu,
'menu_class' => 'mymenu',
'container' => 'false',
'fallback_cb' => 'false',
'echo' => false
)
);
if ( has_nav_menu( $themenu ) ) echo $themenu;
}
(Si je suis votre code correctement ...)
À partir de l'entrée Codex pour wp_nav_menu () :
$ fallback_cb (string) (optionnel) Si le menu n'existe pas, utilisez la fonction fallback.Défini sur false pour éviter tout repliement. Par défaut: wp_page_menu
Alors as-tu essayé de passer 'fallback_cb' => false
?
MODIFIER:
Conformément au commentaire ci-dessous, 'fallback_cb' => 'false'
indique à wp_nav_menu()
de se replier sur une fonction appelée false()
et, cette fonction étant inexistante, elle revient à sa fonction normale, wp_page_menu()
. Donc, utilisez 'fallback_cb' => false
(c'est-à-dire un boolean valeur, plutôt qu'un string valeur).