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

Автоматическое обновление плагинов в 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 — для уведомлений и коммуникации с администратором.

Но создание собственного решения даёт максимальную гибкость и понимание процессов.

Запрет доступа к WooCommerce REST API для неавторизованных пользователей
11.01.2026
Как добавить произвольные типы постов в WordPress с примерами кода
20.12.2025
Как избежать проблем с hoistingом в WordPress: практические советы
05.01.2026
Как добавить атрибуты alt и title к картинкам в WordPress автоматически
18.01.2026
WooCommerce: как избежать проблемы с кешированием и отображением товаров при фильтрации AJAX
16.05.2026