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