Показать количество корзин WooCommerce за пределами Wordpress

У меня уже есть полноценный веб-сайт. Я установил Wordpress в подкаталог (/ shop) и использую WooCommerce для продажи продуктов.

На странице магазина в верхней строке меню отображается значок корзины, показывающий количество продуктов в корзине.

Я бы хотел, чтобы, когда пользователь снова нажимает на страницы сайта, не относящиеся к Wordpress, продолжал показывать количество товаров в корзине. Может ли кто-нибудь указать мне правильное направление? Я попытался включить основной класс class-woocommerce.php, но он не работает.

Вот что я использовал для тестирования в своем файле index.php:

include 'shop/wp-content/plugins/woocommerce/includes/class-woocommerce.php';
global $woocommerce;
var_dump($woocommerce->cart);

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

Теперь я включил wp-load.php вместо class-woocommerce.php, и когда я сбрасываю корзину WooCommerce, я вижу ее, но она полностью пуста, то есть в ней 0 элементов, хотя в корзину были помещены элементы.


person Sio    schedule 11.01.2018    source источник


Ответы (1)


Обновление:

Это также можно сделать, установив собственный файл cookie или, лучше, используя хранилище сеанса javascript следующим образом:

add_action('wp_footer', 'custom_cart_item_count_script');
function custom_cart_item_count_script(){
    if( WC()->cart->is_empty() )
        $cart_count = 0;
    else
        $cart_count = WC()->cart->get_cart_contents_count();

    if(isset($cart_count)){
    ?>
        <script type="text/javascript">
            jQuery(function($){
                var cartCount = <?php echo $cart_count; ?>,
                    csName = 'CARTCOUNT',
                    csStorage = sessionStorage.getItem(csName);

                if(csStorage == null || csStorage == 'undefined'){
                    sessionStorage.setItem(csName, cartCount);
                    console.log(sessionStorage.getItem(csName));
                }
            });
        </script>
    <?php
    }
}

Этот код находится в файле function.php вашей активной дочерней темы (или активной темы).

Проверено и работает.


На страницах, отличных от Wordpress:

Вам нужно будет получить это значение хранилища сеанса браузера. поэтому вы добавите что-то вроде следующего на свои страницы, отличные от Wordpress:

?>
    <script type="text/javascript">
        jQuery(function($){
            var caName = 'CARTCOUNT',
                caStorage = sessionStorage.getItem(caName);

            if(caStorage == null || caStorage == 'undefined')
                $('span.cart-count').html('0');
            else
                $('span.cart-count').html(caStorage);

            console.log('css-read: '+caStorage);
        });
    </script>
    <p>Cart count: <span class="cart-count"></span></p>
<?php

Проверено и работает:

person LoicTheAztec    schedule 11.01.2018
comment
Привет, спасибо за помощь. Это сработало! Для тех, кто ищет то же самое, мне также пришлось добавить: define ('ADMIN_COOKIE_PATH', '/'); определить ('COOKIEPATH', '/'); определить ('SITECOOKIEPATH', '/'); до: require_once (ABSPATH. 'wp-settings.php'); в файле config.php, чтобы файл cookie был доступен в родительском каталоге. Но у меня все еще проблема. Кажется, что cookie хранит только количество отдельных элементов, а не кратное одному и тому же элементу. Если, например, в корзине 4 одинаковых товара, в файле cookie по-прежнему отображается только 1. Есть идеи, как я могу получить общее количество всех предметов? Спасибо - person Sio; 11.01.2018
comment
@Sio Я рада за тебя ... Думаю, с печеньками так же можно поступать, но это более капризно. может быть, вы можете удалить эти старые ненужные комментарии раньше, пожалуйста. Спасибо - person LoicTheAztec; 12.01.2018