Автоматическое обновление плагинов в WordPress — важный элемент поддержания безопасности и стабильности сайта. Однако не всегда удобно полагаться на стандартные системные автообновления без возможности управлять этим процессом. В этой статье мы подробно разберём, как создать собственную настройку в админке WordPress, позволяющую включать или отключать автообновления плагинов, а также получать уведомления по email о результатах обновлений.
Почему важно контролировать автообновления плагинов WordPress
По умолчанию WordPress поддерживает автообновления для плагинов, но они либо включены для всех, либо полностью выключены. Это может привести к нежелательным последствиям:
- Автообновление может сломать совместимость с темой или другими плагинами.
- Без уведомлений сложно отследить, какие обновления прошли успешно, а какие вызвали ошибки.
- Нехватка контроля усложняет обеспечение стабильности сайта на продакшене.
Поэтому полезно иметь собственную настройку, где администратор может гибко управлять автообновлениями и получать отчёты.
Создание настройки в админке для управления автообновлением
Добавляем страницу настроек
Для начала создадим простую страницу с чекбоксом включения/отключения автообновления плагинов. В файле functions.php вашей темы или в собственном плагине добавьте следующий код:
function wpsetup_register_autoupdate_setting() {
add_options_page(
'Настройки автообновления плагинов',
'Автообновление плагинов',
'manage_options',
'wpsetup-autoupdate',
'wpsetup_autoupdate_page_html'
);
register_setting('wpsetup_autoupdate_group', 'wpsetup_enable_autoupdate');
}
add_action('admin_menu', 'wpsetup_register_autoupdate_setting');
function wpsetup_autoupdate_page_html() {
if (!current_user_can('manage_options')) {
return;
}
?>
<div class="wrap">
<h1>Настройки автообновления плагинов</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpsetup_autoupdate_group');
do_settings_sections('wpsetup_autoupdate_group');
$enabled = get_option('wpsetup_enable_autoupdate', 0);
?>
<table class="form-table" role="presentation">
<tr>
<th scope="row">Включить автообновление плагинов</th>
<td><input type="checkbox" name="wpsetup_enable_autoupdate" value="1" <?php checked(1, $enabled); ?> /></td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}Этот код добавляет в меню «Настройки» новую страницу с одной опцией — включить или отключить автообновление плагинов.
Подключаем автообновление плагинов через фильтр
Теперь, используя опцию wpsetup_enable_autoupdate, мы будем включать или отключать автообновления. Добавьте следующий код:
add_filter('auto_update_plugin', function($update, $item) {
return get_option('wpsetup_enable_autoupdate', false) ? true : false;
}, 10, 2);Этот фильтр управляет автообновлением каждого плагина в зависимости от настройки админки.
Добавление уведомлений об обновлениях плагинов
Чтобы администратор был в курсе, можно отправлять email после завершения обновления. Для этого используем хук upgrader_process_complete.
function wpsetup_notify_plugin_updates($upgrader_object, $options) {
if ($options['type'] === 'plugin' && $options['action'] === 'update') {
$plugins = $options['plugins'];
$plugin_names = [];
foreach ($plugins as $plugin_file) {
$plugin_data = get_plugin_data(WP_PLUGIN_DIR . '/' . $plugin_file);
$plugin_names[] = $plugin_data['Name'];
}
$to = get_option('admin_email');
$subject = 'Обновление плагинов на сайте ' . get_bloginfo('name');
$message = 'Были обновлены следующие плагины:\n' . implode("\n", $plugin_names);
wp_mail($to, $subject, $message);
}
}
add_action('upgrader_process_complete', 'wpsetup_notify_plugin_updates', 10, 2);Этот код отправляет письмо администратору со списком обновлённых плагинов после автоматического обновления.
Расширение: исключение отдельных плагинов из автообновления
Иногда нужно обновлять автоматически не все плагины, а только определённые. Для этого добавим настройку с выбором плагинов для автообновления.
Добавление мультиселектора плагинов в настройки
Сначала получим список всех установленных плагинов и создадим чекбоксы:
function wpsetup_autoupdate_page_html() {
if (!current_user_can('manage_options')) {
return;
}
$enabled = get_option('wpsetup_enable_autoupdate', 0);
$selected_plugins = get_option('wpsetup_autoupdate_plugins', []);
$all_plugins = get_plugins();
?>
<div class="wrap">
<h1>Настройки автообновления плагинов</h1>
<form method="post" action="options.php">
<?php
settings_fields('wpsetup_autoupdate_group');
do_settings_sections('wpsetup_autoupdate_group');
?>
<table class="form-table" role="presentation">
<tr>
<th scope="row">Включить автообновление плагинов</th>
<td><input type="checkbox" name="wpsetup_enable_autoupdate" value="1" <?php checked(1, $enabled); ?> /></td>
</tr>
<tr>
<th scope="row">Выберите плагины для автообновления</th>
<td>
<?php foreach ($all_plugins as $file => $plugin) : ?>
<label>
<input type="checkbox" name="wpsetup_autoupdate_plugins[]" value="<?php echo esc_attr($file); ?>" <?php checked(in_array($file, $selected_plugins)); ?> />
<?php echo esc_html($plugin['Name']); ?>
</label><br />
<?php endforeach; ?>
</td>
</tr>
</table>
<?php submit_button(); ?>
</form>
</div>
<?php
}Обработка сохранения опций
Зарегистрируем настройки с правильной валидацией:
function wpsetup_register_autoupdate_setting() {
add_options_page(
'Настройки автообновления плагинов',
'Автообновление плагинов',
'manage_options',
'wpsetup-autoupdate',
'wpsetup_autoupdate_page_html'
);
register_setting('wpsetup_autoupdate_group', 'wpsetup_enable_autoupdate');
register_setting('wpsetup_autoupdate_group', 'wpsetup_autoupdate_plugins', 'wpsetup_sanitize_plugins_list');
}
add_action('admin_menu', 'wpsetup_register_autoupdate_setting');
function wpsetup_sanitize_plugins_list($input) {
if (!is_array($input)) {
return [];
}
$all_plugins = array_keys(get_plugins());
return array_intersect($input, $all_plugins);
}Изменяем логику автообновления с учётом выбора плагинов
add_filter('auto_update_plugin', function($update, $item) {
if (!get_option('wpsetup_enable_autoupdate', false)) {
return false;
}
$selected = get_option('wpsetup_autoupdate_plugins', []);
return in_array($item->plugin, $selected);
}, 10, 2);Теперь автообновления будут запускаться только для тех плагинов, которые выбрал администратор в настройках.
Рекомендации по безопасности и тестированию
При реализации автообновлений важно помнить о безопасности:
- Всегда делайте бэкапы перед применением обновлений.
- Тестируйте обновления на тестовом стенде перед применением на боевом сайте.
- Используйте уведомления, чтобы оперативно реагировать на возможные сбои.
Реализованная настройка в админке позволяет гибко управлять обновлениями плагинов и делать процесс более прозрачным и контролируемым.
Полезные плагины для управления автообновлениями
Если хочется готовое решение без кода, можно рассмотреть плагины:
- Clearfy Pro — оптимизация и управление обновлениями, в том числе автоматическими.
- My Popup — для уведомлений и коммуникации с администратором.
Но создание собственного решения даёт максимальную гибкость и понимание процессов.