在HTMLTag中获取菜单的每个菜单导航标签

时间:2021-03-22 作者:Jessy Kim

我有页脚菜单wp_nav_menu 使用以下代码:

wp_nav_menu(
   array(
        \'container\'      => \'\',
        \'depth\'          => 1,
        \'items_wrap\'     => \'%3$s\',
        \'theme_location\' => \'footer\',
        \'link_before\'    => \'<span content="">\',
        \'link_after\'     => \'</span>\',
   )
);
HTML输出如下所示:

<ul class="footer-menus">
   <li id="1"><a title="A" href="https://localhost/A/"><span content=""></span>A</a></li>
   <li id="2"><a title="B" href="https://localhost/B/"><span content=""></span>B</a></li>
   <li id="3"><a title="C" href="https://localhost/C/"><span content=""></span>C</a></li>
</ul>
问题是如何填充标签<span content 其中content tag是菜单导航标签,与li 标记,因此HTML输出如下:

<ul class="footer-menus">
   <li id="1"><a title="A" href="https://localhost/A/"><span content="A"></span>A</a></li>
   <li id="2"><a title="B" href="https://localhost/B/"><span content="B"></span>B</a></li>
   <li id="3"><a title="C" href="https://localhost/C/"><span content="C"></span>C</a></li>
</ul>
感谢您的帮助。谢谢

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

在函数中添加此代码。php文件

class WP_Custom_Nav_Walker extends Walker_Nav_Menu {

    public function start_el(&$output, $item, $depth = 0, $args = array (), $id = 0) {
        $indent = ( $depth ) ? str_repeat ( "\\t", $depth ) : \'\';

        $classes   = empty ( $item->classes ) ? array () : (array) $item->classes;
        $classes[] = \'menu-item-\' . $item->ID;

        $class_names = join ( \' \', apply_filters ( \'nav_menu_css_class\', array_filter ( $classes ), $item, $args, $depth ) );
        $class_names = $class_names ? \' class="\' . esc_attr ( $class_names ) . \'"\' : \'\';

        $id = apply_filters ( \'nav_menu_item_id\', \'menu-item-\' . $item->ID, $item, $args, $depth );
        $id = $id ? \' id="\' . esc_attr ( $id ) . \'"\' : \'\';

        $output .= $indent . \'<li\' . $id . $class_names . \'>\';

        $atts           = array ();
        $atts[ \'title\' ]  = ! empty ( $item->attr_title ) ? $item->attr_title : \'\';
        $atts[ \'target\' ] = ! empty ( $item->target ) ? $item->target : \'\';
        $atts[ \'rel\' ]    = ! empty ( $item->xfn ) ? $item->xfn : \'\';
        $atts[ \'href\' ]   = ! empty ( $item->url ) ? $item->url : \'\';

        $atts = apply_filters ( \'nav_menu_link_attributes\', $atts, $item, $args, $depth );

        $attributes = \'\';
        foreach ( $atts as $attr => $value ) {
            if( ! empty ( $value ) ) {
                $value      = ( \'href\' === $attr ) ? esc_url ( $value ) : esc_attr ( $value );
                $attributes .= \' \' . $attr . \'="\' . $value . \'"\';
            }
        }

        $item_output = $args->before;
        $item_output .= \'<a\' . $attributes . \'>\';
        /** This filter is documented in wp-includes/post-template.php */
        // YOUR ADDED CONTROL STARTS HERE!!
        if( $args->link_before === \'span\' ) {
            $item_output .= \'<span content="\'.$item->title.\'"></span>\';
        }
        $item_output .= apply_filters ( \'the_title\', $item->title, $item->ID ) . $args->link_after;
        // YOUR ADDED CONTROL ENDS HERE!!


        $item_output .= \'</a>\';
        $item_output .= $args->after;

        $output .= apply_filters ( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }

}
菜单应该是这样的

wp_nav_menu(
   array(
        \'menu_class\'     => \'nav-menu\',
        \'container\'      => \'\',
        \'depth\'          => 1,
        \'items_wrap\'     => \'%3$s\',
        \'theme_location\' => \'footer\',
        \'walker\'         => new WP_Custom_Nav_Walker(),
        \'link_before\'    => \'span\',
   )
);

相关推荐

使用PHP隐藏HTML元素(按类或ID)

在WordPress中,是否可以使用php按类或ID隐藏HTML元素?我使用了css规则display: none; 但这很容易解决。。。我通过以下途径进行了尝试functions.php 但无济于事:function MyTestFunction() { obj = document.getElementById("div-or-class-id"); obj.style.visibility = "hidden";