Автоматическое обновление плагинов в WordPress — важный инструмент для поддержания сайта в безопасности и с актуальным функционалом. В то же время, неправильная настройка автообновлений может привести к конфликтам, сбоям или даже полному недоступности сайта. В этой статье мы разберём, как грамотно настроить автообновление плагинов, какие есть тонкости и примеры кода для тонкой настройки.
Почему важно контролировать автообновления плагинов в WordPress
По умолчанию WordPress с версии 5.5 поддерживает автоматическое обновление плагинов, но она не всегда включена. Автообновления помогают закрыть уязвимости, исправить ошибки и улучшить функциональность без вашего вмешательства. Однако, если обновление пройдёт некорректно, плагин может сломать сайт или вызвать совместимые проблемы с темой и другими плагинами.
Поэтому важно не просто включить автообновления, а грамотно их конфигурировать, чтобы:
- обновлять только проверенные плагины;
- отслеживать успешность обновлений;
- иметь возможность исключать критичные плагины из автообновления;
- получать уведомления о сбоях.
Как включить и отключить автоматическое обновление плагинов: базовые способы
Для включения автообновлений для всех плагинов WordPress начиная с 5.5 можно сделать через админку: в разделе Плагины напротив каждого плагина есть ссылка Автообновление включено.
Но чаще нужно более гибкое управление. Для этого используют фильтры в functions.php вашей темы или в собственном плагине.
Пример включения автообновления для всех плагинов:
add_filter('auto_update_plugin', '__return_true');Чтобы отключить автообновление для всех плагинов:
add_filter('auto_update_plugin', '__return_false');Однако, чаще нужно автообновлять не все плагины, а только некоторые. Для этого используют условную логику.
Как настроить автообновление определённых плагинов через фильтр auto_update_plugin
Фильтр auto_update_plugin принимает два параметра: первый — булево значение (включить или выключить обновление), второй — имя плагина с расширением .php (например, akismet/akismet.php).
Пример кода для включения автообновления только для плагина Yoast SEO и Jetpack:
function wordpressa_auto_update_selected_plugins( $update, $item ) {
$plugins_to_update = array(
'wordpress-seo/wp-seo.php',
'jetpack/jetpack.php'
);
if ( in_array( $item->plugin, $plugins_to_update ) ) {
return true;
}
return false;
}
add_filter( 'auto_update_plugin', 'wordpressa_auto_update_selected_plugins', 10, 2 );Этот код гарантирует, что автообновления будут применяться только к указанным плагинам, остальные обновляются вручную.
Отслеживание ошибок и уведомления при автообновлениях плагинов
Очень полезно получать уведомления о статусе автообновления — успешно или с ошибками. Для этого можно использовать хук auto_plugin_update_failed и auto_plugin_update_success.
Пример отправки письма администратору в случае ошибки обновления:
function wordpressa_notify_update_failure( $plugin, $error ) {
$admin_email = get_option( 'admin_email' );
$subject = 'Ошибка автообновления плагина';
$message = "Плагин: $plugin\nОшибка: " . $error->get_error_message();
wp_mail( $admin_email, $subject, $message );
}
add_action( 'auto_plugin_update_failed', 'wordpressa_notify_update_failure', 10, 2 );Аналогично можно уведомлять и об успешных обновлениях:
function wordpressa_notify_update_success( $plugin ) {
$admin_email = get_option( 'admin_email' );
$subject = 'Плагин успешно обновлен';
$message = "Плагин $plugin был успешно обновлен.
";
wp_mail( $admin_email, $subject, $message );
}
add_action( 'auto_plugin_update_success', 'wordpressa_notify_update_success' );Резервное копирование перед автообновлением плагинов — защита от сбоев
Автообновление плагинов — это удобно, но рискованно, если что-то пойдёт не так. Чтобы минимизировать последствия, рекомендуется делать резервные копии перед обновлением.
Это можно автоматизировать, используя сторонние плагины для бэкапа, либо написать свой код, который будет запускать процесс резервного копирования непосредственно перед автообновлением.
Пример запуска резервного копирования перед автообновлением плагина (упрощённый):
function wordpressa_backup_before_plugin_update( $plugin ) {
// Здесь вызов вашей функции резервного копирования
// Например, wordpressa_create_backup();
error_log( 'Создана резервная копия перед обновлением плагина: ' . $plugin );
}
add_action( 'pre_auto_update_plugin', 'wordpressa_backup_before_plugin_update' );Реализуйте функцию wordpressa_create_backup() по своему усмотрению, например, копируя wp-content/plugins или делая дамп базы данных.
Как отключить автообновление плагинов для сайтов на локальной разработке
На локальных копиях сайта автообновление плагинов чаще всего нежелательно, чтобы сохранить стабильность и контролировать изменения. Для этого можно добавить простой код в wp-config.php или functions.php:
if ( defined('WP_LOCAL_DEV') && WP_LOCAL_DEV ) {
add_filter('auto_update_plugin', '__return_false');
}Переменная WP_LOCAL_DEV должна быть определена в wp-config.php как true на локальной машине. Это отключит автообновление плагинов в таком окружении.
Использование сторонних плагинов для расширенного контроля автообновлений
Если вы хотите иметь удобный интерфейс для управления автообновлениями и уведомлениями, можно использовать плагины:
- Easy Updates Manager — позволяет гибко управлять обновлениями тем, плагинов, ядра и переводов, включая журнал обновлений и уведомления.
- WP Auto Updater — плагин с простыми настройками автообновления и возможностью исключения отдельных плагинов.
Но если нужна тонкая кастомизация и интеграция с внутренними процессами сайта, лучше писать собственные фильтры и хуки, как показано выше.