wpcache.ru wordpress WPCache.ru

WooCommerce: как правильно обойти кэширование AJAX при обновлении корзины

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

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

Чтобы проверить, есть ли эта проблема, откройте консоль браузера и перейдите на страницу с корзиной WooCommerce. Добавьте товар, а затем посмотрите в Network вкладку, есть ли закэшированные ответы на AJAX запросы типа wc-ajax=get_refreshed_fragments. Если ответ приходит из кэша, скорее всего, вы столкнулись с проблемой.

Пошаговое решение: исключение AJAX запросов WooCommerce из кэширования

1. Определите используемый кэш-плагин

Самые популярные плагины кэширования: WP Super Cache, W3 Total Cache, WP Rocket, LiteSpeed Cache, и пр. Каждый из них имеет свои настройки исключений.

2. Добавьте исключения для AJAX запросов WooCommerce

Пример для WP Rocket: в настройках плагина в разделе "Дополнительные правила" добавьте исключение URL-путей, содержащих AJAX действия WooCommerce:

*/?wc-ajax=*

Это исключит из кэша все AJAX вызовы WooCommerce.

3. Исключение через functions.php для более тонкой настройки

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

add_action('init', function() {
    if (defined('DOING_AJAX') && DOING_AJAX) {
        // Проверяем, что это AJAX WooCommerce
        if (!empty($_REQUEST['wc-ajax'])) {
            // Отключаем кэширование страниц
            if (function_exists('wp_cache_disable')) {
                wp_cache_disable();
            }
            // Отключаем кэширование через любые другие методы
            nocache_headers();
        }
    }
});

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

После внесения изменений очистите весь кэш сайта и браузера. Зайдите в консоль разработчика (F12), перейдите в вкладку Network и добавьте товар в корзину. Убедитесь, что AJAX запрос wc-ajax=get_refreshed_fragments не возвращается из кэша (статус 200, без заголовков кэша)

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

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

  • Ошибка: Не добавлены исключения для всех AJAX запросов WooCommerce — решение: убедитесь, что в исключениях есть все вариации URL с параметром wc-ajax.
  • Ошибка: Кэширование на уровне сервера (например, Varnish, NGINX) не настроено — решение: добавьте правила исключений для URL с AJAX в конфигурацию сервера.
  • Ошибка: Использование устаревших плагинов кэширования без поддержки исключений — решение: обновите плагины или переключитесь на современные решения.
  • Ошибка: Кэширование на стороне CDN — решение: настройте CDN так, чтобы не кэшировал AJAX запросы WooCommerce.

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

  • Не отключайте кэширование полностью для страниц WooCommerce — это снизит производительность. Исключайте только AJAX запросы, связанные с динамическими обновлениями корзины.
  • Используйте Transients API для кэширования данных, которые не зависят от конкретного пользователя, чтобы снизить нагрузку.
  • Проверяйте на тестовом стенде все изменения, связанные с кэшированием, чтобы избежать потерь данных корзины и ошибок оформления заказа.
  • Если используете Redis или Memcached, убедитесь, что сессии WooCommerce корректно сохраняются и не конфликтуют с кэшированием.

Сравнение подходов к исключению AJAX из кэширования

МетодПлюсыМинусыПример
Исключение через настройки плагинаПросто, не требует кодаЗависит от возможностей плагинаWP Rocket: добавить */?wc-ajax=* в исключения
Программное отключение кэша в functions.phpГибко, работает с любым кэшомНужно уметь работать с кодомКод из раздела 2.3
Конфигурация сервера (NGINX, Varnish)Максимальная производительностьТребует доступа и опытаПравила в конфиге сервера
×
Обнови свой WordPress!

Держи скидку 15% на премиум тему Reboot

Купить со скидкой ⋙