Как использовать WP-Cron для автоматизации задач в WordPress

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

Что такое WP-Cron и как он работает

WP-Cron — это механизм имитации cron-задач в WordPress. Он запускается не по системному времени, а при загрузке любой страницы сайта. Если время для запланированной задачи наступило, WP-Cron запускает её выполнение. Это удобно, так как не требует доступа к серверным настройкам, но при этом зависит от посещаемости сайта.

Преимущества WP-Cron:

  • Не требует настройки системного cron или доступа к серверу.
  • Прост в использовании и интеграции с WordPress.
  • Позволяет запускать задачи с заданной периодичностью.

Недостатки WP-Cron:

  • Зависит от трафика сайта — если посетителей мало, задачи могут запускаться с задержкой.
  • При высокой нагрузке может запускаться слишком часто, создавая дополнительную нагрузку.
  • Не подходит для точного времени выполнения задач.

Как создавать и регистрировать собственные Cron-задачи в WordPress

Для автоматизации различных процессов, например, очистки базы данных, отправки отчетов или обновления данных, нужно создавать свои задачи. Рассмотрим пример создания простой задачи, которая будет запускаться раз в час.

Регистрация интервала времени

WP-Cron по умолчанию поддерживает стандартные интервалы (hourly, twicedaily, daily). Чтобы добавить свой интервал, например, каждые 15 минут, добавьте следующий код в functions.php вашей темы или в плагин:

function wplogin_add_cron_interval($schedules) {
    if(!isset($schedules['every_fifteen_minutes'])) {
        $schedules['every_fifteen_minutes'] = array(
            'interval' => 15 * 60, // 15 минут в секундах
            'display'  => __('Каждые 15 минут')
        );
    }
    return $schedules;
}
add_filter('cron_schedules', 'wplogin_add_cron_interval');

Регистрация задачи

Теперь зарегистрируем задачу, которая будет срабатывать каждые 15 минут. Для этого используем функцию wp_schedule_event. Важно делать проверку, чтобы задача не регистрировалась несколько раз:

function wplogin_schedule_my_task() {
    if (!wp_next_scheduled('wplogin_my_cron_hook')) {
        wp_schedule_event(time(), 'every_fifteen_minutes', 'wplogin_my_cron_hook');
    }
}
add_action('wp', 'wplogin_schedule_my_task');

Обработка задачи

Теперь привяжем функцию-обработчик к созданному хуку:

function wplogin_my_cron_function() {
    // Здесь ваш код, например очистка временных данных
    error_log('WP-Cron задача выполнена: ' . date('Y-m-d H:i:s'));
}
add_action('wplogin_my_cron_hook', 'wplogin_my_cron_function');

Как проверить и отладить WP-Cron задачи

Иногда WP-Cron может не запускаться как ожидается. Для диагностики полезны следующие инструменты и приёмы:

  • Плагины для управления WP-Cron: например, WP Crontrol. Он позволяет просматривать, запускать, удалять и создавать cron-задачи через админку.
  • Логирование: добавляйте в обработчики задач запись в лог, чтобы убедиться, что они выполняются.
  • Проверка посещаемости: помните, что WP-Cron не запускается без посещений сайта. Для сайтов с низким трафиком лучше настроить системный cron, который будет вызывать wp-cron.php по расписанию.

Настройка системного cron для запуска WP-Cron

Чтобы избавиться от зависимости от посещаемости, можно отключить встроенный WP-Cron и создать системное задание. Для этого в wp-config.php добавьте:

define('DISABLE_WP_CRON', true);

Далее настройте системный cron на сервере (например, через crontab) для вызова скрипта каждые 15 минут:

*/15 * * * * wget -q -O - https://wplogin.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Или с помощью curl:

*/15 * * * * curl -s https://wplogin.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Так вы обеспечите стабильный запуск задач независимо от посещаемости.

Практические примеры использования WP-Cron

WP-Cron можно использовать для множества задач. Рассмотрим несколько примеров:

Автоматическая очистка корзины WooCommerce

Если у вас интернет-магазин на WooCommerce, можно настроить удаление заброшенных корзин через WP-Cron:

function wplogin_clear_abandoned_cart() {
    if (!class_exists('WC_Abstract_Legacy_Order')) return;

    global $wpdb;
    $time_limit = time() - 60 * 60 * 24; // 24 часа назад

    $wpdb->query($wpdb->prepare(
        "DELETE FROM {$wpdb->prefix}woocommerce_sessions WHERE session_expiry < %d",
        $time_limit
    ));

    error_log('Удалены заброшенные сессии корзины: ' . date('Y-m-d H:i:s'));
}
add_action('wplogin_clear_cart_hook', 'wplogin_clear_abandoned_cart');

function wplogin_schedule_clear_cart() {
    if (!wp_next_scheduled('wplogin_clear_cart_hook')) {
        wp_schedule_event(time(), 'daily', 'wplogin_clear_cart_hook');
    }
}
add_action('wp', 'wplogin_schedule_clear_cart');

Отправка ежедневного отчёта администратору

Пример отправки письма с отчётом по базе данных:

function wplogin_send_daily_report() {
    $admin_email = get_option('admin_email');
    $subject = 'Ежедневный отчёт сайта';
    $message = 'Отчёт по сайту на ' . date('Y-m-d') . ': \nПользователей: ' . count_users()['total_users'];

    wp_mail($admin_email, $subject, $message);
    error_log('Отчёт отправлен: ' . date('Y-m-d H:i:s'));
}
add_action('wplogin_daily_report_hook', 'wplogin_send_daily_report');

function wplogin_schedule_daily_report() {
    if (!wp_next_scheduled('wplogin_daily_report_hook')) {
        wp_schedule_event(strtotime('00:00:00'), 'daily', 'wplogin_daily_report_hook');
    }
}
add_action('wp', 'wplogin_schedule_daily_report');

Полезные плагины для работы с WP-Cron

Для удобного управления и отладки WP-Cron советую обратить внимание на следующие плагины:

  • WP Crontrol — просмотр, редактирование, удаление и добавление cron-задач из админки.
  • Crony Cronjob Manager — удобный интерфейс для управления задачами и логирования.
  • Advanced Cron Manager — расширенные возможности по управлению и мониторингу cron-задач.

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

Как запретить доступ к wp-login.php по IP в WordPress
19.12.2025
Как установить ограничения на число попыток входа в WordPress без сторонних плагинов
28.01.2026
Как исправить проблемы входа в WordPress при использовании WooCommerce
31.07.2026
Как решить проблему: не работает вход в WordPress при использовании WooCommerce
30.05.2026
Как автоматизировать создание резервных копий WordPress
18.11.2025

wp-login.php - это страница входа в системе управления вордпресс. Если Вы хотите изменить внешний вид страницы входа - читайте здесь. Если вам нужно защитить админку - подробный мануал. Вы можете установить плагин Clearfy, в котором есть функция защиты админки и страницы входа.