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

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

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

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

Частая проблема — WP-Cron не срабатывает или работает с задержкой. Это происходит потому, что WP-Cron запускается при загрузке страницы, а если трафик низкий или есть блокировка запросов, задачи не выполняются вовремя.

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

  • Используйте плагин Cron Manager или WP-CLI команду wp cron event list для просмотра запланированных задач.
  • Проверьте, вызывается ли файл wp-cron.php. Для этого можно добавить временный лог в файл или использовать инструмент мониторинга.
  • Убедитесь, что в wp-config.php не стоит константа DISABLE_WP_CRON со значением true, если хотите использовать WP-Cron.

Пошаговое решение: как настроить и использовать WP-Cron для автоматизации

1. Включение WP-Cron (если отключен)

define('DISABLE_WP_CRON', false); // в wp-config.php

2. Добавление пользовательской задачи

Допустим, нужно ежедневно очищать устаревшие записи кастомного типа event старше 30 дней.

function wpsource_clear_old_events() {
    global $wpdb;
    $threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
    $wpdb->query(
        $wpdb->prepare(
            "DELETE FROM {$wpdb->posts} WHERE post_type = %s AND post_date < %s",
            'event', $threshold
        )
    );
}

// Запускаем задачу
add_action('wpsource_daily_cleanup', 'wpsource_clear_old_events');

// Регистрируем расписание, если его нет
add_filter('cron_schedules', function($schedules) {
    if (!isset($schedules['daily'])) {
        $schedules['daily'] = [
            'interval' => 86400, // 24 часа
            'display' => 'Ежедневно'
        ];
    }
    return $schedules;
});

// Запланировать событие при активации темы или плагина
if (!wp_next_scheduled('wpsource_daily_cleanup')) {
    wp_schedule_event(time(), 'daily', 'wpsource_daily_cleanup');
}

3. Удаление задачи при деактивации

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

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

  • Убедитесь, что задача запланирована: wp cron event list или Cron Manager.
  • Добавьте временный лог в функцию, чтобы зафиксировать вызов, например, запись в файл или запись в таблицу базы.
  • Проверьте изменения в базе данных (удаление старых записей).

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

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

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

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

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

МетодПлюсыМинусыИспользование
WP-Cron (по умолчанию)Не требует доступа к серверу, простая настройкаЗависит от посещаемости сайта, задержкиДля не критичных задач и небольших сайтов
Системный cron + вызов wp-cron.phpТочное время запуска, надежностьТребует доступа к серверу и навыков администрированияДля сайтов с низким трафиком и критичных задач
Плагины планировщика (WP Crontrol и др.)Удобный интерфейс для управления задачамиЗависит от WP-Cron, служит для удобстваУправление и отладка cron-задач
Как создать динамические формы в WordPress с помощью WPRemark
16.02.2026
Как создать собственный шорткод в WordPress с примером кода
01.12.2025
Как отключить Emoji в WordPress эффективно и без плагинов
29.12.2025
WooCommerce: как изменить атрибуты товара после оформления заказа
05.06.2026
Как удалить метаданные из изображений в WordPress для ускорения сайта
03.02.2026