Автоматическое обновление Ajax корзины в WooCommerce магазине
Недавно я публиковал инструкцию по настройке страницы корзины в WooCommerce, а сейчас хочу дополнить ее одним полезным «бонусом». По умолчанию в магазине после изменения количества заказанных товаров пользователю нужно кликать по кнопке «Обновить корзину». С одной стороны это вполне логичные действия — вы сначала выбираете определенные значения, а потом подтверждаете их. Кто-то для этих целей добавляет небольшие иконки напротив каждой позиции, другие используют общую кнопку, установленную изначально. Но можно поступить и третьим способом — внедрить в WooCommerce Ajax корзину с обновлением, которое выполняется автоматически при любых ее изменениях. Этим и займемся.
Как часто бывает в WP, есть 2 метода решения — через сниппеты или плагины. Перед тем как их рассмотреть пару слов о совместимости кода. В сети я находил разные варианты, но НЕ все они могут сработать в вашей ситуации:
- Во-первых, некоторые хаки ориентированы на прошлые версии WooCommerce (в частности 2.6.) и не подходят для последнего значимого релиза до 3.х, произошедшего в этом году.
- Во-вторых, иногда бывают конфликты с другими модулями/хаками.
Эти два момента нужно учитывать.
Автоматическое обновление корзины WooCommerce 2.6
Первый способ найден здесь. Он содержит скрипт, позволяющий обновить корзину WooCommerce автоматически при изменении количества товара (через ввод числа или стрелочки). Добавляете в function.php или другой файл, используемый вами для функций.
/** * Auto update cart after quantity change * * @return string **/ add_action( 'wp_footer', 'cart_update_qty_script' ); function cart_update_qty_script() { if (is_cart()) : ?> <script> jQuery('div.woocommerce').on('change', '.qty', function(){ jQuery("[name='update_cart']").trigger("click"); }); </script> <?php endif; } |
Я лично тестировал его на версии 2.6. — работает отлично. Тем не менее, в ветке обсуждения есть предположения, что в WooCommerce 3.х решение может глючить. Судя по всему, проблема в классе «qty», который разработчики убрали. Попробуйте заменить строку:
jQuery('div.woocommerce').on('change', '.qty', function(){ |
На такую:
jQuery('div.woocommerce').on('change', '.quantity .button', function(){ |
Либо скопируйте код полностью из обсуждения.
Автообновление обычной и мини корзины
Еще один вариант, найденный по ссылке, совместим с другим хаком, добавляющим AJAX подсчет товаров в мини корзину.
/** * Auto update cart after quantity change * * @return string **/ add_action( 'woocommerce_after_cart', 'custom_after_cart' ); function custom_after_cart() { echo '<script> jQuery(document).ready(function($) { var upd_cart_btn = $(".update-cart-button"); upd_cart_btn.hide(); $(".cart-form").find(".qty").on("change", function(){ upd_cart_btn.trigger("click"); }); }); </script>'; } |
Здесь интересен не сам код, который плюс-минус похож на предыдущий, а обсуждение под ним. Некоторые люди делились там своими правками, позволяющими сделать сниппет рабочим и в других ситуациях — возможно, вам пригодится. Данный метод я не тестировал, так как первый мне показался более толковым.
WooCommerce Ajax Cart Plugin
Репозиторий содержит несколько модулей Ajax корзины в WooCommerce, но лишь этот выглядит максимально профессиональным. Да, и оценки у него получше других — 4 балла на 4тыс. скачиваний + относительно недавнее обновление и частый багфикс.
Скачать WooCommerce Ajax Cart Plugin можно тут либо через поиск в админ панели. Плагин начинает работать сразу после активации без каких-либо действий. Вот как приблизительно это выглядит:
В целом Ajax обновление корзины улучшит юзабилити вашего интернет-магазина и позволит сразу видеть общую стоимость покупок при изменении количества товаров.
Как я уже сказал, после активации ничего дополнительного делать не нужно, однако в модуле есть парочка настроек. Найдете их в «Инструментах» — «Woo Ajax Cart»:
Здесь:
- Quantity buttons — показ в WooCommerce корзине дополнительных иконок/кнопок «+» и «-» сбоку от поля количества товаров;
- Quantity select — если я правильно понял, то это отображение числа продукции в поле типа «select» вместо числового/текстового блока.
- Quantity confirmation — вывод запроса на подтверждение удаления товара, если вы ставите количество = 0 (по умолчанию, система просто удаляет позицию).
Из всех опций, как по мне, самая последняя только и нужна — она отмечена сразу при установке плагина, значения двух других можете активировать самостоятельно.
Единственный недостаток этой Ajax корзины в Woocommerce — там нет локализации, поэтому придется самостоятельно добавлять переводы в исходный код.
Второй важный нюанс (!) — для реализации автоматического обновления корзины на странице должна быть кнопка «Обновить корзину». Без нее никакой Ajax скрип срабатывать не будет.
Если вы считаете, что данная кнопка отвлекает пользователя и теперь она, по сути, лишняя, то можете скрыть ее через CSS стиль display: none; но в HTML коде данная конструкция должна быть.
Если у вас есть что дополнить про сниппеты/модули Woocommerce для Ajax обновления корзины, пишите ниже.
комментариев 16 к статье “Автоматическое обновление Ajax корзины в WooCommerce магазине”
Блог Wordpress Inside поможет вам научиться работать в вордпресс, закрепить и расширить имеющиеся знания. Плагины и шаблоны, разные хаки и функции wp, оптимизация и безопасность системы – все это и намного больше вы сможете найти на страницах нашего проекта!
Если хотите быстро и оперативно получать последние новости и статьи, то рекомендуем подписаться на обновления блога:
- Як сховати відсутні товари в Woocommerce шорткодах та схожих товарах
- Сервіс AdMaven + плагін для монетизації трафіка на WordPress сайтах
- Плагіни для створення стрічки новин з біжучим рядком в WordPress
- Як змінити розміщення кнопки оформлення замовлення в WooCommerce
- Плагін WHWS Display In Stock Products First – відображення товарів в наявності першими
- Підписка MonsterONE: чи варто використовувати цей сервіс у 2023 році? (+5 продуктів, які треба скачати в першу чергу)
- Онлайн генератор ссылок на мессенджеры для WordPress и не только
- WooCommerce (46)
- Безопасность (12)
- Видео (6)
- Виджеты (28)
- Возможности (141)
- Вопрос-ответ (6)
- Начинающим (52)
- Новости (46)
- Оптимизация (23)
- Плагины (246)
- Сервисы (87)
- Хаки и секреты (87)
- Шаблоны (45)
- Дизайн Мания - о веб-дизайне и не только.
- Tod's Blog - все про заработок онлайн.
- Вебдванольные заметки - обзоры веб-сервисов.
- Советы по выбору холодильника LG с технологией No Frost
- Зачем нужны Wi-Fi ретрансляторы и как выбрать подходящую модель
- Введение в онлайн-казино Slotor777: многообразие игр и привлекательные бонусы
- Необходимость использования облачного хранилища в наше время, что важно и как выгодно?
- Спрощення процесу звітності за допомогою програми BAS Бухгалтерія
- Технологія підключення інтернету GPON та її переваги
- За що гравці найбільше цінують Lineage 2
- Для каких проектов нужна аренда виртуального сервера и что такое VPS
Тоже думаю, что Ajax корзина поярче будет смотреться, хотя всегда есть 1-2 человека, которые не разберутся в ситуации.
Спасибо!!
Подскажите пожалуйста где искать и перевести Proceed to Checkout , после прибавления товара получается не оформить а Proceed to Checkout
Сергей, тут есть нюансы. По умолчанию переводы WooCommerce находятся в wp-content/languages/plugins/woocommerce-ru_RU.po — посмотрите там. Но ведь в самом модуле есть локализация, странно что она не срабатывает. Бывают ситуации, когда фразы на сайте добавляются через шаблон или другой плагин — тогда нужно разбираться как именно это реализовано. В крайнем случае, если ничего не получается, используйте быстрый перевод с gettext.
Добрый день Может кто сталкивался. После установки плагина WooCommerce Ajax Cart
Все работает отлично. С переводом тоже разобрался. НО!
У меня идут в корзине кросселы и при обновление цены через плюс или минус, эти кросселы появлябтся еще и правее (там где должно быть перейти к оформлению). и так же находятся под самой корзиной. ТО есть их сразу 2.
Никакие кэш плагины не использую
Если же обновить страницу, то все становится нормально.
Может кто что подскажет как быть
Сергей, я не сталкивался с этим, но делал бы следующим образом: 1) гуглить на английском, 2) искать место куда они появляются (вероятно там какой-то хук указан), после чего прогнал бы поиск по названию хука в файлах модуля WooCommerce Ajax Cart вдруг там он где-то дополнительно вызывается (срабатывает по событию).
Добрый вечер! Есть проблема, которую никто не может решить. Может вы мне поможете в этом вопросе. Я хочу что бы после нажатия кнопки *добавить в корзину* товар добавился в корзину, а клиент остался в той же рубрике и на том товаре что он добавил в корзину. А у меня перекидывает сразу совсем в другое меню, в каталог товаров. Клиент например добавил в корзину шорты и что бы ему добавить к примеру футболку с этой же рубрики, ему нужно снова войти в каталог товаров — детская одежда — шорты и футболки.
Нажимаю фунцкцию ajax — сохранить изменения. Пишет *Ваши настройки сохранены*. Выхожу с этого меню. И когда снова захожу галочка напротив ajax уже не стоит. С кнопкой *Перенаправить в корзину после успешного добавления* тоже самое. Тема Spacious от ThemeGrill. Активные плагины стоят: All In One SEO Pack, Contact Form 7,WooCommerce Direct Checkout,WooCommerce,VKMarket for WooCommerce,Saphali Woocommerce Russian,Orbit Fox Companion
Ирина, по описанию похоже на то, что какой-то модуль или сама тема создают данный глюк. Я бы на вашем месте сначала попробовал сменить шаблон на другой и проверить будет ли работать эта функция, а затем убрать лишние плагины, оставив только магазин. Если после этих тестов все равно будет перебрасывать в ненужное место, то возможно это баг (временный) самого WooCommerce. Тогда без заказа доработки на фрилансе не решить проблему.
Здравствуйте, а есть такое же решение для карточки товара? Чтобы при изменении кол-ва товара через плюс или минус, цена менялась, чтобы клиент видел сколько он заплатит за 2 или 3 единицы этого товара…
Подскажите пожалуйста, третий день ищу и все в пустую..
Заранее спасибо.
Александр, я такого кода не нашел, встречал, какой-то модуль и позволяет так сделать. Это решение работает, т.к. на странице корзины изначально есть кнопка «обновить» и, насколько я понимиаю, Ajax решение просто автоматически нажимает.
Нашел код который обновляет цену в карточке товара в зависимости от выбранного кол-ва единиц.
// we are going to hook this on priority 31, so that it would display below add to cart button.
add_action( ‘woocommerce_single_product_summary’, ‘woocommerce_total_product_price’, 31 );
function woocommerce_total_product_price() {
global $woocommerce, $product;
// let’s setup our divs
echo sprintf(‘%s %s’,__(‘Product Total:’,’woocommerce’),».$product->get_price().»);
echo sprintf(‘%s %s’,__(‘Cart Total:’,’woocommerce’),».$product->get_price().»);
?>
jQuery(function($){
var price = get_price(); ?>,
current_cart_total = cart->cart_contents_total; ?>,
currency = »;
$(‘[name=quantity]’).change(function(){
if (!(this.value < 1)) {
var product_total = parseFloat(price * this.value),
cart_total = parseFloat(product_total + current_cart_total);
$('#product_total_price .price').html( currency + product_total.toFixed(2));
$('#cart_total_price .price').html( currency + cart_total.toFixed(2));
}
$('#product_total_price,#cart_total_price').toggle(!(this.value <= 1));
});
});
<?php
}
Но в коде есть проблема, с цены пропадает разделитель тысяч, может вы поможете его вернуть? ;)
Александр, код разбирать времени, к сожалению, нет. Я бы присмотрелся/потестил функции parseFloat и toFixed — судя по всему, именно они преобразуют числовые значения цен.
Установил этот код и выходит следующее.
Автоматическое обновление корзины происходит только на второй клик.
То есть:
Если в корзине 1 единица, я жму на Плюс выбирается уже 2 единицы, но ничего не происходит, но как только я жму на плюс еще раз (уже 3 единицы) сразу идет автоматическое обновление корзины…
Это проблема с кодом или с моим магазином?
Заранее спасибо!
Александр, нужно вернуть на время шаблон по умолчанию + отключить лишние модули кроме магазина дабы понять настояющую причину глюка — если и в том случае все будет работать со второго раза, то проблема в коде/хаке.
Сделал как вы говорите, проблема такая же, срабатывает со второго раза(
Александр, значит проблема в данном решении. Попробуйте уточнить в комментах на сайте у автора хака почему так происходит. Я, если честно, без понятия.