В современном WordPress разработчики всё чаще используют кеширование для ускорения загрузки сайта и снижения нагрузки на сервер. Одним из популярных решений является кеш Redis — быстрый и эффективный in-memory кеш, который может значительно повысить производительность вашего проекта. Однако при работе с кешем иногда возникает необходимость его очистить, например, после обновления данных или внесения изменений в шаблоны.
В этой статье мы разберём, как создать собственный виджет в WordPress, который позволит администратору сайта в пару кликов очистить кеш Redis. Такой инструмент особенно полезен, если вы не хотите заходить в консоль сервера или использовать сторонние плагины с избыточным функционалом.
Почему важно иметь виджет для очистки кеша Redis в WordPress
В большинстве случаев кеш Redis настраивается на автоматическое обновление или истечение срока действия ключей. Но бывают ситуации, когда изменения в контенте сайта не видны сразу из-за устаревших данных в кеше. Очистка кеша вручную помогает:
- Обеспечить актуальность отображаемой информации.
- Избежать ошибок, связанных с устаревшими данными.
- Упростить управление кешем для администраторов без доступа к серверу.
Создание виджета на административной панели WordPress позволяет сделать процесс очистки кеша удобным и безопасным.
Подготовка: подключение к Redis из WordPress
Для работы с Redis из PHP мы будем использовать расширение phpredis или библиотеку Predis. В примерах ниже будет использован класс Redis из расширения phpredis, так как он быстрее и чаще встречается на хостингах.
Убедитесь, что Redis установлен и запущен на вашем сервере, а также что у вас есть доступ к нему с нужными правами.
Подключение к Redis в рамках плагина или темы:
function wpdevelop_redis_connect() {
$redis = new Redis();
try {
$redis->connect('127.0.0.1', 6379); // укажите свои хост и порт
} catch (Exception $e) {
error_log('Redis connection failed: ' . $e->getMessage());
return false;
}
return $redis;
}Создание виджета очистки кеша Redis в админ-панели WordPress
Для добавления виджета в панель администратора используем функцию wp_add_dashboard_widget. Наш виджет будет содержать кнопку, при нажатии на которую будет выполняться очистка кеша.
Основные шаги:
- Создать функцию для очистки кеша.
- Добавить виджет на дашборд WordPress.
- Обработать AJAX-запрос от кнопки.
- Добавить безопасность через nonce.
Шаг 1: Функция очистки кеша Redis
function wpdevelop_redis_flush_cache() {
$redis = wpdevelop_redis_connect();
if (!$redis) {
return new WP_Error('redis_connect_error', 'Не удалось подключиться к Redis');
}
// Очистка всех ключей в Redis
$result = $redis->flushAll();
return $result;
}Шаг 2: Добавление виджета на панель администратора
function wpdevelop_add_redis_flush_widget() {
wp_add_dashboard_widget(
'wpdevelop_redis_flush',
'Очистка кеша Redis',
'wpdevelop_redis_flush_widget_render'
);
}
add_action('wp_dashboard_setup', 'wpdevelop_add_redis_flush_widget');Шаг 3: Отрисовка виджета и обработка кнопки
Виджет будет содержать кнопку, которая отправляет AJAX-запрос для очистки кеша.
function wpdevelop_redis_flush_widget_render() {
// Создаём nonce для безопасности
$nonce = wp_create_nonce('wpdevelop_redis_flush_nonce');
echo '<button id="wpdevelop-redis-flush-button" class="button button-primary">Очистить кеш Redis</button>';
echo "<span id='wpdevelop-redis-flush-result' style='margin-left:10px;'></span>";
// Добавляем JS для AJAX
?>
<script type="text/javascript">
(function($){
$('#wpdevelop-redis-flush-button').on('click', function(e){
e.preventDefault();
var button = $(this);
var resultSpan = $('#wpdevelop-redis-flush-result');
button.prop('disabled', true);
resultSpan.text('Идёт очистка...');
$.post(ajaxurl, {
action: 'wpdevelop_redis_flush',
nonce: '<?php echo $nonce; ?>'
}, function(response){
if(response.success) {
resultSpan.text('Кеш успешно очищен');
} else {
resultSpan.text('Ошибка: ' + response.data);
}
button.prop('disabled', false);
});
});
})(jQuery);
</script>
<?php
}Шаг 4: Обработка AJAX-запроса в PHP
function wpdevelop_handle_redis_flush() {
check_ajax_referer('wpdevelop_redis_flush_nonce', 'nonce');
$result = wpdevelop_redis_flush_cache();
if (is_wp_error($result)) {
wp_send_json_error($result->get_error_message());
} elseif ($result) {
wp_send_json_success();
} else {
wp_send_json_error('Неизвестная ошибка при очистке кеша');
}
}
add_action('wp_ajax_wpdevelop_redis_flush', 'wpdevelop_handle_redis_flush');Безопасность и рекомендации по использованию
При работе с Redis важно учитывать безопасность:
- Не используйте этот виджет на сайтах с открытым доступом без авторизации.
- Выполняйте очистку кеша только с учётом прав администратора.
- Ограничьте доступ к Redis с помощью паролей и сетевых правил.
Также рекомендуем интегрировать этот виджет в ваш кастомный плагин, чтобы не потерять изменения при обновлении темы.
Альтернативы и готовые решения
Если вы предпочитаете готовые плагины, обратите внимание на Clearfy Pro. В нём есть расширенные возможности по управлению кешем и оптимизации сайта.
Однако собственный виджет, как в нашем примере, даёт гибкость и позволяет адаптировать функционал под конкретные задачи.
Выводы
Создание виджета для очистки кеша Redis в WordPress — задача, которую можно решить с минимальным количеством кода и без сторонних плагинов. Это улучшит ваш рабочий процесс и повысит стабильность отображения актуальных данных на сайте. Используйте приведённые примеры как основу для своих проектов и не забывайте про безопасность.