将菜单链接替换为#并将名称添加到其li

时间:2021-01-13 作者:z-1881

我有wordpress菜单:

<?php
    wp_nav_menu( array(
    \'theme_location\' => \'menu-categorias\',
    \'container\' => \'ul\',
    \'menu_class\' => \'navbar-nav dragscroll\' ) );
?>
其输出:

<ul id="menu-menu-categorias" class="navbar-nav dragscroll">
  <li id="menu-item-8" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8 nav-item fadeIn">
    <a href="http://website.test/category/ux/" class="nav-link">Ux</a>
  </li>
  <li id="menu-item-9" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9 nav-item fadeIn">
    <a href="http://website.test/category/editorial/" class="nav-link">Editorial</a>
  </li>
</ul>
我想要nav-items 替换为# 并将类别的名称(小写)添加到li 班因此,菜单输出应如下所示:

<ul id="menu-menu-categorias" class="navbar-nav dragscroll">
  <li id="menu-item-8" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-8 nav-item fadeIn ux">
    <a href="#ux" class="nav-link">Ux</a>
  </li>
  <li id="menu-item-9" class="menu-item menu-item-type-taxonomy menu-item-object-category menu-item-9 nav-item fadeIn editorial">
    <a href="#ux" class="nav-link">Editorial</a>
  </li>
</ul>
我尝试添加此内容,但没有任何更改:

function lb_menu_anchors($items, $args) {
  foreach ($items as $key => $item) {
      if ($item->object == \'custom\' && substr($item->url, 0, 1) == \'#\') {
          $item->url = site_url() . $item->url;
      }
  }
  return $items;
}
add_filter(\'wp_nav_menu_objects\', \'lb_menu_anchors\', 10, 2);
实现这两件事有什么帮助吗?

1 个回复
最合适的回答,由SO网友:Sally CJ 整理而成

我想要nav-items 替换为#

您可以使用nav_menu_link_attributes hook 设置自定义href 类似这样的值:

add_filter( \'nav_menu_link_attributes\', function ( $atts, $item, $args ) {
    if ( \'menu-categorias\' === $args->theme_location && \'category\' === $item->object ) {
         $atts[\'href\'] = \'#\' . get_term_field( \'slug\', $item->object_id );
    }

    return $atts;
}, 10, 3 );
并将类别的名称(小写)添加到li

对于这一点,您可以使用nav_menu_css_class hook 其中;“名称”;以下是术语/类别slug:

add_filter( \'nav_menu_css_class\', function ( $classes, $item, $args ) {
    if ( \'menu-categorias\' === $args->theme_location && \'category\' === $item->object ) {
         $classes[] = get_term_field( \'slug\', $item->object_id );
    }

    return $classes;
}, 10, 3 );
注意,在我的示例中,我检查了theme_locationmenu-categorias, 我还假设您的菜单项是所有类别(即category 分类学)。

替代解决方案

通过扩展Walker_Nav_Menu class 并编辑start_el() 方法生成li 元素输出(<li><a></a></li>). 看一个例子here.

相关推荐

TinyMCE插件不支持jQuery 3.5.1(测试jQuery更新)

由于Wordpress似乎正在走向一个长期到期的jQuery更新,我开始测试我的一些插件(它们没有发布,只是我用于一些客户网站的东西);测试jQuery更新;。直到昨天,一切都很顺利,我遇到了以下问题。我有一个简单的插件,它在TinyMCE中添加了几个按钮(是的,我为该客户机制作的主题使用了经典编辑器),让他们可以轻松地将短代码和预先编写的HTML片段添加到帖子和页面中。代码非常标准:首先,通过连接到“mce\\U buttons”过滤器挂钩的函数注册按钮,然后通过连接到“mce\\U external\