I have some WordPress nav menus and I want to print each nav menu under an <a> tag. I tried the following code:
<?php
wp_nav_menu(
array(
'menu' => 'Main Menu',
'theme_location' => 'api-footer-main',
'menu_class' => 'hex__footer_link',
'container' => 'a',
)
);
?>
Tried to use <a> as the container, but that’s printing:
<ul>
<li><a>Menu</a></li>
<li><a>Menu</a></li>
<li><a>Menu</a></li>
</ul>
I want to remove that entire <ul><li> structure. My menu should be printed as:
<a>Menu</a> <a>Menu</a>
I’ve also tried the following, which removes the <ul> tag, but <li> is still there:
<?php
function wp_nav_menu_no_ul() {
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'api-footer-main',
'fallback_cb' => 'fall_back_menu'
);
$menu = wp_nav_menu( $options );
echo preg_replace( array(
'#^<ul[^>]*>^<li[^>]*>#',
'#</li></ul>$#'
), '', $menu );
}
function fall_back_menu() {
return;
}
And I’m calling that using <?php wp_nav_menu_no_ul(); ?>
How can I achieve this?
Advertisement
Answer
You might try to use the strip_tags php function, for example:
$options = array(
'echo' => false,
'container' => false,
'theme_location' => 'api-footer-main',
'fallback_cb'=> 'fall_back_menu'
);
echo strip_tags(wp_nav_menu( $options ), '<a>' );
See here
For adding the class add the code below in function.php:
function add_menuclass($ulclass) {
return preg_replace('/<a /', '<a class="some-class"', $ulclass);
}
add_filter('wp_nav_menu','add_menuclass');