当前位置: 首页 > 知识库问答 >
问题:

php查找具有类名的菜单项并插入标记

关飞翔
2023-03-14

我创建了一个wordpress菜单,其中一个菜单项的类为“wishlist”。使用wordpress“wp_nav_menu_items”过滤器,我可以在一个长字符串中获得所有菜单项的整个标记:

public function wishlist_count( $items, $args ) {
    var_dump($items);
    return  $items;
}

我正在寻找使用php的最佳方法,首先只找到带有类“愿望清单”的菜单项,然后在该菜单项中插入一些自定义标记。然后在返回之前将更新的标记添加回$项目字符串。

以下是$项目字符串的输出:

<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>

共有1个答案

养俊驰
2023-03-14

所以除非我完全误解了这个问题,否则这个问题和评论中有很多(错误的)地方。

首先-您不需要编写特殊函数来查看$items,wordpress已经以wp\u get\u nav\u menu\u items()的形式提供了此函数

然后,您有一个特殊的过滤器,正好用于菜单中的css类,称为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来实现。。

外观中

在显示高级菜单属性下,选中CSS类。

现在展开任何菜单项以显示CSS类(可选)文本输入。

现在,如果您想注入更复杂的标记

    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_菜单\u link_属性

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中完成,就像你在原始问题中写的那样,而不是动态运行的客户端。所以并不真的需要jsjQuery-同样,假设我做了没有误解你的问题。

 类似资料:
  • df1: df2: 我想将df1中的“col1、col2、col3、col4、col5、col6、col7”列值与df2中的“mapping_value”列相匹配,并在df1中创建一个名为“Scientific value”的新列,该列将包含来自df2中“Scientific value”列的条目。 输出: 在这种情况下会合并工作。。或者也很乐意学习其他有效的方法!! 谢谢!

  • 问题内容: 在这种情况下,我需要使用Selenium api 查找并单击“ 关于” 链接,但无法执行此操作。 我所做的是 但它不起作用 问题答案: 以我的经验,Selenium API在这种方式上有很多缺陷。通常只能通过重新选择选择器来克服它们。例如,您可以尝试使用XPath选择器来获取元素: 另外,如果您尝试使用Internet Explorer,则可能不会单击该元素而是模拟按下Enter键来帮

  • 我有一个包含多个菜单项的抽屉菜单。我正在尝试动态更改其中一个菜单项的菜单图标和文本颜色。以下代码位于具有抽屉菜单的活动类之一的中: 下面是方法定义: 虽然我可以成功设置菜单项的标题名和字体颜色,但对菜单图标没有影响。我无法改变这一点。为什么会这样?

  • 问题内容: 想知道是否有人在使用新功能通过PHP 5.3对类进行命名空间时是否遇到了此问题。 我正在使用单独的类来生成动态类调用,以在应用程序中定义用户类型。基本上,类定义器采用类型的整数表示形式并解释它们,返回一个包含要用作该用户模型的类名的字符串。 我在全局范围内定义了具有该名称的用户类型的对象模型,但是在Editor名称空间中,该用户的编辑器具有另一个名称相同的对象。由于某些原因,PHP不允

  • 我在我的应用程序中使用v7.widget.工具栏,但是我得到了一些时髦的功能。我有我的主要活动和放置在它上面的片段。当backStack上没有片段时,汉堡按钮会显示,菜单也会正常工作。当我向backStack添加片段时,向上插入符号会正确显示,但是当我单击向上插入符号时,导航菜单会打开,而不是从堆栈中弹出片段。 现在,如果有一个真正的答案,我会接受它,但在这一点上,我将采取黑客式的解决方案。我尝试

  • 我是Spring的初来乍到。我的类图是这样的