Ajax обновляет счетчик продуктов в меню корзины в Woocommerce - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть пункт меню, указывающий на корзину и считывающий количество продуктов, находящихся в настоящее время в корзине.

CART (3)

Когда на странице корзины я изменяю количество продуктов и нажимаю"Update cart" или удалите элемент, номер не обновляется.Любая идея, почему?

/*CHANGE CART MENU TITLE IN MENU*/
add_filter( 'wp_setup_nav_menu_item','my_item_setup' );
function my_item_setup($item) {

    if ( ! is_admin() ) {
        if ( class_exists( 'woocommerce' ) ) {

            global $woocommerce;

            if ( $item->url == esc_url( wc_get_cart_url() ) ) {

                if (is_null($woocommerce->cart)){

                } else {
                    if( get_locale() == 'fr_FR' ) {
                        $item->title = 'PANIER ('. '<span class="count-cart">' .  $woocommerce->cart->get_cart_contents_count() . '</span>)';
                    } else {
                        $item->title = 'MY CART ('. '<span class="count-cart">' .  $woocommerce->cart->get_cart_contents_count() . '</span>)';
                    }
                }

            }
        }
    }
    return $item;
}

И

add_filter( 'woocommerce_add_to_cart_fragments', 'my_woocommerce_add_to_cart_fragments' );
function my_woocommerce_add_to_cart_fragments( $fragments ) {
    // Add our fragment
    $fragments['li.menu-item-type-woocommerce-cart'] = my_item_setup( '');
    return $fragments;
}

РЕДАКТИРОВАТЬ:

Использование Ajaxify количество элементов корзины в Woocommerce код ответа, кажется, работает немного лучше.Номер продукта обновляется, когда я удаляю товар со страницы корзины или меняю количество товаров, но не обновляется, когда я очищаю корзину.Кроме того, есть пробел до и после номера продукта (см. Рисунок с пустой корзиной и "CART ( 1 )".

add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_cart_fragments');
function wc_refresh_cart_fragments($fragments){
    ob_start();
    ?>
    <span class="count-cart"><?php echo WC()->cart->get_cart_contents_count(); ?></span>
    <?php
        $fragments['li a span.count-cart'] = ob_get_clean();
    return $fragments;
}

enter image description here

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Обновлено

Лучше установить идентификатор тега, чем тег CLASS, чтобы отрегулировать счетчик корзины, поскольку эта ссылка на селектор должна быть уникальной. Если это не так, и есть скрытое дублированное меню мобильного телефона, оно не может работать.

Таким образом, это меню пункта должно быть уникальным для сгенерированного html-кода вашей страницы ... Если этот пункт меню продублирован в мобильной версии, вам потребуется изменить идентификатор тега или тег CLASS для версии мобильного кода.

Я немного пересмотрел ваш код:

add_filter( 'wp_setup_nav_menu_item','my_item_setup' );
function my_item_setup( $item ) {
    if ( ! is_admin() && class_exists( 'woocommerce' ) ) {
        if ( $item->url == esc_url( wc_get_cart_url() ) && ! WC()->cart->is_empty() ){
            $title = get_locale() == 'fr_FR' ? 'PANIER' : 'MY CART';
            $item->title = $title . ' (<span id="count-cart-items">' .  WC()->cart->get_cart_contents_count() . '</span>)';
        }
    }
    return $item;
}

add_filter( 'woocommerce_add_to_cart_fragments', 'wc_refresh_cart_fragments', 50, 1 );
function wc_refresh_cart_fragments( $fragments ){
    $cart_count = WC()->cart->get_cart_contents_count();

    // Normal version
    $count_normal = '<span id="count-cart-items">' .  $cart_count . '</span>';
    $fragments['#count-cart-items'] = $count_normal;

    // Mobile version
    $count_mobile = '<span id="count-cart-itemob">' .  $cart_count . '</span>';
    $fragments['#count-cart-itemob'] = $count_mobile;

    return $fragments;
}

Код помещается в файл function.php вашей активной дочерней темы (active theme). Это должно лучше работать.

0 голосов
/ 13 ноября 2018

Чтобы Ajaxify вашей корзины просмотра, чтобы он обновлялся, когда элемент добавляется или удаляется (через ajax), используйте:

/**
 * Show cart contents / total Ajax
 */
add_filter( 'woocommerce_add_to_cart_fragments', 'woocommerce_header_add_to_cart_fragment' );

function woocommerce_header_add_to_cart_fragment( $fragments ) {
    global $woocommerce;

    ob_start();

    ?>
    <a class="cart-customlocation" href="<?php echo esc_url(wc_get_cart_url()); ?>" title="<?php _e('View your shopping cart', 'woothemes'); ?>"><?php echo sprintf(_n('%d item', '%d items', $woocommerce->cart->cart_contents_count, 'woothemes'), $woocommerce->cart->cart_contents_count);?> - <?php echo $woocommerce->cart->get_cart_total(); ?></a>
    <?php
    $fragments['a.cart-customlocation'] = ob_get_clean();
    return $fragments;
} ?>

Ссылка Ссылка

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...