J'ai essayé plusieurs options comme configurer 'container' => false
et enregistrer le theme_location et effectuer une recherche sur les forums, mais je ne parviens pas à supprimer le "div" qui apparaît avec le wp_nav_menu dans ma page:
<?php get_nav_menu();?>
function get_nav_menu() {
$navMenuDefaults = array(
'theme_location' => 'header-nav',
'menu' => '',
'container' => false,
'container_class' => '',
'container_id' => '',
'menu_class' => '',
'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' => ''
);
return wp_nav_menu($navMenuDefaults);
}
et dans functions.php:
function register_top_nav() {
register_nav_menu('header-nav',__( 'Header Nav' ));
}
add_action( 'init', 'register_top_nav' );
Je ne sais pas pourquoi j'obtiens la sortie suivante:
<div class="">
<ul>
<li class="page_item page-item-2">
<a href="url">Sample Page</a>
</li>
</ul>
</div>
Comment puis-je obtenir quelque chose comme suit:
<ul class="abc">
<li>
<a href="#">dfdf</a>
</li>
</ul>
merci.
FYI: container => ''
est une opération sur une chaîne. Elle est définie par défaut par div
. Vous ne pouvez pas utiliser true or false like bool expression
.
Il suffit de changer le container => 'ul'
et j'espère que vous obtiendrez ce que vous voulez voir. pour plus de détails, veuillez lire ceci: https://developer.wordpress.org/reference/functions/wp_nav_menu/
Merci Musa
Vous n'avez pas créé un menu sur le panneau Appearance > Menus
dans le tableau de bord d'administrateur WordPress .
Mon raisonnement est basé sur un bogue qui survient dans les conditions suivantes:
wp_nav_menu()
a été appelé avec l'argument par défaut 'fallback_cb'
'wp_page_menu'
wp_nav_menu()
a été appelé avec un argument 'container'
destiné à éliminer le conteneur (tout ce qui la fonction empty()
retourne true
pour)L’un des éléments suivants doit supprimer le conteneur <div>
.
Appearance > Menus
. Le <div>
superflu devrait disparaître même si vous n'associez pas le nouveau menu à l'emplacement de votre thème enregistré 'header-nav'
.Remplacez l’argument 'fallback_cb'
par une fonction personnalisée qui renvoie une balise par défaut, voire une chaîne vide, c.-à-d.
'fallback_cb' => function() { return ''; },
Si la fonction wp_nav_menu()
ne parvient pas à localiser le menu indiqué, elle tente ensuite deux opérations supplémentaires pour générer un balisage de menu:
'fallback_cb'
(par défaut, wp_page_menu()
).Votre commentaire posté correspond à un post-type page
avec un ID post de 2
et le titre "Exemple de page", indiquant éventuellement une nouvelle installation WordPress, pour laquelle il serait raisonnable de supposer qu'aucun menu n'a été créé. Cela indique que votre appel wp_nav_menu()
est susceptible de retomber sur wp_page_menu()
, car la fonction de secours créera un menu impromptu à partir d’un nombre quelconque de pages de votre installation.
Lorsque la fonction 'fallback_cb'
est appelée, elle reçoit les mêmes arguments que ceux donnés à wp_nav_menu()
(fusionnés avec les arguments par défaut). Ici, la documentation du Codex sur la fonction wp_page_menu()
est un peu dépassée, car depuis WordPress 4.4.0, la fonction accepte et gère un argument 'container'
. Donc, wp_page_menu()
est appelé avec le même argument 'container'
que vous avez transmis à wp_nav_menu()
, à savoir ''
(chaîne littérale vide) ou false
.
La substance du problème est un comportement contradictoire qui découle de ces lignes in wp_page_menu()
:
// Fallback in case `wp_nav_menu()` was called without a container.
if ( empty( $container ) ) {
$container = 'div';
}
Donc, puisque empty()
évalue les false
booléens ainsi que ''
en true
, ce petit système à sécurité intrinsèque pense que vous êtes fou de ne pas vouloir de conteneur et vous en rajoute un pour vous.
Vous pouvez essayer avec ce scénario.
Étape 1:
Placez ce code dans le fichier functions.php
de votre thème:
add_action( 'after_setup_theme', 'theme_nav_setup' );
if ( ! function_exists( 'theme_nav_setup' ) ){
function theme_nav_setup() {
register_nav_menu( 'header-nav_new', __( 'Main Menu', 'text-domain' ) );
}
}
Étape 2:
Appelez ensuite ceci où vous pouvez voir la sortie de ce menu:
wp_nav_menu( array(
'menu' => 'header-nav_new',
'theme_location' => 'header-nav_new',
'depth' => 6,
'container' => 'ul',
'fallback_cb' => 'wp_page_menu',
'menu_class' => 'abc'
)
);
D'après ma propre expérience, si vous n'avez pas encore affecté de menu à l'emplacement de menu enregistré, tous les paramètres d'argument précédés de container
ne fonctionneront pas. vous devez affecter votre menu créé à l'emplacement de menu enregistré avant de voir le changement.
Oui, vous pouvez utiliser ce code
$nav_menu = array(
'title_li' => '',
'container' => '',
'theme_location' => 'header-nav',
'menu_class' => '',
'menu_id' => '',
);
wp_nav_menu( $nav_menu );
Le code ci-dessus affichera le menu au format ul et li sans avoir aucune classe ni id pour les balises ul et li
Lorsque vous définissez "conteneur" sur false, cela devrait fonctionner sauf s'il y a un bogue quelconque dans l'environnement ou un conflit avec autre chose.
En fait, j'ai testé cela dans Twenty Fifteen et l'un de Mes thèmes Themeforest.
Pouvez-vous vérifier si vous avez un cache interne qui ne reflète pas vos modifications immédiatement?
Merci