Автоматическое обновление плагинов и тем в WordPress — важный аспект безопасности и стабильности сайта. Хотя есть множество готовых решений, иногда возникает необходимость создать собственное решение с уникальными настройками и логикой. Эта статья подробно объяснит, как сделать свой плагин для автообновлений с примерами кода и рекомендациями по безопасности.
Почему стоит создавать собственный плагин для автообновлений
Сторонние плагины для автообновления часто предлагают базовый функционал, но не всегда подходят под специфические задачи. Свой плагин позволяет:
- Контролировать, какие именно плагины и темы обновлять.
- Настроить расписание обновлений и логи.
- Интегрировать уведомления об обновлениях на email или в админку.
- Избежать избыточных зависимостей и повысить безопасность.
Особенно полезен такой подход для сайтов с уникальными или кастомными плагинами, где необходим строгий контроль над обновлениями.
Основы работы с автообновлениями в WordPress
WordPress имеет встроенные хуки и фильтры для управления автообновлениями. Основные из них:
auto_update_plugin— фильтр для автообновления плагинов.auto_update_theme— фильтр для автообновления тем.automatic_updater_disabled— отключение автоматических обновлений.
Используя эти фильтры, можно задать логику, какие именно компоненты обновлять автоматически.
Пример простого плагина для автообновления выбранных плагинов
Создадим плагин wpall-auto-updater, который будет автоматически обновлять только указанные плагины.
<?php
/**
* Plugin Name: WPAll Auto Updater
* Description: Автоматическое обновление выбранных плагинов WordPress
* Version: 1.0
* Author: WPAll
*/
// Список плагинов для автообновления
function wpall_auto_updater_get_plugins_to_update() {
return [
'akismet/akismet.php',
'contact-form-7/wp-contact-form-7.php',
];
}
// Фильтр автообновления плагинов
add_filter('auto_update_plugin', 'wpall_auto_updater_filter_plugins', 10, 2);
function wpall_auto_updater_filter_plugins($update, $item) {
$plugins_to_update = wpall_auto_updater_get_plugins_to_update();
if (in_array($item->plugin, $plugins_to_update)) {
return true;
}
return false;
}
// Логирование обновлений
add_action('upgrader_process_complete', 'wpall_auto_updater_log', 10, 2);
function wpall_auto_updater_log($upgrader, $options) {
if ($options['action'] === 'update' && $options['type'] === 'plugin') {
$updated = implode(', ', $options['plugins']);
error_log('WPAll Auto Updater: обновлены плагины: ' . $updated);
}
}
?>
Данный код включает список плагинов, которые будут обновляться автоматически. Все остальные обновления выполняться не будут. В лог пишется информация об обновленных плагинах.
Автоматическое обновление тем — расширенный пример
Для автообновления тем можно использовать похожий подход, но с дополнительной проверкой по названию темы и ее версии.
add_filter('auto_update_theme', 'wpall_auto_updater_update_themes', 10, 2);
function wpall_auto_updater_update_themes($update, $theme) {
$themes_to_update = ['twentytwentyone', 'reboot']; // пример тем для автообновления
if (in_array($theme->get_stylesheet(), $themes_to_update)) {
return true;
}
return false;
}
Таким образом можно контролировать, какие темы будут получать обновления автоматически, что особенно актуально при использовании кастомных тем, например, Reboot.
Настройка расписания и уведомлений
Чтобы автообновления происходили регулярно, можно использовать WP-Cron с кастомным событием.
// Регистрируем событие при активации плагина
register_activation_hook(__FILE__, function() {
if (!wp_next_scheduled('wpall_auto_update_event')) {
wp_schedule_event(time(), 'daily', 'wpall_auto_update_event');
}
});
// Удаляем событие при деактивации
register_deactivation_hook(__FILE__, function() {
wp_clear_scheduled_hook('wpall_auto_update_event');
});
// Обработчик события
add_action('wpall_auto_update_event', function() {
include_once(ABSPATH . 'wp-admin/includes/class-wp-upgrader.php');
$upgrader = new Plugin_Upgrader();
$plugins = wpall_auto_updater_get_plugins_to_update();
foreach ($plugins as $plugin) {
$upgrader->upgrade($plugin);
}
});
Для уведомлений можно добавить отправку email с результатами обновления, например, внутри обработчика события.
Лучшие практики и безопасность
При создании плагина для автообновлений важно помнить:
- Обязательно тестируйте обновления на тестовом сайте перед продакшеном.
- Регистрируйте корректно хуки активации и деактивации.
- Используйте
wp_nonce_fieldи проверки прав пользователя, если добавляете интерфейс настроек. - Логируйте действия для мониторинга и отладки.
- Учитывайте возможные конфликты плагинов и откаты обновлений.
Интеграция с плагинами WPShop
Если вы используете плагины из WPShop, например, Clearfy Pro, то можно добавить в свой плагин совместимость и расширенные возможности по управлению обновлениями и оптимизацией.
Таким образом, создание собственного плагина для автоматического обновления в WordPress — несложная задача, которая позволяет гибко и безопасно управлять обновлениями на сайте. В статье приведены базовые примеры, которые легко расширить под свои нужды.