Как автоматизировать обновление тем и плагинов WordPress с помощью кода

В этой статье мы подробно разберём, как можно настроить автоматическое обновление тем и плагинов 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 позволяет достичь высокой степени контроля и безопасности. Вы можете задать точные правила, когда и что обновлять, а также интегрировать процесс в свои инструменты администрирования.

Не забывайте о регулярном резервном копировании и тестировании обновлений. Автоматизация — это мощный инструмент, но требует аккуратного подхода и мониторинга.

Как отключить автоматическое сохранение в WordPress для улучшения производительности и удобства
18.01.2026
Отслеживание последних изменений в WordPress для безопасности сайта
31.01.2026
Как создать собственный плагин для автоматического удаления спама в комментариях WordPress
18.11.2025
Как защитить WordPress от атак с помощью Content Security Policy
20.12.2025
Оптимизация загрузки плагинов WordPress для повышения производительности сайта
29.11.2025