Исключение страниц из кэша
Часто плагины кэширования уже автоматически исключают эти страницы. Если это не так — убедитесь, что вы добавили их в исключения в настройках кэширования.
- Корзина
- Мой аккаунт
- Оформление заказа
Эти страницы должны оставаться динамическими, так как показывают данные конкретного пользователя и его корзины.
Исключение сессии 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;
} Почему сброс пароля зацикливается?
Это происходит, если страница Мой аккаунт кэшируется. Некоторые хостинги с серверным кэшированием не исключают её автоматически.
Если при сбросе пароля вас постоянно возвращает на страницу входа, обратитесь в поддержку хостинга и убедитесь, что эта страница исключена из кэша.
