我想在我的 Wordpress 菜单中加入一个高级自定义字段
Posted
技术标签:
【中文标题】我想在我的 Wordpress 菜单中加入一个高级自定义字段【英文标题】:I'd like to incorporate an advanced custom field into my Wordpress menu 【发布时间】:2014-01-08 16:59:56 【问题描述】:这是我的代码:
$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() 函数不够熟悉,无法知道是否可以回显特定于它正在显示的页面。
有谁知道我如何做到这一点?
【问题讨论】:
【参考方案1】:我马上注意到的一件事是你有额外的单引号,而 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);
【讨论】:
带引号输出字符串:$m_iconmenuitem 不带: menuitem 它没有从变量中提取任何数据,虽然我不能说为什么......我认为解决方案在于 Nishant 建议的 $page_ID 技巧,但还没有机会对其进行测试。 这似乎意味着 $m_icon 中包含的字符串正在返回 NULL。尝试更改此设置:if($menu_icon) $m_icon = '<img src="'.the_field('menu_icon').'">'; else $m_icon = ""; ;
在 else 条件下设置空字符串以外的内容。似乎 get_field 没有返回您要查找的内容。我肯定会尝试 Nishant 建议的第二个参数。【参考方案2】:
不完全符合您的要求,我现在没有针对您的整个问题的正确解决方案,但如果这对您有帮助,我可以帮助您让自定义字段在循环之外工作:)
您只需在字段名称之后设置页面 ID,它就可以像这样在循环之外工作
get_field('your-field', $page_ID);
【讨论】:
这很有帮助。我想知道作为此解决方案的一部分,是否可以将页面 ID 回显到每个菜单项中... 嗯实际上这可能是可能的......试试看,如果它适合你,请分享:)它可能对未来有帮助......谢谢以上是关于我想在我的 Wordpress 菜单中加入一个高级自定义字段的主要内容,如果未能解决你的问题,请参考以下文章
在 Wordpress 中使用 ACF(高级自定义字段)显示自定义帖子标题的下拉菜单
我想在UMeditor中加入一个百度音乐的按钮 应该怎么从UEditor