Как настроить отложенный запуск задач в WordPress без использования WP-Cron

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

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

WP-Cron — это имитация системного cron, которая запускается при каждом запросе к сайту. Если на сайте мало посетителей, cron-задачи могут запускаться с задержками. Кроме того, при большом количестве задач это может негативно сказаться на производительности сайта.

Основные проблемы WP-Cron:

  • Зависимость от посещаемости сайта;
  • Риск задержек в выполнении задач;
  • Отсутствие контроля над точным временем запуска;
  • Проблемы с нагрузкой при частом запуске задач.

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

Как отключить WP-Cron и настроить системный cron

Первый шаг — отключить автоматический запуск WP-Cron. Для этого в файл wp-config.php добавьте следующую строку:

define('DISABLE_WP_CRON', true);

Теперь WP-Cron не будет запускаться при каждом запросе.

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

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

Или, если есть доступ к PHP из командной строки:

* * * * * php /path/to/wordpress/wp-cron.php > /dev/null 2>&1

Это обеспечит запуск cron-задач каждый раз в начале минуты. Периодичность можно изменить по потребностям.

Реализация собственных задач с использованием системного cron

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

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

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

Добавьте в файл функций темы или плагина следующий код:

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

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

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

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

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

function wp_pro_custom_cron_function() {
    // Пример: удаляем устаревшие записи из пользовательской таблицы
    global $wpdb;
    $table = $wpdb->prefix . 'custom_data';
    $result = $wpdb->query(
        $wpdb->prepare("DELETE FROM $table WHERE created_at < NOW() - INTERVAL 30 DAY")
    );
    if ($result !== false) {
        error_log('wp-pro: Устаревшие записи удалены: ' . $result);
    }
}
add_action('wp_pro_custom_cron_hook', 'wp_pro_custom_cron_function');

Таким образом, каждые 5 минут сервер будет запускать обработку, которая будет удалять устаревшие записи старше 30 дней.

Отладка и мониторинг cron-задач

Для удобства отладки и мониторинга задач рекомендуем использовать плагин Clearfy Pro. В нем есть функции для управления cron-задачами, мониторинга их статуса и очистки мусорных задач.

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

Рекомендации по безопасности и производительности

При настройке системного cron убедитесь, что доступ к wp-cron.php ограничен, чтобы избежать несанкционированных запусков. Для этого можно настроить на сервере правила доступа по IP или использовать секретный параметр в URL.

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

Заключение

Перенос отложенных задач WordPress с WP-Cron на системный cron значительно повышает надежность и точность их выполнения. Это особенно важно для сайтов с низкой посещаемостью или большим объемом фоновых задач.

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

Как удалить метаданные из изображений в WordPress
05.01.2026
WooCommerce: настройка подтверждения отзывов через email для улучшения качества и надежности
28.04.2026
WooCommerce: изменение стоимости вариативных товаров в зависимости от выбранных атрибутов
24.05.2026
Автоматизация дублирования постов в WordPress с помощью хуков
27.02.2026
WooCommerce: отключение автоподгрузки корзины и настройка обновления без перезагрузки страницы
28.05.2026