I search on this site and found many answers for this question. Most of them is not working on my theme.
Here is a one solution I found and it's working according to my need.
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);
}
This code will remove ul
at beginning and the end of wp_nav_menu()
. So in my theme I just write
<ul class="primary-nav">
<?php wp_nav_menu_no_ul(); ?>
</ul>
But the problem is coming again when I do not add or activate any menu via admin. http://domain.com/wp-admin/nav-menus.php
Question :
How do I remove the <div><ul>**</ul></div>
whether the menu is active or not. Let me know
Finally I got it worked :) 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>
menu_class
andmenu_id
parameters to set a class and/or id attribute on the UL.menu_class
andmenu_id
only will working if menu is activated. If the menu doesn't existsmenu_class
andmenu_id
is not as<ul>
but as<div>
. thats why too much question aboutwp_nav_menu()
you may test it :)