В современных проектах на WordPress кэширование значительно ускоряет загрузку сайта и снижает нагрузку на сервер. Однако бывают ситуации, когда для определённых страниц кэширование нужно отключить. Например, это актуально для страниц с динамическим контентом, личным кабинетом, корзиной в WooCommerce или любой другой страницей, где данные часто меняются и должны отображаться в реальном времени.
Почему важно отключать кэширование на конкретных страницах
Кэширование — это сохранение готовой версии страницы, чтобы при следующем запросе сервер не генерировал её заново, а отдавал сохранённый вариант. Но если кэшировать страницы, где пользователь видит персональные данные или динамические элементы, есть риск показать устаревшую информацию.
Например, страница корзины в WooCommerce должна показывать актуальное содержимое, а не закэшированное состояние. Аналогично личный кабинет пользователя, формы с отзывами, страницы оплаты.
Отключение кэширования для таких страниц гарантирует корректное отображение данных и предотвращает ошибки в работе сайта.
Способы отключения кэширования для отдельных страниц WordPress
Отключение кэширования через плагины кэширования
Большинство популярных плагинов кэширования (WP Super Cache, W3 Total Cache, LiteSpeed Cache, WP Rocket) позволяют исключать из кэширования определённые URL или шаблоны страниц.
Например, в WP Rocket это делается следующим образом:
- Зайдите в настройки WP Rocket.
- Перейдите в раздел «Advanced Rules» (Расширенные правила).
- В поле «Never Cache URL(s)» добавьте пути страниц, для которых нужно отключить кэширование, например
/cart/или/my-account/.
Так вы исключите указанные страницы из кэширования без лишнего кода.
Отключение кэширования с помощью кода в functions.php
Если у вас нет возможности использовать настройки плагина или вы хотите более гибко управлять кэшированием, можно добавить код в файл functions.php вашей темы.
Пример функции, которая отключает кэширование для страниц с определённым ID или по условию:
function wpdream_disable_cache_for_specific_pages() {
if (is_page(array(42, 65)) || is_page_template('template-no-cache.php')) {
// Отключаем кэширование, посылая заголовки
nocache_headers();
// Также можно отключить кэш плагинов, если они это поддерживают через константы или фильтры
}
}
add_action('template_redirect', 'wpdream_disable_cache_for_specific_pages');
Здесь is_page(array(42, 65)) проверяет, что мы на одной из страниц с ID 42 или 65, а is_page_template — использует шаблон без кэша.
Функция nocache_headers() посылает заголовки, запрещающие кэширование браузером и прокси.
Отключение кэширования для WooCommerce с учетом корзины и личного кабинета
WooCommerce требует особого подхода, так как многие страницы должны быть всегда актуальными:
- Корзина
- Оформление заказа
- Мой аккаунт
Для этого можно добавить следующий код в functions.php:
function wpdream_disable_cache_for_woocommerce_pages() {
if (function_exists('is_woocommerce')) {
if (is_cart() || is_checkout() || is_account_page()) {
nocache_headers();
}
}
}
add_action('template_redirect', 'wpdream_disable_cache_for_woocommerce_pages');
Этот код гарантирует, что на ключевых страницах WooCommerce кэш не будет мешать корректной работе.
Как проверить, отключилось ли кэширование на странице
После внесения изменений важно убедиться, что кэш действительно отключён там, где нужно. Для этого:
- Откройте страницу в браузере в режиме инкогнито.
- Используйте инструменты разработчика (F12) и перейдите на вкладку «Сеть» (Network).
- Обновите страницу и проверьте заголовки ответа сервера. Если есть заголовки
Cache-Control: no-cacheилиPragma: no-cache, значит кэш отключён. - Также можно временно включить отладку плагина кэширования, если он поддерживает логи.
Дополнительные рекомендации по работе с кэшированием в WordPress
Кроме отключения кэширования на отдельных страницах, стоит учесть и другие моменты:
- Если используете плагин Clearfy Pro для оптимизации, в нём есть встроенные настройки для управления кэшированием, которые можно использовать совместно.
- Для сложных проектов с большим количеством динамических страниц лучше использовать объектное кэширование и кэширование на уровне сервера с исключениями.
- Обращайте внимание на кэширование на стороне CDN — нужно настроить исключения и там.
- Регулярно проверяйте, что кэш не мешает обновлению данных, особенно после внесения изменений в сайт.
Пример использования хука для отключения кэширования в плагине ABC Pagination
Если у вас на сайте используется плагин ABC Pagination для постраничной навигации и нужно, чтобы кэш не мешал обновлению страниц пагинации, можно добавить такой код:
function wpdream_disable_cache_for_abc_pagination() {
if (isset($_GET['abc_paged'])) {
nocache_headers();
}
}
add_action('template_redirect', 'wpdream_disable_cache_for_abc_pagination');
Это отключит кэширование для всех URL с параметром abc_paged, обеспечивая свежесть контента при переключении страниц.
Заключение
Отключение кэширования для отдельных страниц WordPress — важная задача для обеспечения корректной работы сайта с динамическим контентом. Используйте возможности плагинов кэширования, добавляйте собственный код в functions.php, учитывайте особенности WooCommerce и других плагинов. Правильная настройка кэширования улучшит пользовательский опыт и снизит вероятность ошибок.
Для удобного управления настройками и дополнительной оптимизации рекомендуем обратить внимание на плагины из WPShop.