现在是我的代码:
$menu_icon = get_field('menu_icon');
if($menu_icon) {
$m_icon = '<img src="'.the_field('menu_icon').'">';
} else {
$m_icon = "";
};
$personal = array(
'theme_location' => 'personal',
'menu' => 'Personal Menu',
'before' => '$m_icon',
);
wp_nav_menu( $personal );
这就是它吐出来的东西:
<ul id="menu-personal-menu" class="menu">
<li class="menu-item>
$m_icon <a href="#">Link</a>
<ul class="sub-menu">
<li>$m_icon <a href="#1">SubLink 1</a></li>
<li>$m_icon <a href="#2">SubLink 2</a></li>
<li>$m_icon <a href="#3">SubLink 3</a></li>
</ul>
</li>
</ul>
我想让它产生这样的东西:
<ul id="menu-personal-menu" class="menu">
<li class="menu-item>
<a href="#">Link</a>
<ul class="sub-menu">
<li><img src="path/sublinkimg1"> <a href="#1">SubLink 1</a></li>
<li><img src="path/sublinkimg2"> <a href="#2">SubLink 2</a></li>
<li><img src="path/sublinkimg3"> <a href="#3">SubLink 3</a></li>
</ul>
</li>
</ul>
这是一般的想法:
出于几个原因这是错误的。我知道高级自定义字段:“menu_icon”可能无法检索循环之外的任何内容,而且我对wp_nav_menu()函数不够熟悉,无法知道是否可以回显特定于页面正在显示。
有谁知道我怎么做到这一点?
答案 0 :(得分:2)
不完全是你要求的,我现在没有正确解决你的整个问题的方法,但我可以帮助你让自定义字段在循环外工作,如果这有助于你:)
您只需在字段名称后面设置页面ID,就可以在此循环之外工作
get_field('your-field', $page_ID);
答案 1 :(得分:2)
我立即注意到的一件事是你有额外的单引号,php正在翻译内容literally。你实际上想要$ m_icon中包含的字符串,而不是字符串'$ m_icon',它不是变量。
$personal = array(
'theme_location' => 'personal',
'menu' => 'Personal Menu',
'before' => $m_icon, //this line was wrong, single quotes means 'literally this$ $tring'
);
编辑: 我冒昧地为你要做的事情写了一个过滤函数。欢呼声。
function insert_icons($items, $menu, $args){
//check our menu name so we filter the right one
if($menu->name=='Personal Menu'){
//loop through the menu items
foreach($items as $key => $item){
//make sure object_id is set (this is the page or post id)
if(isset($item->object_id) && !empty($item->object_id)){
//grab the menu icon
$menu_icon = get_field('menu_icon',$item->object_id);
//make sure the previous line returned something
if(isset($menu_icon) && !empty($menu_icon)){
//create our image string
$m_icon = '<img src="'.$menu_icon.'">';
//insert it into the page title
$item->title = $m_icon.$item->title;
}
}
}
}
return $items;
}
add_filter('wp_get_nav_menu_items','insert_icons',NULL,3);