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

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

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

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

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

Если у вас возникают проблемы с автозапуском задач в WordPress (например, не публикуются запланированные посты или не выполняются очистки), первым делом стоит проверить, работает ли WP-Cron:

  • Проверка включения WP-Cron: в файле wp-config.php не должно быть строки define('DISABLE_WP_CRON', true);. Если она есть — WP-Cron отключён.
  • Проверка вызова cron-заданий: вручную вызовите URL https://ваш-сайт.ru/wp-cron.php?doing_wp_cron в браузере. Если при этом возникают ошибки или страница долго отвечает — возможны проблемы с сервером или блокировкой запроса.
  • Логирование задач: можно использовать плагин WP Crontrol для просмотра запланированных задач и их статуса.

Пошаговое создание и настройка собственного cron-задачи в WordPress

1. Регистрация собственного интервала повторения

Для нестандартных интервалов нужно добавить фильтр cron_schedules. Например, добавим интервал в 10 минут:

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

2. Создание функции для задачи

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

function my_custom_cron_task() {
    // Пример очистки кэша
    if (function_exists('wp_cache_flush')) {
        wp_cache_flush();
    }
    error_log('WP-Cron: Кэш очищен в ' . current_time('mysql'));
}

3. Регистрация задачи в планировщике

Добавим задачу, если она ещё не зарегистрирована:

add_action('my_custom_cron_hook', 'my_custom_cron_task');

if (!wp_next_scheduled('my_custom_cron_hook')) {
    wp_schedule_event(time(), 'every_ten_minutes', 'my_custom_cron_hook');
}

4. Очистка задачи при деактивации плагина или темы

Чтобы избежать накопления задач, удаляем их при деактивации:

function my_custom_cron_deactivate() {
    $timestamp = wp_next_scheduled('my_custom_cron_hook');
    if ($timestamp) {
        wp_unschedule_event($timestamp, 'my_custom_cron_hook');
    }
}
register_deactivation_hook(__FILE__, 'my_custom_cron_deactivate');

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

  • Установите плагин WP Crontrol и убедитесь, что в списке событий появилась ваша задача my_custom_cron_hook с нужным интервалом.
  • Проверьте логи PHP (error_log), там должна появиться запись о выполнении задачи с текущим временем.
  • Для принудительного запуска задачи используйте кнопку "Run Now" в плагине WP Crontrol или вызовите вручную do_action('my_custom_cron_hook');.
  • Убедитесь, что задача выполняется регулярно при обращении к сайту (например, каждые 10 минут).

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

  • DISABLE_WP_CRON установлен в true: отключает WP-Cron. Уберите эту строку из wp-config.php или установите в false.
  • Отсутствие посещений сайта: WP-Cron запускается только при обращении к сайту. Для сайтов с малым трафиком настройте системный cron для вызова wp-cron.php через wget или curl.
  • Неправильные имена хуков: регистрируйте и вызывайте задачи через одинаковые имена, учитывайте префиксы и регистр.
  • Повторное создание задач: всегда проверяйте через wp_next_scheduled(), чтобы не создавать дубликаты.
  • Ошибки в коде функции задачи: используйте логи и отладку, чтобы убедиться, что задача не вызывает фатальных ошибок.

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

  • Не запускайте ресурсоёмкие задачи слишком часто: подберите оптимальный интервал, чтобы не перегружать сервер.
  • Используйте системный cron при низком трафике: добавьте в crontab команду wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1 с нужной периодичностью.
  • Проверяйте авторизацию и безопасность функций: если задача взаимодействует с внешними сервисами, добавьте проверку прав и защиту от злоупотреблений.
  • Логируйте выполнение задач: используйте error_log() или специальные плагины для мониторинга статуса cron-задач.

Сравнение вариантов запуска cron-задач

МетодПлюсыМинусы
Встроенный WP-CronПростота настройки, работает без сервера cronЗависимость от посещаемости, возможны задержки
Системный cron (серверный)Точная периодичность, надежность выполненияТребуется доступ к серверу, настройка через SSH
Плагины для управления cronУдобный интерфейс, мониторинг и отладкаДополнительная нагрузка, может конфликтовать с другими плагинами

Добавь в закладки и поделись с друзьями:

⭐⭐⭐⭐⭐
Создаем комплексное решение для удаления спама в комментариях WordPress
03.01.2026
Как создать динамические формы в WordPress с помощью плагинов и кода
18.11.2025
Как автоматически удалить неиспользуемые типы постов WordPress
12.02.2026
Как создать динамический шорткод с параметрами в WordPress
29.01.2026
WooCommerce: автоматическое изменение стоимости товаров при акциях через код
08.06.2026
×

AI-плагин от WPShop.ru

анализирует конкурентов

пишет статьи

готовит SEO

генерирует изображения

и еще кое-что...
WPGPT
Плагин, который наполняет ваш сайт WordPress
Узнать больше