Оптимизация кеширования — одна из ключевых задач для повышения производительности сайта на WordPress. Несмотря на популярность готовых решений, иногда требуется создать собственный плагин для более тонкой настройки и контроля кеша. В этой статье мы подробно рассмотрим, как разработать простой, но эффективный плагин для управления кешем, который можно расширять и адаптировать под свои нужды.
Почему стоит создавать собственный плагин кеширования преимущества кастомизации и контроля
Готовые плагины кэширования, такие как W3 Total Cache или WP Super Cache, отлично справляются с задачей, но они могут быть избыточными или содержать функции, которые вы не используете. Создание собственного плагина позволяет:
- Контролировать процесс кеширования на уровне кода;
- Оптимизировать работу именно под архитектуру вашего сайта;
- Избегать конфликтов с другими плагинами;
- Добавлять только необходимые функции без лишних зависимостей;
- Изучить внутренние механизмы WordPress и PHP, что полезно для дальнейшего развития навыков.
Далее мы рассмотрим, как можно реализовать базовый кеш с возможностью очистки и автоматического обновления.
Как работает кеширование в WordPress основы и точки интеграции
WordPress предоставляет несколько уровней кеширования: объектный кеш, кеш запросов к базе данных и кеш страниц. Для нашего плагина мы сфокусируемся на кешировании вывода страниц — самого тяжелого элемента.
Основная идея — сохранить сгенерированный HTML в файл или в память, чтобы при повторном запросе не выполнять тяжелые операции заново. Для этого мы используем хуки WordPress:
template_redirect— для перехвата запроса и вывода кеша;shutdown— для сохранения кеша после генерации страницы;admin_post_иadmin_post_nopriv_— для очистки кеша по запросу.
Также важно учитывать, когда кеш сбрасывать — при обновлении записи, изменении настроек и т.п. Для этого применим хуки:
save_post;edit_post;deleted_post.
Создаем структуру плагина файлы, директории, базовая организация
Начнем с создания папки wpsupercache-custom в директории /wp-content/plugins/. В ней создадим главный файл wpsupercache-custom.php с базовым описанием плагина:
<?php
/**
* Plugin Name: WP Super Cache Custom
* Description: Собственный плагин для оптимизации кеша страниц WordPress
* Version: 1.0
* Author: WPSuperCache.ru
*/
// Безопасность
if (!defined('ABSPATH')) {
exit;
}
Далее создадим поддиректорию cache внутри папки плагина, где будем хранить кешированные файлы. Также сразу проверим права на запись при активации плагина.
Основные функции плагина запись, чтение и очистка кеша
Для работы с кешем создадим несколько функций с префиксом wpsupercache_custom_ для удобства и предотвращения конфликтов.
Функция записи кеша
function wpsupercache_custom_write_cache($cache_key, $content) {
$cache_dir = plugin_dir_path(__FILE__) . 'cache/';
if (!is_dir($cache_dir)) {
mkdir($cache_dir, 0755, true);
}
$cache_file = $cache_dir . md5($cache_key) . '.html';
file_put_contents($cache_file, $content);
}
Эта функция сохраняет сгенерированный HTML в файл с именем по хешу ключа кеша.
Функция чтения кеша
function wpsupercache_custom_read_cache($cache_key) {
$cache_file = plugin_dir_path(__FILE__) . 'cache/' . md5($cache_key) . '.html';
if (file_exists($cache_file)) {
return file_get_contents($cache_file);
}
return false;
}
Если кеш есть — возвращаем содержимое, иначе false.
Функция очистки кеша
function wpsupercache_custom_clear_cache() {
$cache_dir = plugin_dir_path(__FILE__) . 'cache/';
if (is_dir($cache_dir)) {
$files = glob($cache_dir . '*.html');
foreach ($files as $file) {
unlink($file);
}
}
}
Удаляет все кешированные файлы, что удобно при обновлении контента.
Интеграция с WordPress перехват запросов и вывод кеша
Теперь свяжем функции с хуками WordPress, чтобы кешировать вывод страниц и управлять кешем.
Перехват и вывод кеша
add_action('template_redirect', 'wpsupercache_custom_maybe_serve_cache');
function wpsupercache_custom_maybe_serve_cache() {
if (is_user_logged_in() || is_admin()) {
return; // Не кешируем для админов и авторизованных
}
$cache_key = 'page_' . $_SERVER['REQUEST_URI'];
$cache_content = wpsupercache_custom_read_cache($cache_key);
if ($cache_content !== false) {
echo $cache_content;
exit();
}
ob_start();
add_action('shutdown', function() use ($cache_key) {
$content = ob_get_contents();
wpsupercache_custom_write_cache($cache_key, $content);
ob_end_flush();
});
}
Мы проверяем, есть ли кеш для текущего URL, и если да — сразу выводим его, прерывая дальнейшую работу. Если кеша нет — запускаем буферизацию вывода и по завершении записи кеш.
Очистка кеша при обновлении контента
add_action('save_post', 'wpsupercache_custom_clear_cache');
add_action('deleted_post', 'wpsupercache_custom_clear_cache');
add_action('edit_post', 'wpsupercache_custom_clear_cache');
При любом изменении поста кеш сбрасывается, чтобы не показывать устаревший контент.
Расширение плагина планы и идеи для улучшения
Получив базовый плагин, вы можете расширить его функционал:
- Добавить интерфейс в админке для управления кешем и настройки времени жизни кеша;
- Реализовать кеширование AJAX-запросов;
- Добавить поддержку мультисайтов;
- Интегрировать с CDN для автоматической очистки кеша;
- Добавить логирование и мониторинг кеша.
Создание собственного плагина — отличная возможность глубже понять работу WordPress и получить максимальную производительность, адаптированную именно под ваш проект.