В процессе разработки и поддержки сайтов на WordPress часто возникает необходимость отключить кеширование для отдельных страниц, пользователей или при определённых условиях. Однако простое отключение кеша полностью или выборочное отключение без продуманной оптимизации может привести к значительному падению производительности сайта и увеличению нагрузки на сервер.
Почему важно оптимизировать отключение кеша?
Кеширование — это один из наиболее эффективных способов ускорить загрузку сайта, снизить нагрузку на базу данных и сервер. Однако бывают ситуации, когда кеширование мешает отображению актуального содержимого, например, на страницах с динамическими данными, корзинами интернет-магазина или формами с персонализированным выводом.
Полное отключение кеша приводит к тому, что каждый запрос обрабатывается сервером с нуля, что сильно замедляет работу сайта, особенно при высокой посещаемости. Оптимизация отключения кеша позволяет сохранить производительность на остальных страницах, а критичным — отключить кеш только там, где это необходимо.
Основные методы выборочного отключения кеша в WordPress
Для гибкого управления кешем применяют несколько подходов:
- Исключение URL и страниц из кеширования: большинство плагинов кэширования позволяют указать адреса, где кеш не применяется. Например, WooCommerce автоматически исключает страницы корзины и оформления заказа.
- Отключение кеша для авторизованных пользователей: кэширование обычно полезно только для гостей, потому что у залогиненных пользователей вывод часто уникален.
- Использование условий в шаблонах или плагинах: динамическое отключение кеша с помощью кода, например, с проверкой пользовательских ролей или параметров запроса.
- Использование AJAX и динамической подгрузки данных: вместо отключения кеша для всей страницы, выводить динамические данные через AJAX-запросы.
Пример исключения страниц из кеша в плагине WP Super Cache
В админке WP Super Cache можно добавить URL в поле Advanced > Never cache the following pages. Например:
/cart/
/checkout/
/my-account/
Так эти страницы всегда будут загружаться без кеша, а остальные — кешироваться.
Пример кода для выборочного отключения кеша на уровне шаблона
Если вы используете собственный плагин или functions.php, можно реализовать функцию с префиксом wpcache_ для отключения кеша по условию:
function wpcache_disable_cache_for_logged_in_users() {
if ( is_user_logged_in() ) {
// Отключаем кеш, если пользователь залогинен
define('DONOTCACHEPAGE', true);
}
}
add_action('template_redirect', 'wpcache_disable_cache_for_logged_in_users');
В этом примере мы устанавливаем специальную константу DONOTCACHEPAGE, которую понимают многие плагины кеширования и не кешируют страницу.
Отключение кеша для AJAX-запросов
Если на сайте активно используются AJAX, то важно, чтобы эти запросы не кешировались:
function wpcache_no_cache_for_ajax() {
if ( defined('DOING_AJAX') && DOING_AJAX ) {
define('DONOTCACHEPAGE', true);
}
}
add_action('init', 'wpcache_no_cache_for_ajax');
Советы по оптимизации отключения кеша
Для минимизации негативного влияния на скорость сайта при отключении кеша рекомендуем:
- Отдавать динамические части страниц через AJAX, оставляя остальной контент кешируемым.
- Использовать Transients API для хранения промежуточных результатов и уменьшения нагрузки.
- Использовать Object Cache (например, Redis, Memcached) для ускорения запросов к базе данных, даже если отключён page cache.
- Минимизировать количество страниц без кеша — отключайте кеш только там, где это действительно нужно.
Практический пример с AJAX для динамической корзины
Предположим, у нас интернет-магазин, и мы хотим отображать количество товаров в корзине в шапке сайта без отключения кеша всей страницы. Решение — вывести количество через AJAX.
JavaScript для обновления счётчика корзины:
jQuery(document).ready(function($) {
function wpcache_update_cart_count() {
$.ajax({
url: wpcache_ajax_object.ajax_url,
type: 'POST',
data: {
action: 'wpcache_get_cart_count'
},
success: function(response) {
$('#cart-count').text(response);
}
});
}
wpcache_update_cart_count();
});
PHP-код в functions.php для обработки AJAX-запроса:
function wpcache_get_cart_count() {
if ( function_exists('WC') ) {
$count = WC()->cart->get_cart_contents_count();
echo intval($count);
} else {
echo '0';
}
wp_die();
}
add_action('wp_ajax_wpcache_get_cart_count', 'wpcache_get_cart_count');
add_action('wp_ajax_nopriv_wpcache_get_cart_count', 'wpcache_get_cart_count');
Для передачи AJAX URL в JS добавим:
function wpcache_enqueue_scripts() {
wp_enqueue_script('jquery');
wp_localize_script('jquery', 'wpcache_ajax_object', array(
'ajax_url' => admin_url('admin-ajax.php')
));
}
add_action('wp_enqueue_scripts', 'wpcache_enqueue_scripts');
Таким образом, мы не отключаем кеш страницы, но динамическая часть обновляется корректно.
Использование плагинов для гибкого управления кешем
Для профессионального управления кешем можно рассмотреть плагины с расширенными возможностями по исключению кеша:
- Clearfy Pro — в том числе имеет удобные настройки исключений кеша.
- WP Rocket — позволяет легко исключать страницы и отключать кеш для залогиненных.
- LiteSpeed Cache — гибкая система исключений, поддержка AJAX.
Выбирайте плагин, который лучше всего интегрируется с вашим хостингом и требованиями сайта.