Как удалить или изменить WooCommerce AJAX корзину без плагинов

Диагностика проблемы с AJAX корзиной WooCommerce

Многие разработчики сталкиваются с необходимостью отключить или кастомизировать AJAX обновление корзины в WooCommerce. Чаще всего это связано с конфликтами JS, кастомным дизайном темы или необходимостью изменить логику обновления корзины без использования сторонних плагинов. Чтобы понять, есть ли AJAX корзина в работе, нужно проверить:
— При добавлении товара в корзину страница не перезагружается.
— В консоли браузера нет ошибок JavaScript.
— В сетевых запросах (Network) происходит AJAX-запрос на /?wc-ajax=add_to_cart или подобные.

Если AJAX корзина не работает, то проблема либо в конфликте JS, либо в отключении в настройках WooCommerce.

Пошаговое удаление AJAX корзины WooCommerce

1. Отключение AJAX в настройках темы

Некоторые темы добавляют поддержку AJAX корзины с помощью хука wp_enqueue_script. Для начала нужно проверить, не добавляет ли тема скрипт wc-add-to-cart. Если да — отключаем его так:

function disable_wc_ajax_add_to_cart_script() {
    wp_dequeue_script('wc-add-to-cart');
    wp_deregister_script('wc-add-to-cart');
}
add_action('wp_enqueue_scripts', 'disable_wc_ajax_add_to_cart_script', 100);

2. Отключение AJAX в настройках WooCommerce

В WooCommerce в разделе Настройки > Товары > Общие есть опция Включить AJAX для кнопки "Добавить в корзину" на архивных страницах. Если её выключить, AJAX запросы не будут выполняться на страницах магазина.

3. Удаление AJAX обработчиков из PHP

WooCommerce регистрирует AJAX обработчики для корзины. Можно удалить эти хуки, чтобы полностью отключить AJAX:

remove_action('wp_ajax_woocommerce_add_to_cart', 'wc_ajax_add_to_cart');
remove_action('wp_ajax_nopriv_woocommerce_add_to_cart', 'wc_ajax_add_to_cart');

Добавьте этот код в файл functions.php вашей темы или в кастомный плагин.

Как изменить поведение AJAX корзины WooCommerce

1. Кастомизация ответа AJAX

Если нужно изменить данные, которые возвращает AJAX при добавлении товара, создайте свою функцию и переопределите AJAX обработчик:

add_action('wp_ajax_woocommerce_add_to_cart', 'custom_wc_ajax_add_to_cart');
add_action('wp_ajax_nopriv_woocommerce_add_to_cart', 'custom_wc_ajax_add_to_cart');

function custom_wc_ajax_add_to_cart() {
    // Ваш кастомный код добавления в корзину
    $product_id = apply_filters('woocommerce_add_to_cart_product_id', absint($_POST['product_id']));
    $quantity = empty($_POST['quantity']) ? 1 : wc_stock_amount($_POST['quantity']);

    $added = WC()->cart->add_to_cart($product_id, $quantity);

    if ($added) {
        // Возвращаем кастомный ответ
        wp_send_json_success(array(
            'message' => 'Товар успешно добавлен!',
            'cart_count' => WC()->cart->get_cart_contents_count(),
        ));
    } else {
        wp_send_json_error(array('message' => 'Ошибка при добавлении товара'));
    }

    wp_die();
}

2. Изменение фронтенд-сценария

Для изменения поведения после AJAX-запроса можно переопределить jQuery-обработчик кнопки добавления в корзину:

jQuery(function($) {
    $(document.body).off('added_to_cart'); // Убираем стандартный обработчик
    $(document.body).on('added_to_cart', function(event, fragments, cart_hash, $button) {
        alert('Товар добавлен! Можно добавить свою логику');
        // Например, обновить количество товаров в пользовательском блоке
        var count = fragments['div.widget_shopping_cart_content'].match(/cart-contents-count">(\d+)</);
        if(count) {
            $('#my-cart-count').text(count[1]);
        }
    });
});

Проверка результата после внедрения изменений

  • Добавьте товар в корзину на странице каталога и убедитесь, что страница не перезагружается (если AJAX включён) или перезагружается (если отключён).
  • Проверьте в инструментах разработчика браузера вкладку Network, что AJAX запросы отправляются или отсутствуют — в зависимости от цели.
  • В консоли не должно быть ошибок JavaScript.
  • Если кастомизировали ответ — проверьте, что возвращаемый JSON соответствует ожиданиям и фронтенд корректно реагирует.

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

  • Конфликты JavaScript: Если после отключения стандартного скрипта появляются ошибки, проверьте, не зависит ли другой JS код темы от этих функций. Используйте wp_dequeue_script с осторожностью и тестируйте.
  • Кэширование: После изменений в AJAX обработчиках очистите кеш сайта и браузера, чтобы избежать загрузки старых скриптов.
  • Неверный AJAX URL: Убедитесь, что AJAX запросы идут на правильный URL — обычно admin-ajax.php в WordPress.
  • Ошибки в PHP-коде: При переопределении функций AJAX добавьте wp_die() в конце обработчика, иначе может быть некорректный вывод.

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

  • Всегда проверяйте и фильтруйте входные данные в AJAX обработчиках с помощью absint(), sanitize_text_field() и других функций.
  • Минимизируйте количество AJAX запросов — избыточные запросы замедляют сайт и создают нагрузку на сервер.
  • Используйте wp_localize_script() для передачи AJAX URL и nonce в JS, чтобы предотвратить CSRF атаки.
  • Кэшируйте результаты запросов, если данные не меняются часто, чтобы снизить нагрузку на сервер.

Сравнение вариантов отключения или кастомизации AJAX корзины

МетодПлюсыМинусыКогда использовать
Отключение скрипта wc-add-to-cartПростое решение без изменений ядраМожет сломать другие функции, зависящие от этого скриптаЕсли конфликтует тема или нужен полный отказ от AJAX
Отключение опции в настройках WooCommerceЛегко и безопасноРаботает только для архивных страницДля базовой деактивации AJAX
Удаление AJAX обработчиков PHPПолный контроль над AJAXТребует кастомного кода, может вызвать ошибкиДля глубокой кастомизации и создания собственного AJAX
Переопределение AJAX обработчиковМаксимальная гибкостьСложнее в реализацииДля сложных кастомных сценариев
Как настроить отображение разных типов записей в теме WordPress
05.01.2026
Как создать настройку темы WordPress в админке через Customizer API
29.11.2025
Как создать динамический виджет в WordPress
26.11.2025
Как убрать типичные PHP warnings и ошибки WooCommerce в теме WordPress
16.05.2026
Как использовать хуки для динамического изменения вывода WooCommerce в теме WordPress
12.05.2026