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

Автоматическое обновление плагинов в WordPress — важный аспект безопасности и стабильности сайта. Однако стандартный механизм WP-Cron не всегда надежен, особенно на слабых хостингах или при низкой посещаемости. В этой статье разберем, как реализовать собственное автоматическое обновление плагинов без использования стандартного WP-Cron, используя альтернативные методы и примеры кода.

Почему стандартный WP-Cron не всегда подходит для обновления плагинов

WP-Cron запускается при посещении сайта, что делает его зависимым от трафика. Если у сайта мало посетителей, задания могут не запускаться вовремя. Это критично для обновления плагинов, поскольку устаревшие версии могут содержать уязвимости.

Кроме того, WP-Cron не является настоящим системным cron и не гарантирует точное время выполнения заданий. Это вызывает необходимость использовать более надежные решения для автоматизации обновлений.

Одним из вариантов является отключение WP-Cron и настройка системного cron на сервере, но не всегда есть доступ к серверным настройкам, особенно на shared-хостингах.

Альтернативный способ запуска обновлений — через внешние сервисы и хуки

Если вы не можете настроить системный cron, можно использовать внешние сервисы, которые будут периодически обращаться к вашему сайту и запускать обновления. Для этого создадим собственный endpoint и функцию обновления.

Создание кастомного endpoint для запуска обновлений

Добавим в functions.php или создадим небольшой плагин с таким кодом:

add_action('init', 'wpplugins_custom_update_endpoint');
function wpplugins_custom_update_endpoint() {
    if (isset($_GET['wpplugins_update']) && $_GET['wpplugins_update'] === '1') {
        if (!current_user_can('update_plugins')) {
            status_header(403);
            exit('Нет прав на обновление');
        }
        wpplugins_run_plugin_updates();
        exit('Обновления выполнены');
    }
}

function wpplugins_run_plugin_updates() {
    if (!function_exists('wp_update_plugins')) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
        require_once ABSPATH . 'wp-admin/includes/update.php';
    }
    // Проверяем обновления
    wp_update_plugins();
    $updates = get_site_transient('update_plugins');
    if (!empty($updates->response)) {
        foreach ($updates->response as $plugin_file => $plugin_info) {
            // Обновляем каждый плагин
            $result = wpplugins_update_plugin($plugin_file);
        }
    }
}

function wpplugins_update_plugin($plugin_file) {
    include_once ABSPATH . 'wp-admin/includes/class-wp-upgrader.php';
    $upgrader = new Plugin_Upgrader(new Automatic_Upgrader_Skin());
    return $upgrader->upgrade($plugin_file);
}

Этот код создает URL вида https://example.com/?wpplugins_update=1, при обращении к которому происходит проверка и обновление плагинов. Важно, что обновление доступно только пользователям с правами update_plugins, чтобы избежать несанкционированного запуска.

Настройка внешнего сервиса для вызова обновления

Чтобы обновления запускались автоматически, настроим внешний cron-сервис, например, cron-job.org или UptimeRobot, который будет обращаться к нашему endpoint с нужной периодичностью.

Это решает проблему с недостатком посещаемости и гарантирует своевременное обновление.

Как обезопасить автоматическое обновление плагинов

Важно ограничить доступ к endpoint, чтобы избежать возможности злоумышленников запускать обновления или перегружать сайт.

Для этого можно добавить секретный ключ в URL и проверять его в функции:

add_action('init', 'wpplugins_custom_update_endpoint');
function wpplugins_custom_update_endpoint() {
    $secret_key = 'vashe-sekretnoe-slovo';
    if (isset($_GET['wpplugins_update']) && $_GET['wpplugins_update'] === $secret_key) {
        if (!current_user_can('update_plugins')) {
            status_header(403);
            exit('Нет прав на обновление');
        }
        wpplugins_run_plugin_updates();
        exit('Обновления выполнены');
    }
}

Также можно ограничить доступ по IP-адресам внешних сервисов или добавить капчу, если используете веб-интерфейс для запуска обновлений.

Плагины для управления обновлениями с расширенными возможностями

Если вы хотите более простой способ управления обновлениями без ручного кода, обратите внимание на плагины:

  • Easy Updates Manager — позволяет гибко настраивать автоматические обновления для ядра, тем и плагинов.
  • WP Auto Updater — автоматизирует обновления с возможностью логирования и уведомлений.
  • Clearfy Pro — в том числе содержит функции оптимизации обновлений и безопасности.

Эти решения удобны, но иногда бывают избыточны или тяжеловесны. Наш подход с кастомным endpoint дает полный контроль и легкость.

Дополнительные рекомендации по автоматизации и мониторингу обновлений

После внедрения автоматического обновления важно настроить уведомления о результатах обновлений. Можно расширить функцию wpplugins_run_plugin_updates(), чтобы отправлять email или логировать события.

Пример отправки email после обновления:

function wpplugins_run_plugin_updates() {
    if (!function_exists('wp_update_plugins')) {
        require_once ABSPATH . 'wp-admin/includes/plugin.php';
        require_once ABSPATH . 'wp-admin/includes/update.php';
    }
    wp_update_plugins();
    $updates = get_site_transient('update_plugins');
    $updated_plugins = [];
    if (!empty($updates->response)) {
        foreach ($updates->response as $plugin_file => $plugin_info) {
            $result = wpplugins_update_plugin($plugin_file);
            if ($result) {
                $updated_plugins[] = $plugin_info->slug;
            }
        }
    }
    if (!empty($updated_plugins)) {
        wp_mail(get_option('admin_email'), 'Автоматическое обновление плагинов', 'Обновлены плагины: ' . implode(', ', $updated_plugins));
    }
}

Таким образом, вы будете всегда в курсе, что происходит с обновлениями.

Кроме того, следите за совместимостью обновленных плагинов и делайте регулярные бэкапы сайта, чтобы избежать потери данных при ошибках обновления.

Как создать плагин для WordPress с настройками
18.11.2025
Автоматическое удаление старого контента в WordPress
06.02.2026
Как создать автозаполняемое поле в WordPress с примерами кода
03.01.2026
Как удалить или отключить плагин в WordPress правильно
05.11.2025
Как использовать AJAX в собственных плагинах WordPress
26.02.2026