Как настроить плагины кэширования для WooCommerce

Исключение страниц из кэша

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

  • Корзина
  • Мой аккаунт
  • Оформление заказа

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

Исключение сессии WooCommerce из кэша

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

Исключение cookies WooCommerce из кэша

Cookies WooCommerce используются для хранения товаров в корзине, сохранения данных корзины и работы блока «Недавно просмотренные товары». Ниже приведён список cookies, которые рекомендуется исключить из кэширования:

Название cookieСрок храненияНазначение
woocommerce_cart_hashсессияПозволяет WooCommerce определять изменения в корзине.
woocommerce_items_in_cartсессияПозволяет WooCommerce определять изменения в корзине.
wp_woocommerce_session_2 дняСодержит уникальный идентификатор клиента для хранения данных корзины в базе.
woocommerce_recently_viewedсессияИспользуется для блока «Недавно просмотренные товары».
store_notice[notice id]сессияПозволяет пользователю скрыть уведомление магазина.

Мы не можем охватить все варианты, но ниже приведены рекомендации для популярных плагинов кэширования.

W3 Total Cache (настройки минификации)

Добавьте mfunc в параметр Ignored comment stems в настройках минификации.

WP Rocket

WooCommerce полностью совместим с WP Rocket. Убедитесь, что страницы Корзина, Оформление заказа и Мой аккаунт исключены из кэширования.

Рекомендуется отключить минификацию JavaScript-файлов.

WP Super Cache

WooCommerce изначально совместим с WP Super Cache. Плагин автоматически передаёт данные, чтобы страницы Корзина, Оформление заказа и Мой аккаунт не кэшировались.

Varnish

if (req.url ~ "^/(cart|my-account|checkout|addons)") {
  return (pass);
}
if ( req.url ~ "\?add-to-cart=" ) {
  return (pass);
}

Устранение проблем

Почему конфигурация Varnish не работает?

Возможная причина — cookies. Они могут влиять на работу кэширования и мешать корректной конфигурации.

# Добавьте в vcl_recv перед "if (req.http.cookie) {"

# Удаляем cookies, кроме страниц WordPress и WooCommerce
if (!(req.url ~ "(wp-login|wp-admin|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) {
unset req.http.cookie;
}

# Пропускаем динамические страницы WooCommerce
if (req.url ~ "^/(cart|my-account/*|checkout|wc-api/*|addons|logout|lost-password|product/*)") {
return (pass);
}

# Пропускаем добавление товара в корзину
if (req.url ~ "\?add-to-cart=" ) {
return (pass);
}

# Пропускаем API WooCommerce
if (req.url ~ "\?wc-api=" ) {
return (pass);
}

# Блокируем доступ к системным страницам
if (req.url ~ "^/phpmyadmin/.*$" || req.url ~ "^/phppgadmin/.*$" || req.url ~ "^/server-status.*$") {
error 403 "Доступ запрещён по соображениям безопасности";
}

# Добавьте в vcl_fetch

# Удаляем cookies, кроме страниц WordPress и WooCommerce
if ( (!(req.url ~ "(wp-(login|admin)|login|cart|my-account/*|wc-api*|checkout|addons|logout|lost-password|product/*)")) || (req.request == "GET") ) {
unset beresp.http.set-cookie;
}

Почему сброс пароля зацикливается?

Это происходит, если страница Мой аккаунт кэшируется. Некоторые хостинги с серверным кэшированием не исключают её автоматически.

Если при сбросе пароля вас постоянно возвращает на страницу входа, обратитесь в поддержку хостинга и убедитесь, что эта страница исключена из кэша.

Поделиться с друзьями
Документация WooCommerce