Как создать автозапускаемые крон-задачи в WordPress

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

Что такое WP-Cron и почему его нужно доработать

WP-Cron — это имитация системного cron на PHP, встроенная в WordPress. Она запускается при каждом визите на сайт, проверяя, не пора ли выполнить запланированные задачи. Такой подход имеет несколько недостатков:

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

Поэтому для крупных проектов и критически важных задач рекомендуется настроить системный cron и отключить WP-Cron.

Отключение WP-Cron и настройка системного cron

Для отключения WP-Cron в файле wp-config.php добавьте строку:

define('DISABLE_WP_CRON', true);

Далее создайте задание в системном cron на сервере, которое будет запускать файл wp-cron.php с нужной периодичностью.

Пример записи в crontab для запуска каждую минуту:

* * * * * curl -s https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

Замените https://example.com на ваш домен. Такой подход гарантирует выполнение задач независимо от посещаемости сайта.

Создание и регистрация собственной cron-задачи в WordPress

Для добавления собственной задачи используйте хуки wpplugin_schedule_cron_task и wpplugin_do_cron_task (префикс wpplugin_ для уникальности).

Шаг 1. Регистрация задачи и расписания

Добавим в плагин или файл functions.php следующий код:

function wpplugin_add_custom_cron_schedule($schedules) {
    if (!isset($schedules['every_five_minutes'])) {
        $schedules['every_five_minutes'] = array(
            'interval' => 300, // 300 секунд = 5 минут
            'display' => __('Каждые 5 минут')
        );
    }
    return $schedules;
}
add_filter('cron_schedules', 'wpplugin_add_custom_cron_schedule');

function wpplugin_activate_cron_task() {
    if (!wp_next_scheduled('wpplugin_do_cron_task')) {
        wp_schedule_event(time(), 'every_five_minutes', 'wpplugin_do_cron_task');
    }
}
add_action('wp', 'wpplugin_activate_cron_task');

Здесь мы добавляем новое расписание с интервалом 5 минут и регистрируем задачу, которая будет запускаться по этому расписанию.

Шаг 2. Обработка задачи

Теперь напишем функцию, которая выполнится при срабатывании задачи:

function wpplugin_handle_cron_task() {
    // Пример: очистка временных данных
    global $wpdb;
    $deleted = $wpdb->query("DELETE FROM {$wpdb->prefix}wpplugin_temp_data WHERE expiration < NOW()");
    if ($deleted !== false) {
        error_log("WPPlugin: удалено {$deleted} устаревших записей.");
    }
}
add_action('wpplugin_do_cron_task', 'wpplugin_handle_cron_task');

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

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

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

Также полезно логировать выполнение задач через error_log или записывать статус в отдельную таблицу.

Рекомендации по оптимизации и безопасности

При создании cron-задач учитывайте:

  • Избегайте длительных операций в одной задаче — разбивайте их на части.
  • Используйте транзакции и обрабатывайте ошибки.
  • Отключайте WP-Cron на продакшене и настраивайте системный cron.
  • Не запускайте задачи слишком часто, чтобы не перегружать сервер.
  • Проверяйте права доступа и защищайте wp-cron.php от несанкционированного запуска.

Пример интеграции с плагином WP Rocket для очистки кеша

Если у вас установлен плагин WP Rocket, можно настроить автоматическую очистку кеша по расписанию:

function wpplugin_clear_wp_rocket_cache() {
    if (function_exists('rocket_clean_domain')) {
        rocket_clean_domain();
        error_log('WPPlugin: кеш WP Rocket очищен.');
    }
}
add_action('wpplugin_do_cron_task', 'wpplugin_clear_wp_rocket_cache');

Добавьте вызов wpplugin_clear_wp_rocket_cache в обработчик своих cron-задач, и кеш будет автоматически обновляться.

Как создать автозаполняемый формат данных в WordPress для удобного ввода
05.02.2026
Как добавить автоматический отзыв на страницу товара WooCommerce с помощью AJAX
23.03.2026
Удаление дублирующихся пользователей в WordPress: практическое руководство
07.01.2026
Как правильно удалить и отключить плагин в WordPress без ошибок
26.12.2025
Как избежать конфликтов между плагинами WordPress: практические решения
02.03.2026