如何将链接文本添加到每个菜单链接到数据属性?

时间:2016-02-01 作者:Mohamed Rihan

我怎样才能得到下面这样的东西?我的代码如下:

wp_nav_menu(
     array(
       \'theme_location\' => \'header_menu\',
       \'container_id\' => \'menu\',
       \'link_before\' => \'<span data-hover="link-text-here">\',
       \'link_after\' => \'</span>\',
     )
  );
我想得到以下结果:

<nav class="main-nav">
    <li><a href="#"><span data-hover="Home">Home</span></a></li>
    <li><a href="#"><span data-hover="Proyects">Proyects</span></a></li>
</nav>
请告诉我。

3 个回复
最合适的回答,由SO网友:AddWeb Solution Pvt Ltd 整理而成

解决方案1:使用customize walker,我从add span class inside wp_nav_menu link anchor tag 并根据您的要求进行了一些更改。

1. Add this code below to your functions.php first.

class Nav_Walker_Nav_Menu 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        ) .\'"\' : \'\';


       $description  = ! empty( $item->description ) ? \'<span>\'.esc_attr( $item->description ).\'</span>\' : \'\';



        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'><span data-hover="\'. $item->title .\'">\';
        $item_output .=$args->link_before .apply_filters( \'the_title\', $item->title, $item->ID );
        $item_output .= $description.$args->link_after;
        $item_output .= \'</span></a>\';
        $item_output .= $args->after;

        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
    }
}
2. Add code below to your header.php where your wp_nav_menu is installed.下面解释的是安装新自定义菜单的代码,在这种情况下Nav_Walker_Nav_Menu.

<?php wp_nav_menu( array( \'container_class\' => \'menu-header\', \'theme_location\' => \'primary\', \'walker\' => new Nav_Walker_Nav_Menu() ) ); ?>
希望这对你有帮助!

解决方案2:使用wp_list_pages

请退房this page . 您可以看到他们的代码片段。如果在链接标记周围放置跨距,则可以使用link_beforelink_after

wp_list_pages("link_before=<span data-hover="link-text-here">&link_after=</span>");

SO网友:Daren Zammit

自版本4.4.0起,添加了“nav\\u menu\\u item\\u args”过滤器。这允许您为每个项目设置“link\\u before”和“link\\u after”属性。

add_filter(\'nav_menu_item_args\', function ($args, $item, $depth) {
    if ($args->theme_location == \'header_menu\') {
        $title             = apply_filters(\'the_title\', $item->title, $item->ID);
        $args->link_before = \'<span data-hover="\' . $title . \'">\';
        $args->link_after  = \'</span>\';
    }
    return $args;
}, 10, 3);

SO网友:Saiful Islam

请尝试以下操作:

wp_nav_menu(
 array(
   \'theme_location\' => \'header_menu\',
   \'container_id\' => \'menu\',
   \'walker\' => new description_walker()
 )
);
并将此添加到functions.php:

class description_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        ) .\'"\' : \'\';


       $description  = ! empty( $item->description ) ? \'<span>\'.esc_attr( $item->description ).\'</span>\' : \'\';



        $item_output = $args->before;
        $item_output .= \'<a\'. $attributes .\'><span>\';
        $item_output .=$args->link_before .apply_filters( \'the_title\', $item->title, $item->ID );
        $item_output .= $description.$args->link_after;
        $item_output .= \'<span></a>\';
        $item_output .= $args->after;

        $output .= apply_filters( \'walker_nav_menu_start_el\', $item_output, $item, $depth, $args );
        }
}
这样,您可以轻松添加span标记。。。

相关推荐

无法将设置添加到“NAV_MENUS”定制器面板

我试图在自定义程序的“菜单”面板中添加一个复选框,但由于某些原因,它没有显示出来。如果我尝试将其从“nav\\u菜单”更改为“title\\u tagline”或“colors”,复选框会显示得很好。是什么阻止它显示在“菜单”面板上?// add custom options to the Customizer function nssra_customizer_options($wp_customize) { // add \"menu primary flex\" checkb