Bagaimana cara Menambahkan <span> ke Setiap Menu Tautan dengan teks tautan ke data-attr?


8

Bagaimana saya mendapatkan sesuatu seperti di bawah ini? Kode saya seperti ini:

wp_nav_menu(
     array(
       'theme_location' => 'header_menu',
       'container_id' => 'menu',
       'link_before' => '<span data-hover="link-text-here">',
       'link_after' => '</span>',
     )
  );

Saya ingin mendapatkan hasil di bawah ini:

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

Tolong beri tahu saya.

Jawaban:


4

Solusi 1: Menggunakan custom walker

Saya mendapat ide dari menambahkan span class di dalam tag anchor tag wp_nav_menu dan membuat beberapa perubahan untuk kebutuhan Anda.

1. Tambahkan kode ini di bawah ini ke functions.php Anda terlebih dahulu.

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. Tambahkan kode di bawah ini ke header.phptempat instalasi Anda wp_nav_menu. Dijelaskan di bawah ini adalah kode sehingga menginstal menu kustom baru dalam hal ini Nav_Walker_Nav_Menu.

<?php wp_nav_menu( array( 'container_class' => 'menu-header', 'theme_location' => 'primary', 'walker' => new Nav_Walker_Nav_Menu() ) ); ?>

Semoga ini bisa membantu Anda dengan baik!

Solusi 2: Menggunakan wp_list_pages

Silakan periksa halaman ini . Anda dapat melihat cuplikan mereka. Jika Anda meletakkan bentang di sekitar tag tautan yang dapat Anda gunakan link_beforedanlink_after

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

itu mengatakan Pemberitahuan: Mencoba mendapatkan properti non-objek di /Applications/MAMP/htdocs/wp.dev/wp-content/themes/eta-theme/functions.php pada saluran 98
Mohamed Rihan

Jadi, apa kode di baris 98?
AddWeb Solution Pvt Ltd

$ item_output = $ args-> sebelumnya; $ item_output. = '<a'. $ atribut. '> <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-> setelah;
Mohamed Rihan

sepertinya oke sekarang. Karena saya tidak menambahkan menu pada dashbord .. terima kasih
Mohamed Rihan

8

Sejak versi 4.4.0 filter 'nav_menu_item_args' ditambahkan. Ini memungkinkan Anda untuk mengatur atribut 'link_before' dan 'link_after' untuk setiap item.

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

Itu tidak benar .. di bawah ini adalah output setelah menggunakan filter ... <li id ​​= "menu-item-44" class = "menu-item menu-item-type-post_type menu-item-objek-halaman-menu saat ini-menu -item page_item halaman-item-24 current_page_item menu-item-44 "> <a href=" sandbox.test/about" aria-current="page"> <span data-hover = "Tentang"> Tentang </span> </a> </li>
Daren Zammit

2

Silakan coba yang berikut ini:

wp_nav_menu(
 array(
   'theme_location' => 'header_menu',
   'container_id' => 'menu',
   'walker' => new description_walker()
 )
);

Dan tambahkan ini ke 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 );
        }
}

Dengan cara ini Anda dapat dengan mudah menambahkan tag rentang ...


tetapi saya ingin data attr di dalam rentang
Mohamed Rihan
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.