Как создать эффективный кэш в WordPress своими руками

Что такое кэширование и почему оно важно для скорости WordPress

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

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

Существуют разные типы кэша: кэш страниц, кэш объектов, кэш запросов к базе данных и кэш браузера. В этой статье мы подробно разберём, как вручную создать простой и эффективный кэш страниц, а также рассмотрим полезные плагины для расширенного кэширования.

Создание простого кэша страниц в WordPress своими руками

Принцип работы простого файлового кэша

Идея простого кэша — сохранить сгенерированную HTML-страницу в файл на сервере при первом запросе, а при следующих запросах отдавать этот файл, не выполняя PHP и не обращаясь к базе данных. Такой подход значительно ускоряет загрузку и снижает нагрузку.

Реализация кэша сводится к проверке, существует ли уже кэш-файл для текущего URL, и если да — выводить его содержимое. Если нет — генерировать страницу, сохранять в кэш и отдавать.

Пример простого кэширования в functions.php

Добавьте следующий код в functions.php вашей темы или в отдельный плагин:

function wpspeed_start_cache() {
    if(!is_user_logged_in()) { // Не кэшируем для админов
        $cache_dir = WP_CONTENT_DIR . '/cache/wpspeed/';
        if(!file_exists($cache_dir)) {
            mkdir($cache_dir, 0755, true);
        }
        $cache_file = $cache_dir . md5($_SERVER['REQUEST_URI']) . '.html';

        if(file_exists($cache_file) && (filemtime($cache_file) + 3600) > time()) {
            // Кэш существует и не устарел - отдаем содержимое
            echo file_get_contents($cache_file);
            exit;
        } else {
            // Начинаем буферизацию вывода
            ob_start();
        }
    }
}
add_action('template_redirect', 'wpspeed_start_cache', 0);

function wpspeed_end_cache() {
    if(!is_user_logged_in() && ob_get_length()) {
        $cache_dir = WP_CONTENT_DIR . '/cache/wpspeed/';
        $cache_file = $cache_dir . md5($_SERVER['REQUEST_URI']) . '.html';
        $content = ob_get_contents();
        file_put_contents($cache_file, $content);
        ob_end_flush();
    }
}
add_action('shutdown', 'wpspeed_end_cache');

Этот код создаёт папку wp-content/cache/wpspeed/ и сохраняет кэшированные HTML-файлы с именами, основанными на URL. Кэш обновляется каждый час (3600 секунд). Такой простой кэш отлично подходит для сайтов с преимущественно статическим контентом.

Расширенные способы кэширования в WordPress

Объектный кэш и его преимущества

Объектный кэш хранит результаты запросов к базе данных в памяти (например, в Redis или Memcached), чтобы при повторных запросах не обращаться к БД. Это особенно эффективно для динамичных сайтов с частыми запросами к базе.

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

Рекомендуемые плагины для кэширования

  • WP Super Cache — популярный бесплатный плагин для кэширования страниц с простыми настройками.
  • W3 Total Cache — мощный плагин с поддержкой кэширования страниц, объектов, базы данных и CDN.
  • LiteSpeed Cache — плагин, оптимизированный для серверов LiteSpeed, с функциями кэширования и оптимизации.
  • Redis Object Cache — интегрирует WordPress с Redis для объектного кэша.

Выбор плагина зависит от вашего хостинга и специфики сайта. Если у вас есть доступ к Redis или Memcached, обязательно используйте объектный кэш для повышения производительности.

Советы по оптимизации и отладке собственного кэша

Как избежать проблем с кэшированием динамического контента

При использовании кэширования важно не кэшировать страницы с персонализированным контентом, например, личные кабинеты, корзины, страницы с формами. В нашем примере мы исключили кэширование для авторизованных пользователей.

Если в шаблонах есть блоки, которые должны обновляться динамически (например, счётчик товаров в корзине), можно реализовать AJAX-запросы для их обновления после загрузки страницы из кэша.

Как очистить кэш вручную и автоматически

В простом файловом кэше можно добавить функцию для очистки всех кэшированных файлов, например, через админку или при обновлении записи. Вот пример функции очистки:

function wpspeed_clear_cache() {
    $cache_dir = WP_CONTENT_DIR . '/cache/wpspeed/';
    if(is_dir($cache_dir)) {
        $files = glob($cache_dir . '*.html');
        foreach($files as $file) {
            unlink($file);
        }
    }
}

Эту функцию можно вызывать вручную или по событию, например, при обновлении записи в WordPress через хук save_post.

Автоматическая очистка кэша при публикации поможет всегда показывать свежий контент.

WooCommerce: решение проблемы замедления отображения страницы товара при большом количестве вариаций
17.05.2026
Как отложить загрузку требующих ресурсов в WordPress для ускорения сайта
12.01.2026
Оптимизация внешних шрифтов в WordPress без задержек загрузки
04.01.2026
Оптимизация PHP-FPM для ускорения WordPress
06.02.2026
WooCommerce: решение проблемы замедления страницы поиска при большом количестве товаров
01.07.2026