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

Что такое WP-Cron и зачем он нужен в WordPress

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

Диагностика проблем с WP-Cron

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

  • Запланированные задачи не выполняются вовремя;
  • Отложенные публикации не выходят в назначенное время;
  • Плагины, завязанные на cron-задачи, перестали работать корректно.

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

Проверка работоспособности WP-Cron

Добавьте в файл functions.php вашей темы следующий код, чтобы проверить, вызывается ли cron:

add_action('wp', function() {
    if (!wp_next_scheduled('my_test_cron_hook')) {
        wp_schedule_event(time(), 'hourly', 'my_test_cron_hook');
    }
});

add_action('my_test_cron_hook', function() {
    error_log('WP-Cron сработал: ' . current_time('mysql'));
});

После захода на сайт проверьте файл debug.log (если включено логирование) или серверные логи — должна появиться запись с текущим временем. Если записи нет, WP-Cron не срабатывает.

Пошаговое решение настройки WP-Cron

1. Отключение встроенного WP-Cron (если нужно)

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

define('DISABLE_WP_CRON', true);

2. Настройка системного cron на сервере

Добавьте в планировщик задач на сервере (crontab) команду для вызова cron.php каждые 5 минут:

*/5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1

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

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

Замените https://example.com на ваш домен.

3. Создание и регистрация пользовательских cron-задач

Добавьте в functions.php следующий пример для запуска задачи раз в час:

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

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

function custom_task_function() {
    // Ваш код задачи, например, очистка транзиентов
    global $wpdb;
    $wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_%' AND option_value < UNIX_TIMESTAMP() - 3600");
}
add_action('custom_task_hook', 'custom_task_function');

Как проверить, что WP-Cron работает правильно

  • Убедитесь, что в плагине WP Crontrol запланированные задачи отображаются и имеют статус «активно»;
  • Включите логирование и проверьте появление записей из обработчиков cron;
  • Проверьте, что задачи выполняются по расписанию, например, очистка кэша или обновление данных происходит без задержек;
  • Для системного cron убедитесь, что планировщик на сервере работает и команты вызывают wp-cron.php без ошибок.

Частые ошибки и их исправление

  • DISABLE_WP_CRON не установлен, но системный cron настроен: приводит к двойному выполнению задач или конфликтам. Проверьте wp-config.php.
  • Неправильный URL в системном cron: убедитесь, что домен и протокол указаны верно без лишних слэшей.
  • Вызывается wp-cron.php в браузере, но задачи не выполняются: проверьте права на файл, доступность сайта из командной строки, нет ли ошибок PHP.
  • Плагины конфликтуют с WP-Cron: временно отключите сторонние плагины и протестируйте cron, затем включайте по одному.

Практические советы по безопасности и производительности

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

Сравнение способов запуска WP-Cron

МетодПлюсыМинусыКогда использовать
Встроенный WP-CronПрост в использовании, не требует доступа к серверуЗависит от посещаемости сайта, может работать с задержкамиМаленькие сайты с низкой и средней посещаемостью
Системный cronНадежный, запускается точно по расписанию, снижает нагрузкуТребует доступа к серверу, настройка сложнееСайты с высоким трафиком и критическими задачами
Оптимизация товаров WooCommerce для ускорения загрузки страниц
29.04.2026
Как автоматизировать удаление спама в комментариях WordPress
20.12.2025
Как использовать WPRemark для отслеживания и анализа комментариев в WordPress
25.12.2025
Как удалить или заблокировать контент по IP в WordPress
14.03.2026
Как использовать REST API в WordPress для создания настраиваемых приложений
23.11.2025