Кеширование — важный инструмент для ускорения загрузки сайта на WordPress, однако иногда требуется оперативно очищать кеш, чтобы изменения на сайте становились видны сразу. В этой статье мы подробно разберем, как самостоятельно написать плагин для автоматического очищения кеша WordPress, рассмотрим практические примеры кода и советы по интеграции с популярными кеш-плагинами.
Почему важно автоматическое очищение кеша в WordPress
Когда вы вносите изменения на сайт — обновляете контент, меняете настройки или дизайн — кеш может хранить устаревшую версию страниц. Пока кеш не будет очищен, посетители видят старую информацию. Ручное очищение кеша — неудобный и часто забываемый процесс.
Автоматическое очищение кеша позволяет:
- Обеспечить своевременное отображение актуального контента.
- Избежать ошибок и недоразумений, связанных с кешированием.
- Оптимизировать работу сайта без участия администратора.
Однако разные кеш-плагины и серверные кеши имеют свои методы очистки, поэтому универсальный подход требует написания кода с учетом специфики.
Обзор популярных кеш-плагинов и способов их очистки
Перед тем, как создавать плагин, нужно понять, с какими кеш-системами он будет работать.
W3 Total Cache
Этот плагин предоставляет функции API для очистки кеша. Вызов функции WPHOST_clear_w3_total_cache() в нашем плагине может использовать следующий код:
function WPHOST_clear_w3_total_cache() {
if (function_exists('w3tc_flush_all')) {
w3tc_flush_all();
}
}Данная функция сбрасывает весь кеш, включая страницы, объекты и базы данных.
WP Super Cache
У этого плагина есть функция wp_cache_clear_cache(), но она не всегда доступна. Вместо этого можно вызвать:
function WPHOST_clear_wp_super_cache() {
if (function_exists('wp_cache_clear_cache')) {
wp_cache_clear_cache();
}
}Или использовать вызов очистки через класс:
function WPHOST_clear_wp_super_cache() {
if (class_exists('WP_Super_Cache')) {
$wp_super_cache = new WP_Super_Cache();
$wp_super_cache->clear_cache();
}
}LiteSpeed Cache
Для LiteSpeed Cache можно очистить кеш через REST API или WP CLI, но для примера возьмем вызов глобальной функции:
function WPHOST_clear_litespeed_cache() {
if (function_exists('LiteSpeed_Cache_API')) {
LiteSpeed_Cache_API::purge_all();
}
}Создаем базовый плагин для очистки кеша
Теперь, когда мы знаем, как очистить кеш у популярных плагинов, создадим собственный плагин, который будет реагировать на определенные события и очищать кеш автоматически.
Структура плагина
Создайте папку wphost-auto-cache-clear в директории wp-content/plugins. В ней создайте файл wphost-auto-cache-clear.php со следующим содержимым:
<?php
/**
* Plugin Name: WPHOST Авто Очистка Кеша
* Description: Автоматически очищает кеш при обновлении записи, изменении настроек и других событиях.
* Version: 1.0
* Author: WPHOST
*/
// Защита от прямого запуска
if (!defined('ABSPATH')) {
exit;
}
// Очистка кеша для W3 Total Cache
function WPHOST_clear_w3_total_cache() {
if (function_exists('w3tc_flush_all')) {
w3tc_flush_all();
}
}
// Очистка кеша для WP Super Cache
function WPHOST_clear_wp_super_cache() {
if (function_exists('wp_cache_clear_cache')) {
wp_cache_clear_cache();
} elseif (class_exists('WP_Super_Cache')) {
$wp_super_cache = new WP_Super_Cache();
$wp_super_cache->clear_cache();
}
}
// Основная функция очистки кеша
function WPHOST_clear_cache() {
WPHOST_clear_w3_total_cache();
WPHOST_clear_wp_super_cache();
// Можно добавить другие методы очистки кеша по аналогии
}
// Хук на обновление записи
add_action('save_post', 'WPHOST_clear_cache');
// Хук на обновление настроек
add_action('update_option', 'WPHOST_clear_cache');
// Хук на удаление записи
add_action('delete_post', 'WPHOST_clear_cache');
// Дополнительно можно добавить очистку при активации или деактивации плагина
register_activation_hook(__FILE__, 'WPHOST_clear_cache');
register_deactivation_hook(__FILE__, 'WPHOST_clear_cache');
?>Этот плагин автоматически вызовет очистку кеша при публикации, обновлении или удалении записей, а также при изменении настроек.
Расширение функционала: очистка кеша по расписанию и через WP-CLI
Иногда полезно очищать кеш регулярно или вручную из консоли сервера.
Очистка кеша по расписанию с WP-Cron
Добавим в плагин периодическую задачу, которая будет очищать кеш, например, раз в 6 часов.
// Добавляем событие при активации плагина
function WPHOST_schedule_cache_clear() {
if (!wp_next_scheduled('wphost_clear_cache_cron')) {
wp_schedule_event(time(), 'six_hours', 'wphost_clear_cache_cron');
}
}
register_activation_hook(__FILE__, 'WPHOST_schedule_cache_clear');
// Удаляем событие при деактивации
function WPHOST_unschedule_cache_clear() {
wp_clear_scheduled_hook('wphost_clear_cache_cron');
}
register_deactivation_hook(__FILE__, 'WPHOST_unschedule_cache_clear');
// Регистрируем интервал 6 часов
add_filter('cron_schedules', function($schedules) {
$schedules['six_hours'] = array(
'interval' => 21600, // 6 часов в секундах
'display' => 'Каждые 6 часов'
);
return $schedules;
});
// Обработчик события
add_action('wphost_clear_cache_cron', 'WPHOST_clear_cache');Добавление команды WP-CLI для очистки кеша
WP-CLI — мощный инструмент для управления WordPress из командной строки. Добавим команду для очистки кеша из консоли.
if (defined('WP_CLI') && WP_CLI) {
WP_CLI::add_command('wphost-clear-cache', function() {
WPHOST_clear_cache();
WP_CLI::success('Кеш успешно очищен.');
});
}Теперь команда wp wphost-clear-cache очистит кеш сайта.
Советы по тестированию и отладке плагина
При работе с кешем важно удостовериться, что очистка происходит корректно и не влияет на производительность.
- Тестируйте плагин на тестовом сайте, чтобы избежать сбоев на живом проекте.
- Проверяйте, с какими кеш-плагинами активен сайт, и адаптируйте функции очистки.
- Используйте логи для отслеживания вызовов очистки, например,
error_log('Cache cleared');. - Не забывайте о безопасности: функции должны запускаться только с нужными правами.
Заключение
Создание собственного плагина для автоматической очистки кеша позволяет повысить удобство управления сайтом WordPress и избежать проблем с устаревшим содержимым. В статье мы рассмотрели, как взаимодействовать с популярными кеш-плагинами, написали пример плагина с основными хуками, а также расширили функционал расписанием и WP-CLI. Используя этот подход, вы сможете гибко настраивать процесс очистки кеша под свои нужды.