В современных проектах на WordPress важно поддерживать плагины в актуальном состоянии для повышения безопасности и производительности сайта. В этой статье мы подробно разберём, как создать собственный модуль автообновления плагинов в WordPress с помощью кода, а также рассмотрим примеры полезных плагинов, которые могут помочь автоматизировать процесс.
Почему важно автоматизировать обновление плагинов WordPress
Ручное обновление плагинов часто забывается или откладывается, что создаёт риски безопасности и несовместимости. Автоматизация позволяет:
- Сократить время на обслуживание сайта.
- Своевременно получать исправления уязвимостей.
- Избежать конфликтов из-за устаревших версий.
При этом важно грамотно реализовать автообновление, чтобы не нарушить работоспособность сайта — например, обновлять только проверенные плагины или создавать резервные копии перед обновлением.
Обзор встроенных возможностей WordPress для автообновления
Начиная с версии 5.5, WordPress поддерживает автообновления для плагинов и тем. Управлять этим можно через админку или с помощью фильтров в functions.php.
Чтобы включить автообновление для всех плагинов, можно использовать следующий код:
add_filter('auto_update_plugin', '__return_true');Однако такой подход не всегда удобен, т.к. невозможно выбрать плагины выборочно и контролировать процесс.
Создание модуля автообновления с выборочной активацией
Для более гибкого управления можно создать собственный модуль, который обновляет только выбранные плагины и ведёт лог операций. Рассмотрим пример кода:
function wpeditor_auto_update_selected_plugins( $update, $item ) {
// Список плагинов для автообновления (папка/файл.php)
$plugins_to_update = [
'akismet/akismet.php',
'contact-form-7/wp-contact-form-7.php'
];
if ( in_array( $item->plugin, $plugins_to_update ) ) {
return true; // Разрешаем автообновление
}
return false; // Отклоняем автообновление для остальных
}
add_filter( 'auto_update_plugin', 'wpeditor_auto_update_selected_plugins', 10, 2 );В этом примере мы ограничиваем автообновление только плагинами Akismet и Contact Form 7. Такой подход позволяет избежать неожиданных изменений у остальных плагинов.
Ведение лога обновлений
Чтобы отслеживать автоматические обновления, добавим запись в лог при успешном обновлении:
function wpeditor_log_plugin_update( $upgrader_object, $options ) {
if ( $options['action'] === 'update' && $options['type'] === 'plugin' ) {
foreach ( $options['plugins'] as $plugin ) {
error_log('Плагин обновлён автоматически: ' . $plugin);
}
}
}
add_action( 'upgrader_process_complete', 'wpeditor_log_plugin_update', 10, 2 );С помощью error_log записи можно просматривать в системных логах сервера, либо расширить функционал для записи в отдельный файл или отправки уведомлений на email.
Примеры плагинов для автоматизации обновления и управления
Если хотите использовать готовые решения, обратите внимание на следующие плагины с расширенными возможностями:
- Clearfy Pro — оптимизация и автоматизация различных процессов, включая автообновления с расширенными настройками. Подробнее: https://wpshop.ru/plugins/clearfy/
- WPRemark — плагин для автоматизации комментариев и отзывов с функцией контроля обновлений. Подробнее: https://wpshop.ru/plugins/wpremark/
Дополнительные советы по безопасному автообновлению плагинов
Автоматизация обновлений требует осторожности. Рекомендуется:
- Делать регулярные бэкапы сайта и базы данных перед обновлениями.
- Проводить тестирование на staging-сервере.
- Использовать фильтры WordPress для избирательного обновления.
- Оповещать администратора при неудачных обновлениях.
Такой комплексный подход позволит поддерживать плагины в актуальном состоянии без риска для сайта.
Автоматическое включение автообновлений для новых плагинов
Если нужно, чтобы новые плагины, которые вы устанавливаете, автоматически попадали в список автообновления, можно расширить функцию:
function wpeditor_auto_update_new_plugins( $update, $item ) {
$always_update = [
'akismet/akismet.php',
'contact-form-7/wp-contact-form-7.php'
];
// Добавляем новые плагины в массив при необходимости
$new_plugins = get_option( 'wpeditor_auto_update_plugins', [] );
$plugins_to_update = array_merge( $always_update, $new_plugins );
if ( in_array( $item->plugin, $plugins_to_update ) ) {
return true;
}
return false;
}
add_filter( 'auto_update_plugin', 'wpeditor_auto_update_new_plugins', 10, 2 );Для добавления новых плагинов в опцию wpeditor_auto_update_plugins можно создать административный интерфейс или обновлять вручную через базу данных.