问题描述
我在这个网站上搜索,发现很多 answers 的这个问题。他们中的大多数人不是在我的主题工作。
这是一个解决方案我 found,它的工作,根据我的需要。
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);
}
此代码将在 wp_nav_menu()
的开始和结束时删除 ul
。所以在我的主题我只是写
<ul class="primary-nav">
<?php wp_nav_menu_no_ul(); ?>
</ul>
但是当我不通过管理员添加或激活任何菜单时,问题再次出现。 http://domain.com/wp-admin/nav-menus.php
题 :
菜单是否激活,如何清除<div><ul>**</ul></div>
。让我知道
最后我得到它的工作:) 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>
最佳解决方案
函数 wp_nav_menu 接受 fallback_cb 的参数,该参数是要在菜单不存在的情况下运行的函数的名称。所以改变你的代码到这样的东西:
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;
}
你甚至可以从菜单中删除容器,并做更多的参数发送到 wp_nav_menu function
希望这可以帮助。
次佳解决方案
实际上,WordPress 默认支持这一点:
wp_nav_menu(array(
'items_wrap' => '%3$s'
));
items_wrap
的默认值为<ul id="%1$s" class="%2$s">%3$s</ul>
。
第三种解决方案
下面的代码应该很简单。
<?php
$my_menu = array(
'menu' => 'main-menu',
'container' => '',
'items_wrap' => '%3$s'
);
wp_nav_menu( $my_menu );
?>
参考 wp_nav_menu 功能的链接 http://codex.wordpress.org/Function_Reference/wp_nav_menu
参考文献
注:本文内容整合自 Google/Baidu/Bing 辅助翻译的英文资料结果。如果您对结果不满意,可以加入我们改善翻译效果:薇晓朵技术论坛。