RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 687593
Accepted
siberian
siberian
Asked:2020-07-05 20:29:18 +0000 UTC2020-07-05 20:29:18 +0000 UTC 2020-07-05 20:29:18 +0000 UTC

更改 php 代码 wp_nav_menu 以更改 html 标记

  • 772

有些项目有一个下拉菜单。要显示菜单,我使用wp_nav_menu。

根据现有设计,需要改变结构html。a将标签更改span为带有嵌套列表的菜单项的标签。那些。如果菜单项有嵌套列表,则它不能是链接。因此,您需要获得以下菜单结构:

<ul>
  <li><a href="">Parent item</a></li>
  <li class="menu-item-has-children">
     <span>Parent item</span>
     <ul>
       <li><a href="">text1</a></li>
       <li><a href="">text2</a></li>                             
     </ul>
  </li>
  <li><a href="">Parent item</a></li>
</ul>

如何更改代码wp_nav_menu以获得这样的菜单结构?

更新程序

有这样的解决办法。但是这段代码改变了整个标记,没有检查嵌套列表。

php
  • 3 3 个回答
  • 10 Views

3 个回答

  • Voted
  1. Best Answer
    siberian
    2020-07-07T15:19:10Z2020-07-07T15:19:10Z

    是不是这样:

    class menu_walker extends Walker_Nav_Menu {
    function start_el(&$output, $item, $depth, $args) {
        global $wp_query;
        $indent = ( $depth ) ? str_repeat( "\t", $depth ) : '';
    
        $class_names = $value = '';
    
        $classes = empty( $item->classes ) ? array() : (array) $item->classes;
    
        $class_names = join( ' ', apply_filters( 'nav_menu_css_class', array_filter( $classes ), $item ) );
        $class_names = ' class="'. esc_attr( $class_names ) . '"';
    
        $output .= $indent . '<li id="menu-item-'. $item->ID . '"' . $value . $class_names .'>';
    
        $attributes  = ! empty( $item->attr_title ) ? ' title="'  . esc_attr( $item->attr_title ) .'"' : '';
        $attributes .= ! empty( $item->target )     ? ' target="' . esc_attr( $item->target     ) .'"' : '';
        $attributes .= ! empty( $item->xfn )        ? ' rel="'    . esc_attr( $item->xfn        ) .'"' : '';
        $attributes .= ! empty( $item->url )        ? ' href="'   . esc_attr( $item->url        ) .'"' : '';
    
    
        $item_output = $args->before;
        if ( $args->walker->has_children && 0 === $depth ) {
            $item_output .= '<span>';
        } else {
            $item_output .= '<a' . $attributes . '>';
        }
    
        $item_output .= $args->link_before .apply_filters( 'the_title', $item->title, $item->ID );
        $item_output .= ( $args->walker->has_children && 0 === $depth ) ? ' </span>' : '</a>';
        $item_output .= $args->after;
        $output .= apply_filters( 'walker_nav_menu_start_el', $item_output, $item, $depth, $args );
    }
    }
    
    • 1
  2. Владимир Микитюк
    2020-07-06T20:02:04Z2020-07-06T20:02:04Z

    或者,您可以添加一个过滤器 - add_filter('wp_nav_menu', 'my_function') 到主题函数(在 function.php 文件中)。

    function replace_tag($block_menu) {
    
        // Выбираем все <a>...</a>
        preg_match_all('|<a(.*?)</a>|is', $block_menu,  $out_dat);
    
        // Проходим в цикле по всем выбранным тегам '<a>' 
        foreach( $out_dat[0] AS $out_d)
        {
            // если встретили класс "dropdown-toggle" то делаем 2 действия: получаем анкор и заменяем строку "<a .... </a>"  на нашу 
            if(strpos($out_d, 'dropdown-toggle'))
            {
                preg_match('|>(.*?)<|is', $out_d,  $ancor);
                $block_menu = str_replace($out_d, '<span>' . $ancor[1] . '</span>',  $block_menu);
            }
        }
    
        return $block_menu;
    }
    add_filter('wp_nav_menu','replace_tag');
    
    • 0
  3. Klimenko Kirill
    2020-07-06T20:22:09Z2020-07-06T20:22:09Z

    真的有必要改吗?向其添加代码functions.php是一个拐杖,可以说是服务器的额外处理。有一种更简洁的方法css:只需将一个类添加到输出链接,然后

    .inactiveLink {
       pointer-events: none;
       cursor: default;
    }
    

    标签仍然存在,但是当您单击带有类的链接时不会发生任何事件,并且您不必削减过滤器(这在或多或少的大型项目中已经足够了)。

    • 0

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    Python 3.6 - 安装 MySQL (Windows)

    • 1 个回答
  • Marko Smith

    C++ 编写程序“计算单个岛屿”。填充一个二维数组 12x12 0 和 1

    • 2 个回答
  • Marko Smith

    返回指针的函数

    • 1 个回答
  • Marko Smith

    我使用 django 管理面板添加图像,但它没有显示

    • 1 个回答
  • Marko Smith

    这些条目是什么意思,它们的完整等效项是什么样的

    • 2 个回答
  • Marko Smith

    浏览器仍然缓存文件数据

    • 1 个回答
  • Marko Smith

    在 Excel VBA 中激活工作表的问题

    • 3 个回答
  • Marko Smith

    为什么内置类型中包含复数而小数不包含?

    • 2 个回答
  • Marko Smith

    获得唯一途径

    • 3 个回答
  • Marko Smith

    告诉我一个像幻灯片一样创建滚动的库

    • 1 个回答
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Алексей Шиманский 如何以及通过什么方式来查找 Javascript 代码中的错误? 2020-08-03 00:21:37 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    user207618 Codegolf——组合选择算法的实现 2020-10-23 18:46:29 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5