WordPress Notes WP-1

Отключение AJAX добавления товара в корзину WooCommerce на отдельных страницах

Проблема: необходимость отключить AJAX добавление товара в корзину

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

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

Если вы заметили, что при клике на кнопку "Добавить в корзину" страница не перезагружается, а корзина обновляется через AJAX, значит AJAX на добавление активен. Чтобы проверить, какие страницы задействуют AJAX:

  • Откройте консоль браузера (F12) на странице с товарами.
  • Нажмите кнопку "Добавить в корзину".
  • Если в Network запросах появляется ajax-запрос на /?wc-ajax=add_to_cart — используется AJAX.

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

Пошаговое решение: отключение AJAX добавления товара на конкретных страницах

WooCommerce управляет AJAX добавлением через скрипт add-to-cart, который подключается условно. Чтобы отключить AJAX, нужно убрать этот скрипт на нужных страницах.

1. Определите страницы для отключения AJAX

Например, отключим AJAX на странице магазина и странице категории с ID 12.

2. Добавьте следующий код в functions.php вашей темы или в кастомный плагин:

function disable_ajax_add_to_cart_on_selected_pages() {
    if ( is_shop() || is_product_category( 12 ) ) {
        wp_dequeue_script( 'wc-add-to-cart' );
        wp_dequeue_script( 'wc-add-to-cart-variation' );
    }
}
add_action( 'wp_enqueue_scripts', 'disable_ajax_add_to_cart_on_selected_pages', 100 );

Этот код снимает очередь скриптов, отвечающих за AJAX добавление, только на страницах магазина и категории с ID 12.

3. Обработка кнопок на отключённых страницах

После отключения AJAX добавления кнопки "Добавить в корзину" будут вести себя как обычные ссылки с перезагрузкой страницы. Убедитесь, что шаблон кнопок поддерживает класс add_to_cart_button с правильным URL.

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

  • Очистите кеш браузера и кеш сайта, если он есть.
  • Перейдите на страницы, где отключали AJAX.
  • Нажмите кнопку "Добавить в корзину" — страница должна перезагрузиться, а товар добавиться в корзину.
  • Проверьте вкладку Network в инструментах разработчика — ajax-запросы wc-ajax=add_to_cart не должны появляться.

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

  • Скрипты не отключаются: Проверьте приоритет хука wp_enqueue_scripts, он должен быть >= 100, чтобы переопределить предыдущие подключения.
  • Кнопка не работает: Убедитесь, что в шаблоне кнопка выводится с правильным атрибутом href на страницу корзины с параметром добавления товара.
  • AJAX работает на всех страницах: Проверьте условия в if (например, is_shop() и is_product_category()), возможно, нужно добавить больше условий или использовать другие условные теги.

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

  • Отключайте AJAX только там, где это действительно необходимо, чтобы не ухудшать UX.
  • Проверяйте совместимость с темой и плагинами после внесения изменений.
  • Используйте Child Theme для модификаций, чтобы избежать потери при обновлениях.
  • Для сложных условий используйте is_page(), is_singular() или пользовательские проверки.

Дополнительный чек-лист для внедрения

  1. Определить страницы, где нужно отключить AJAX.
  2. Добавить код с правильными условиями и приоритетом.
  3. Проверить работу кнопок и перезагрузку страницы.
  4. Тестировать на разных устройствах и браузерах.
  5. Обновлять документацию проекта с описанием изменений.
×
Прокачай свой WordPress!

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

Воспользоваться сейчас ⋙