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

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

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

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

Часто WP-Cron не срабатывает вовремя по следующим причинам:

  • На сайте низкий трафик — задачи запускаются только при заходе пользователя.
  • Системный cron отключен или wp-cron.php не вызывается автоматически.
  • Конфликты плагинов, блокирующих запросы к wp-cron.php.

Как проверить работу WP-Cron:

  • Добавьте код для отладки:
add_action('wp', function() {
    if (!wp_next_scheduled('my_test_cron')) {
        wp_schedule_event(time(), 'minute', 'my_test_cron');
    }
});
add_action('my_test_cron', function() {
    error_log('WP-Cron сработал: ' . date('Y-m-d H:i:s'));
});

Зайдите на сайт, после чего проверьте файл debug.log в папке wp-content. Если запись появилась — WP-Cron работает.

Как настроить системный cron для надежной работы WP-Cron

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

1. В wp-config.php добавьте:

define('DISABLE_WP_CRON', true);

2. Настройте системный cron на сервере (пример для Linux, запуск каждые 5 минут):

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

Или альтернативно:

*/5 * * * * php /path/to/your/site/wp-cron.php > /dev/null 2>&1

Путь к PHP и сайту замените на реальные значения.

Создание собственной периодической задачи с кастомным интервалом

По умолчанию доступны интервалы «hourly», «twicedaily», «daily». Для кастомных интервалов добавьте фильтр:

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

// Запланировать задачу
if (!wp_next_scheduled('my_custom_cron')) {
    wp_schedule_event(time(), 'every_five_minutes', 'my_custom_cron');
}

// Хук задачи
add_action('my_custom_cron', function() {
    // Ваш код задачи
    error_log('Моя задача запущена: ' . date('Y-m-d H:i:s'));
});

Проверка результата после внедрения

  • Убедитесь, что в debug.log появляются записи с отметкой времени запуска задачи.
  • Проверьте в базе данных таблицу wp_options запись с ключом cron, чтобы увидеть расписание задач.
  • Используйте плагин WP Crontrol для удобного просмотра и управления задачами WP-Cron.

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

  • Задачи не запускаются: Проверьте, не отключен ли WP-Cron через DISABLE_WP_CRON без настройки системного cron.
  • Проблемы с URL вызова wp-cron.php: Убедитесь, что адрес сайта и протокол корректны в системном cron (http vs https).
  • Блокировка запросов к wp-cron.php: Некоторые плагины безопасности или серверные firewall могут блокировать вызовы по URL. Проверьте логи сервера и настройки плагинов.
  • Повторное создание задач: Перед планированием задачи проверяйте, не запланирована ли она уже через wp_next_scheduled(), чтобы не создавать дубли.

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

  • Вызывайте wp-cron.php через системный cron, а не по каждому заходу пользователя — это снизит нагрузку.
  • Ограничьте права пользователя, под которым запускается системный cron, чтобы избежать рисков безопасности.
  • Используйте уникальные имена хуков для своих задач, чтобы избежать конфликтов с плагинами.
  • Используйте wp_clear_scheduled_hook() для удаления устаревших задач.

Сравнение вариантов выполнения cron задач в WordPress

МетодПлюсыМинусыПример
Встроенный WP-Cron (по заходу пользователя)Простая настройка, не требует доступа к серверуЗависит от трафика, задержки запуска задачПо умолчанию в WordPress
Системный Cron (через crontab)Надежный запуск по расписанию, независим от трафикаТребует доступа к серверу и базовых знаний Linuxcrontab -e + wget или php вызов
Плагины для управления WP-CronУдобный интерфейс, отладка и управление задачамиДополнительная нагрузка, возможные конфликтыWP Crontrol, Advanced Cron Manager
Как добавить автоматическое отслеживание изменений в WordPress
13.04.2026
Как удалить записи по meta-полям в WordPress
09.04.2026
Оптимизация базы данных WordPress: ускоряем сайт и снижаем нагрузку
21.11.2025
Как создать автоматические записи в WordPress с помощью WPMeta
30.03.2026
Как создать автоматические резервные копии в WordPress
02.12.2025

Совсем скоро здесь откроется ресурс о вордпресс.