В этой статье мы подробно разберём, как можно настроить автоматическое обновление тем и плагинов WordPress программным способом. Автоматические обновления — важный элемент безопасности и стабильности сайта, особенно если речь идёт о большом количестве установленных расширений. Однако стандартные возможности WordPress не всегда предоставляют точный контроль, и здесь на помощь приходит кастомный код.
Почему важно автоматизировать обновления тем и плагинов WordPress
Автоматическое обновление тем и плагинов позволяет своевременно получать исправления багов, обновления безопасности и новые функции без необходимости ручного управления каждым элементом. Это особенно критично для сайтов с высокой нагрузкой и большим количеством установленных плагинов.
Однако автоматизация должна быть гибкой, чтобы избежать неожиданностей и конфликтов, которые могут возникнуть при обновлении несовместимых версий. Именно поэтому часто лучше реализовать автоматизацию через собственный код, который позволяет контролировать процесс.
Как работает система обновлений в WordPress
WordPress периодически проверяет наличие новых версий тем и плагинов на официальных репозиториях, а затем предлагает обновить их в админке. При включении автоматических обновлений (через интерфейс или константы в wp-config.php) обновления применяются автоматически.
Но стандартные настройки позволяют включать или отключать автообновления глобально либо для плагинов и тем в целом, без дифференциации по конкретным расширениям.
Пример решения: автоматическое обновление только определённых плагинов и тем
Давайте рассмотрим, как с помощью фильтров WordPress можно включить автоматическое обновление только для определённых плагинов и тем, оставив остальные без изменений. Для этого в файл functions.php вашей темы или в собственном плагине добавим следующий код:
function wpscan_auto_update_selected_plugins( $update, $item ) {
// Список плагинов, которые нужно обновлять автоматически
$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 $update;
}
add_filter( 'auto_update_plugin', 'wpscan_auto_update_selected_plugins', 10, 2 );
function wpscan_auto_update_selected_themes( $update, $theme ) {
// Список тем для автообновления
$themes_to_update = [
'twentytwentyone',
'twentytwentytwo'
];
if ( in_array( $theme->get_stylesheet(), $themes_to_update ) ) {
return true;
}
return $update;
}
add_filter( 'auto_update_theme', 'wpscan_auto_update_selected_themes', 10, 2 );В этом коде мы указываем массивы с плагинами и темами, которые хотим обновлять автоматически. WordPress применит обновления только к ним, остальные будут исключены из автообновления.
Как запустить обновления программно по расписанию
Иногда необходимо не просто включить автообновления, а запускать обновления в нужное время или по событию. Для этого можно использовать WP-Cron и собственные функции обновления.
Пример функции, которая обновляет все плагины и темы:
function wpscan_run_manual_updates() {
include_once ABSPATH . 'wp-admin/includes/plugin.php';
include_once ABSPATH . 'wp-admin/includes/theme.php';
include_once ABSPATH . 'wp-admin/includes/file.php';
include_once ABSPATH . 'wp-admin/includes/misc.php';
// Получаем список плагинов с доступными обновлениями
$plugin_updates = get_site_transient( 'update_plugins' );
if ( ! empty( $plugin_updates->response ) ) {
foreach ( $plugin_updates->response as $plugin_file => $plugin_data ) {
// Обновляем плагин
wpscan_do_update_plugin( $plugin_file );
}
}
// Получаем список тем с доступными обновлениями
$theme_updates = get_site_transient( 'update_themes' );
if ( ! empty( $theme_updates->response ) ) {
foreach ( $theme_updates->response as $theme_slug => $theme_data ) {
// Обновляем тему
wpscan_do_update_theme( $theme_slug );
}
}
}
function wpscan_do_update_plugin( $plugin_file ) {
ob_start();
$upgrader = new Plugin_Upgrader( new Automatic_Upgrader_Skin() );
$upgrader->upgrade( $plugin_file );
ob_end_clean();
}
function wpscan_do_update_theme( $theme_slug ) {
ob_start();
$upgrader = new Theme_Upgrader( new Automatic_Upgrader_Skin() );
$upgrader->upgrade( $theme_slug );
ob_end_clean();
}Эти функции можно запускать по расписанию, например, с помощью события WP-Cron:
if ( ! wp_next_scheduled( 'wpscan_daily_update_event' ) ) {
wp_schedule_event( time(), 'daily', 'wpscan_daily_update_event' );
}
add_action( 'wpscan_daily_update_event', 'wpscan_run_manual_updates' );Так вы получите надёжное и гибкое средство для управления обновлениями без вмешательства пользователя.
Использование плагинов для автоматизации обновлений с дополнительными возможностями
Если не хочется писать код, можно использовать готовые решения, расширяющие стандартное поведение WordPress:
- Easy Updates Manager — очень мощный плагин для управления автоматическими обновлениями, позволяет выбирать конкретные плагины и темы, а также настраивать уведомления.
- WP Auto Updater — удобный инструмент для автоматического обновления с возможностью логирования и исключения отдельных компонентов.
- Companion Auto Update — лёгкий и простой плагин, который позволяет включить автообновления по категориям.
Однако программный подход даёт максимальный контроль и позволяет интегрировать обновления в собственные бизнес-процессы и кастомные плагины.
Безопасность и проверка после обновлений
Автоматизация обновлений — это удобно, но необходимо не забывать о безопасности. Перед применением обновлений желательно делать резервные копии сайта и базы данных. Также рекомендуется тестировать обновления на тестовом сервере, чтобы избежать сбоев в работе сайта.
В коде можно добавить логирование или уведомления по email, чтобы отслеживать успешность обновлений и оперативно реагировать на ошибки.
Пример логирования обновлений
function wpscan_log_update( $type, $name, $result ) {
$message = sprintf( "%s '%s' обновлён: %s", ucfirst( $type ), $name, $result ? 'успешно' : 'неудачно' );
error_log( $message );
}
// Вызов внутри функций обновления
// wpscan_log_update( 'плагин', $plugin_file, $update_result );Таким образом, вы сможете получать отчёты и при необходимости быстро возвращать предыдущие версии.
Выводы и рекомендации
Использование собственного кода для автоматического обновления тем и плагинов WordPress позволяет достичь высокой степени контроля и безопасности. Вы можете задать точные правила, когда и что обновлять, а также интегрировать процесс в свои инструменты администрирования.
Не забывайте о регулярном резервном копировании и тестировании обновлений. Автоматизация — это мощный инструмент, но требует аккуратного подхода и мониторинга.