問題描述
我在這個網站上搜索,發現很多 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 輔助翻譯的英文資料結果。如果您對結果不滿意,可以加入我們改善翻譯效果:薇曉朵技術論壇。