wpmoney.ru wordpress WP Money

Как отключить AJAX обновление страницы корзины в WooCommerce

Что такое AJAX обновление корзины в WooCommerce и зачем его отключать

WooCommerce по умолчанию использует AJAX для обновления содержимого корзины без полной перезагрузки страницы. Это удобно для пользователей, но в некоторых случаях может вызывать конфликты с кастомным JavaScript, замедлять страницу или мешать аналитике. Если вы сталкиваетесь с проблемами в работе корзины или хотите упростить поведение, отключение AJAX обновления — точечное решение.

Диагностика проблемы: как понять, что AJAX обновление мешает

  • При изменении количества товара в корзине страница не обновляется, а содержимое корзины не изменяется корректно.
  • Появляются JavaScript ошибки в консоли (например, конфликт с кастомными скриптами).
  • Google Analytics или другие системы аналитики не фиксируют изменения в корзине.
  • Пользователь жалуется, что кнопка "Обновить корзину" не работает или работает с багами.

Пошаговое решение: отключаем AJAX обновление корзины

Для отключения AJAX обновления корзины нужно убрать соответствующие скрипты и отключить обработчики WooCommerce. Добавьте следующий код в functions.php вашей темы (лучше в дочерней) или в кастомный плагин:

add_filter('woocommerce_is_cart', function($is_cart) {
    // Отключаем AJAX обновление на странице корзины
    if (is_cart()) {
        remove_action('wp_footer', [WC()->cart, 'fragments_refresh']);
    }
    return $is_cart;
});

// Отключаем обновление корзины AJAX при изменении количества
add_filter('woocommerce_cart_item_quantity', function($quantity_html, $cart_item_key, $cart_item) {
    // Заменяем input с data-атрибутами на обычный input для полной перезагрузки
    $product_quantity = sprintf(
        '<input type="number" name="cart[%s][qty]" value="%s" min="1" />',
        esc_attr($cart_item_key),
        esc_attr($cart_item['quantity'])
    );
    return $product_quantity;
}, 10, 3);

Этот код убирает AJAX обновление корзины и возвращает стандартное поведение с кнопкой "Обновить корзину".

Как убрать AJAX для кнопки "Добавить в корзину" на странице товаров

Если нужно отключить AJAX для кнопки "Добавить в корзину" (например, чтобы избежать двойных добавлений или конфликтов), добавьте:

add_filter('woocommerce_product_add_to_cart_url', function($url, $product) {
    // Удаляем ?add-to-cart= из URL для отключения AJAX
    return remove_query_arg('add-to-cart', $url);
}, 10, 2);

Проверка результата

  • Обновите страницу корзины, измените количество товара и нажмите кнопку "Обновить корзину" — страница должна полностью перезагрузиться.
  • Проверьте, что в консоли браузера больше нет ошибок, связанных с AJAX.
  • Убедитесь, что аналитика фиксирует изменения в корзине при обновлении страницы.
  • Проверьте, что кнопка "Добавить в корзину" на странице товара работает без AJAX (страница перезагружается).

Частые ошибки и их исправление

  • Ошибка: AJAX обновление не отключилось.
    Причина: Код добавлен в неправильное место или кэш не очищен.
    Решение: Добавьте код в functions.php активной дочерней темы, очистите кэш браузера и кеш плагинов.
  • Ошибка: Кнопка "Обновить корзину" не работает.
    Причина: Конфликт с другими плагинами, которые перехватывают действия.
    Решение: Отключите другие плагины по очереди для проверки и найдите конфликт.
  • Ошибка: Изменения количества не применяются.
    Причина: Формы корзины изменены сторонними плагинами.
    Решение: Проверьте структуру формы корзины, верните стандартные input и name атрибуты.

Практические советы по безопасности и производительности

  • Отключение AJAX может увеличить нагрузку на сервер из-за полной перезагрузки страниц. Убедитесь, что сервер справляется с трафиком.
  • Если отключаете AJAX из-за конфликтов, лучше выявить и устранить корень проблемы, а не просто отключать функционал.
  • Регулярно тестируйте корзину после обновлений WooCommerce и темы, чтобы убедиться, что изменения не сломались.

Сравнение способов отключения AJAX в WooCommerce

СпособОписаниеПлюсыМинусы
Удаление скриптов через functions.phpОтключение AJAX обновления корзины и кнопкиПолный контроль, быстрое решениеУвеличение нагрузки на сервер, потеря UX
Использование плагинов-оптимизаторовПлагины для управления AJAX или кешамиУдобство, дополнительные функцииМогут конфликтовать, нагрузка
Исправление конфликтов скриптовРешение проблем с кастомным JS и плагинамиСохраняет AJAX, лучший UXТребует времени и навыков
×
Сделай свой сайт крутым!

Скидка -20% на премиум плагины WordPress

Выбрать плагин сейчас ⋙