WordPress

filtry – Dodaj menu rozwijane za pomocą „add_filter => wp_nav_menu_items”

  • 23 maja, 2017
  • 4 min read
filtry – Dodaj menu rozwijane za pomocą „add_filter => wp_nav_menu_items”


Mój projekt: WordPress, Woocommerce, Bootstrap 4, bs4navwalker

Mój problem: niestandardowy element listy rozwijanej dodany przez filtr WP. Mam jeden navbar, 3 różne menu w środku (za pomocą bs4navwalker), znaczek do koszyka i formularz wyszukiwania. Zobacz kod.

Używam filtra (add_filter( 'wp_nav_menu_items’,), aby dodać dane logowania, wylogowania i mojego konta na moim pasku nawigacyjnym, wszystko jest w porządku, ale chciałbym dodać te elementy do listy rozwijanej. Filtr tworzy tylko jeden lub dwa więcej pozycji do menu „użytkownika”.

Rozumiem, że tak się dzieje, ponieważ dodaję a <li>ale nie mogłem wymyślić, jak dodać cały kod potrzebny do zarządzania listą rozwijaną.

Czy to możliwe?

KOD front-page.php

<div class="nav-custom">
  <div class="container">
    

      <nav class="navbar-nav navbar-toggleable-sm navbar-inverse">

        

        <a class="navbar-brand" href="<?php echo get_home_url(); ?>">
              <img src="<?php bloginfo('template_url'); ?>/img/logo.png" class="d-inline-block align-top" alt="">
        </a>

           <?php
           wp_nav_menu([
             'menu'            => 'top',
             'theme_location'  => 'top',
             'container'       => false,
             'container_id'    => 'bs4navbar',
             'container_class' => 'collapse navbar-collapse',
             'menu_id'         => false,
             'menu_class'      => 'navbar-nav mr-auto no-md-view',
             'depth'           => 2,
             'fallback_cb'     => 'bs4navwalker::fallback',
             'walker'          => new bs4navwalker()
           ]);

          ?>
        
        <!-- Search form -->
        <?php get_product_search_form(); ?>

        <!-- User Menu -->
        <?php 
          wp_nav_menu([
           'menu'            => 'user',
           'theme_location'  => 'user',
           'container'       => false,
           //'container_id'    => 'bs4navbar',
           //'container_class' => 'collapse navbar-collapse',
           'menu_id'         => false,
           'menu_class'      => 'navbar-nav mr-auto no-md-view',
           'depth'           => 2,
           'fallback_cb'     => 'bs4navwalker::fallback',
           'walker'          => new bs4navwalker()
         ]);
        ?>

        <!-- Cart Menu -->
        <?php 
          wp_nav_menu([
           'menu'            => 'Cart',
           'theme_location'  => 'Cart',
           'container'       => false,
           //'container_id'    => 'bs4navbar',
           //'container_class' => 'collapse navbar-collapse',
           'menu_id'         => false,
           'menu_class'      => 'navbar-nav mr-auto',
           'depth'           => 2,
           'fallback_cb'     => 'bs4navwalker::fallback',
           'walker'          => new bs4navwalker()
         ]);
        ?>
                <!-- code for the badge START-->
        <?php
        if ( WC()->cart->get_cart_contents_count() !== 0 ) {
        // Do something fun
          ?>  
          <span class="badge badge-pill badge-warning no-md-view">
            <a class="cart-customlocation" href="<?php echo wc_get_cart_url(); ?>" title="<?php _e( 'View your shopping cart' ); ?>"><?php echo sprintf ( _n( '%d item', '%d items', WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?></a>
          <?php 
        }
        ?>

        </span>
    </nav>

  </div>
</div>

KOD funkcji.php

<?php

add_filter( 'wp_nav_menu_items', 'my_account_loginout_link', 10, 2 );
/**
 * Add WooCommerce My Account Login/Logout to Menu
 * 
 * @see 
 */
function my_account_loginout_link( $items, $args ) {
    if (is_user_logged_in() && $args->theme_location == 'user') { //change your theme location menu to suit

        
        $items .= '                 
                    <li><a class="nav-link" href="' . get_permalink( wc_get_page_id( 'myaccount' ) ) . '">Meus Dados</a></li>
                    <li><a class="nav-link" href="'. wp_logout_url( get_home_url() ) .'">Sair</a></li>
                    '; //change logout link, here it goes to 'shop', you may want to put it to 'myaccount'
    }
    elseif (!is_user_logged_in()  && $args->theme_location == 'user') {//change your theme location menu to suit
        
     

        $items .= '<li><a class="nav-link" href="' . get_permalink( wc_get_page_id( 'myaccount' ) ) . '">Entrar</a></li>';
    }
    return $items;
}

Wynik

Warto przeczytać!  Jak stworzyć własny, niestandardowy krótki adres URL dla swojego bloga

Jak widać, element został dodany do mojego menu użytkownika (ikona użytkownika + Entrar), ale nie jako lista rozwijana.

wprowadź tutaj opis obrazu


Źródło