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
Jak widać, element został dodany do mojego menu użytkownika (ikona użytkownika + Entrar), ale nie jako lista rozwijana.