Добавить ссылку на корзину WooCommerce итог в качестве последнего пункта меню в wp_nav_menu

#php #wordpress #woocommerce #cart #nav

#php #wordpress #woocommerce woocommerce #Корзина #навигация

Вопрос:

Я пытаюсь добавить пользовательскую ссылку на корзину WooCommerce с указанием количества содержимого и общей стоимости в качестве последнего параметра в меню.

Это мой код, который я сейчас использую:

 add_filter('wp_nav_menu_header-menu_items','custom_minicart_in_main_menu', 10, 2);
function custom_minicart_in_main_menu( $menu, $args) {

    $minicart_link = '<a class="custom-minicart" href="<?php echo wc_get_cart_url(); ?>" title="<?php _e( "View Your Cart" ); ?>"><?php echo sprintf ( _n( "%d item", "%d items", WC()->cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - <?php echo WC()->cart->get_cart_total(); ?></a>';

    return $menu . $minicart_link;

}
 

Проблема в том, что единственное, что отображается в результате, это:

 ">cart->get_cart_contents_count() ), WC()->cart->get_cart_contents_count() ); ?> - cart->get_cart_total(); ?>
 

Результат должен быть:

 Cart (#number of items) - $total cost of all products (subtotal using wc_price)
 

Итак, вот так:

 Cart (4) - $78.50
 

Как я могу настроить свой код так, чтобы получить желаемый результат?

Ответ №1:

wp_nav_menu() — отображает меню навигации — содержит wp_nav_menu_{$menu->slug}_items фильтр.

 /**
 * Filters the HTML list content for a specific navigation menu.
 *
 * @since 3.0.0
 *
 * @see wp_nav_menu()
 *
 * @param string   $items The HTML list content for the menu items.
 * @param stdClass $args  An object containing wp_nav_menu() arguments.
 */
$items = apply_filters( "wp_nav_menu_{$menu->slug}_items", $items, $args );
 

Итак, чтобы ответить на ваш вопрос, используйте:

 function custom_minicart_in_main_menu( $items, $args ) {
    // Get cart url
    $link_url = wc_get_cart_url();
    
    // Text
    $link_text = sprintf( __( 'Cart (%d) - %s', 'woocommerce' ), WC()->cart->cart_contents_count, WC()->cart->get_total() );
    
    // Link
    $minicart_link = '<a class="custom-minicart" href="' . $link_url . '">' . $link_text . '</a>';

    return $items . $minicart_link;

}
add_filter( 'wp_nav_menu_header-menu_items', 'custom_minicart_in_main_menu', 10, 2 );
 

Комментарии:

1. Ах, это просто потрясающе. Спасибо. Теперь мне просто нужно выяснить, как включить официальную документацию WC для фрагментов корзины. Большое спасибо!