我创建了一个wordpress菜单,其中包含一个具有“wishlist”类的菜单项。使用wordpress 'wp_nav_menu_items'过滤器,我可以在一个长字符串中获取所有菜单项的整个标记:
public function wishlist_count( $items, $args ) {
var_dump($items);
return $items;
}
我正在寻找使用php的最佳方法,首先只找到类'wishlist'的菜单项,然后在该菜单项中插入一些自定义标记。然后在返回之前将更新的标记添加回$ items字符串。
以下是$ items字符串输出的内容:
<li id="menu-item-10" class="menu-item menu-item-type-post_type menu-item-object-page menu-item-has-children menu-item-10">
<a href="http://localhost/powell/shop/">Shop</a>
<ul class="sub-menu">
<li id="menu-item-14" class="wishlist menu-item menu-item-type-post_type menu-item-object-page menu-item-14">
<a href="http://localhost/powell/wishlist/">Wishlist</a>
</li>
</ul>
</li>
答案 0 :(得分:1)
所以......除非我完全误解了这个问题,否则在这个问题和评论中会有很多(错误的)。
首先 - 您不需要编写特殊功能来查看$items
,wordpress已经以wp_get_nav_menu_items()
然后,您对名为nav_menu_css_class
用法将与
一致function my_special_nav_class( $classes, $item ) {
if ( is_single() && $item->title == 'Blog' ) {
$classes[] = 'special-class';
}
return $classes;
}
然后应用过滤器
add_filter( 'nav_menu_css_class', 'my_special_nav_class', 10, 2 );
话虽如此,你也可以通过UI实现这一点..
在Appearance > Menus
中,点击Screen Options
标签
在Show advanced menu properties
下,检查CSS类。
现在展开任何菜单项以显示CSS Classes(可选)文本输入。
现在,如果你想注入更复杂的标记
add_filter('wp_nav_menu_items','some_added_function', 10, 2);
function some_added_function( $nav, $args ) {
if( $args->theme_location == 'primary' )// target the menu
// add markup
return $nav."<li class='menu-header-search'><form action='http://example.com/' id='searchform' method='get'><input type='text' name='s' id='s' placeholder='Search'></form></li>";
return $nav;
}
当然这取决于您的标记,因为如果您只需要更改某些链接属性,则会有另一个过滤器nav_menu_link_attributes
add_filter( 'nav_menu_link_attributes', function( $atts, $item )
{
if( isset( $item->classes ) )
{
$atts['class'] = join(
' ',
array_filter(
$item->classes,
function( $val )
{
return 'li-class-' !== substr( $val, 0, strlen( 'li-class-' ) );
}
)
);
}
return $atts;
}, 10, 2 );
所有这些假设你想在php
中这样做,就像你在原始问题中写的那样,而不是动态 - 即时 - 客户端。所以不需要js
或jQuery
- 再次,假设我没有误读你的问题。