Wordpress 自定义Walker菜单和菜单图标
目前,我正在为我的Wordpress主题构建一个自定义菜单,但有一件事让我有点为难。我正在使用walkerclass,这样我就可以为我的不同菜单元素添加更多细节。除此之外,我还使用自定义图标,我使用一个名为菜单图标()的插件来显示这些图标 但我现在对我的元素控制不够。我使用当前代码获得以下HTML导出:Wordpress 自定义Walker菜单和菜单图标,wordpress,plugins,menu,icons,Wordpress,Plugins,Menu,Icons,目前,我正在为我的Wordpress主题构建一个自定义菜单,但有一件事让我有点为难。我正在使用walkerclass,这样我就可以为我的不同菜单元素添加更多细节。除此之外,我还使用自定义图标,我使用一个名为菜单图标()的插件来显示这些图标 但我现在对我的元素控制不够。我使用当前代码获得以下HTML导出: <div class="menuwrapper"> <ul class="menu"> <li class="menuitem>
<div class="menuwrapper">
<ul class="menu">
<li class="menuitem>
<a class="page" href="#">
<div class="menu-title">
<h3>
<span>Menu Title here</span>
<img src="homeicon.svg" />
</h3>
</div>
</a>
</li>
</ul>
</div>
为了实现第一个结果,我使用以下walker类:
<?php
class Description_Walker extends Walker_Nav_Menu{
function start_el( &$output, $item, $depth = 0, $args = array(), $id = 0 ) {
$indent = str_repeat("\t", $depth);
$attributes = '';
! empty ( $item->attr_title )
and $item->attr_title !== $item->title
and $attributes .= ' title="' . esc_attr( $item->attr_title ) .'"';
! empty ( $item->url )
and $attributes .= ' href="' . esc_attr( $item->url ) .'"';
$attributes = trim( $attributes );
$title = apply_filters( 'the_title', $item->title, $item->ID );
$item_output = "$args->before<a class=\"page\" $attributes><div><h3>$args->link_before$title</h3></div></a>"
. "$args->link_after$args->after";
$output .= $indent . "<li class=\"menuitem\">";
$output .= apply_filters(
'walker_nav_menu_start_el',
$item_output,
$item,
$depth,
$args
);
}
}
?>
我现在想的是插件正在菜单的$title中添加图标。这就是为什么我不能把它们分开。我已经在浏览插件文件,看看是否可以覆盖某些内容。但我还没有找到解决办法。如果有人能给我指出正确的方向,那就太好了。也许有人已经有了一些插件的经验
亲切问候,
我已经解决了这个问题。我找到了将标题与图标结合在一起的代码。我在该函数中创建了一些自定义类 它位于菜单图标插件的type-image.php文件中 旧代码:
$title = sprintf(
'%s%s%s',
'before' === $values['position'] ? '' : $title,
$this->get_icon_markup( $icon->ID, $values, $i_attrs ),
'after' === $values['position'] ? '' : $title
);
新代码:
$title = sprintf(
'%s%s%s',
'before' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>",
"<span class=\"icon-wrap\">" . $this->get_icon_markup( $icon->ID, $values, $i_attrs ) . "</span>",
'after' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>"
);
$title=sprintf(
“%s%s%s”,
'在'==$values['position']之前?'':.$title.'',
“.$this->get_icon\u markup($icon->ID,$values,$i_attrs)。”,
'在'=$values['position']之后?'':.$title'.'
);
只需对其进行一些功能覆盖。我知道这不是最好、最干净的方法,但它确实有效。也有同样的问题。请说,你是如何获得标题中的图像的?我有类似的
apply_filters()
call,但是没有图标出现在这个菜单项的标题图标中。我想这个插件已经更新了。我在github上发布了一条关于它的评论,他说他将在下一个版本中集成它。否则,您必须重写插件type-image.php中的函数。不必对上述代码进行任何更改。它会自动抓取标题。哦,现在我看到$title=apply\u过滤器('the\u title',$item->title,$item->ID)代码>似乎才是真正需要的(而不是“walker\u nav\u menu\u start\u el”
filter)。我有更复杂的情况,因为我需要在不同的菜单中使用不同的图标标记。因此,我将尝试找到一个解决方案:)是的,你是对的。但我仍然不能为不同的步行者使用不同的图标输出覆盖功能,这是一个真正的问题。无论如何,我已经解决了一个肮脏但有效的解决方案,它使用$GLOBALS
。但这是一个单独回答的主题:)
$title = sprintf(
'%s%s%s',
'before' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>",
"<span class=\"icon-wrap\">" . $this->get_icon_markup( $icon->ID, $values, $i_attrs ) . "</span>",
'after' === $values['position'] ? '' : "<div><h3>" . $title . "</h3></div>"
);