Je recherche sur ce site et trouve plusieurs réponses pour cette question. La plupart ne fonctionnent pas sur mon thème.
Voici une solution I found et cela fonctionne selon mes besoins.
function wp_nav_menu_no_ul()
{
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'primary'
);
$menu = wp_nav_menu($options);
echo preg_replace(array(
'#^<ul[^>]*>#',
'#</ul>$#'
), '', $menu);
}
Ce code supprimera ul
au début et à la fin de wp_nav_menu()
. Donc, dans mon thème, je viens d'écrire
<ul class="primary-nav">
<?php wp_nav_menu_no_ul(); ?>
</ul>
Mais le problème vient encore quand je n'ajoute ni n'active aucun menu via admin. http://domain.com/wp-admin/nav-menus.php
Question:
Comment puis-je supprimer le <div><ul>**</ul></div>
si le menu est actif ou non. Faites le moi savoir
Enfin je l'ai eu travaillé :) functions.php
function wp_nav_menu_no_ul()
{
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'primary',
'fallback_cb'=> 'default_page_menu'
);
$menu = wp_nav_menu($options);
echo preg_replace(array(
'#^<ul[^>]*>#',
'#</ul>$#'
), '', $menu);
}
function default_page_menu() {
wp_list_pages('title_li=');
}
header.php
<ul class="primary-nav">
<?php wp_nav_menu_no_ul(); ?>
</ul>
La fonction wp_nav_menu prend un argument de fallback_cb qui est le nom de la fonction à exécuter si le menu n'existe pas. alors changez votre code en quelque chose comme ceci:
function wp_nav_menu_no_ul()
{
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'primary',
'fallback_cb'=> 'fall_back_menu'
);
$menu = wp_nav_menu($options);
echo preg_replace(array(
'#^<ul[^>]*>#',
'#</ul>$#'
), '', $menu);
}
function fall_back_menu(){
return;
}
vous pouvez même supprimer le conteneur du menu et faire d'autres choses avec quelques arguments supplémentaires envoyés à la fonction wp_nav_menu
J'espère que cela t'aides.
En fait, WordPress supporte cela par défaut:
wp_nav_menu(array(
'items_wrap' => '%3$s'
));
La valeur par défaut pour items_wrap
est <ul id=\"%1$s\" class=\"%2$s\">%3$s</ul>
.
Le code ci-dessous devrait simplement le faire.
<?php
$my_menu = array(
'menu' => 'main-menu',
'container' => '',
'items_wrap' => '%3$s'
);
wp_nav_menu( $my_menu );
?>
Référencez ce lien pour la fonction wp_nav_menu http://codex.wordpress.org/Function_Reference/wp_nav_menu
Si vous souhaitez imprimer uniquement les balises <a>
, vous pouvez choisir:
$primaryMenu = array(
'theme_location' => 'primary',
'menu' => '',
'container' => '',
'container_class' => false,
'container_id' => '',
'menu_class' => 'menu',
'menu_id' => 'primary-menu',
'echo' => false,
'fallback_cb' => 'wp_page_menu',
'before' => '',
'after' => '',
'link_before' => '',
'link_after' => '',
'depth' => 0,
'walker' => ''
);
echo strip_tags( wp_nav_menu( $primaryMenu ), '<a>' );
Pour moi ce qui a fonctionné a été ceci:
<?php wp_nav_menu( array(
'container' => '',
'items_wrap' => '%3$s'
) ); ?>
J'espère que ça aide.