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

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

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

Диагностика: как понять, что WP-Cron в вашей системе работает неправильно

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

  • Отсутствие автоматических уведомлений по расписанию;
  • Не меняются статусы тикетов по расписанию;
  • Не удаляются старые тикеты, если настроена автоматическая очистка;
  • Ошибка при выполнении фоновых задач или их задержка.

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

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

1. Добавляем собственное событие и расписание

Если нужна периодичность, отличная от стандартных (час, день и т.д.), добавим новое расписание:

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

2. Регистрируем событие при активации плагина или темы

register_activation_hook(__FILE__, function() {
    if (!wp_next_scheduled('process_ticket_updates')) {
        wp_schedule_event(time(), 'every_five_minutes', 'process_ticket_updates');
    }
});

register_deactivation_hook(__FILE__, function() {
    wp_clear_scheduled_hook('process_ticket_updates');
});

3. Создаем функцию-обработчик задачи

add_action('process_ticket_updates', function() {
    global $wpdb;
    // Пример: автоматическое закрытие тикетов старше 30 дней
    $date_limit = date('Y-m-d H:i:s', strtotime('-30 days'));
    $wpdb->query($wpdb->prepare(
        "UPDATE {$wpdb->prefix}tickets SET status = 'closed' WHERE status != 'closed' AND created_at < %s",
        $date_limit
    ));
    // Здесь можно добавить другие автоматические операции
});

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

Чтобы проверить, что автоматизация работает:

  • Убедитесь, что событие process_ticket_updates запланировано: в WP Crontrol или через функцию wp_next_scheduled('process_ticket_updates') вернёт метку времени;
  • Запустите событие вручную в WP Crontrol и проверьте изменения в базе — например, закрылись ли старые тикеты;
  • Подождите 5 минут и проверьте, что изменения происходят автоматически без вашего участия;
  • Просмотрите логи ошибок сервера и WordPress для выявления возможных сбоев.

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

  • WP-Cron не запускается автоматически: По умолчанию WP-Cron запускается при обращении к сайту. Если трафика мало, задачи не выполняются. Решение: настроить системный cron на сервере для вызова wp-cron.php каждые 5 минут.
    */5 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1
  • Несколько одинаковых задач запланированы: Используйте wp_next_scheduled, чтобы не создавать дубликаты событий.
  • Ошибки в SQL-запросах при обновлении базы: Проверяйте корректность таблиц и полей, используйте $wpdb->prepare() для безопасности.
  • Функция-обработчик занимает много времени: Разбейте задачи на несколько событий или используйте очередь (WP Queue, Action Scheduler).

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

  • Обязательно используйте wp_nonce_field и права доступа, если функции запускаются из интерфейса.
  • Для тяжелых операций лучше запускать WP-Cron через системный cron, а не полагаться на заходы пользователей.
  • Проверяйте время выполнения функций и избегайте блокирующих операций в обработчиках WP-Cron.
  • Используйте транзиенты (transients API) для кеширования промежуточных данных при частых запусках.

Сравнение вариантов автоматизации в тикет-системе

МетодПлюсыМинусы
WP-Cron (по умолчанию)Прост в настройке, не требует доступа к серверуЗависит от посещаемости сайта, может не запускаться вовремя
Системный cron + wp-cron.phpТочный запуск по расписанию, надежностьТребует доступа к серверу, настройка сложнее
Плагины планировщиков (Action Scheduler и др.)Управление очередями, повторяющиеся задачи, надежностьДополнительная нагрузка, требует изучения API
Как использовать WP-Cron для автоматического удаления старых тикетов в WordPress
11.05.2026
Как добавить автоматическое удаление старых тикетов в WordPress
06.04.2026
Как создать автоматическую систему распределения обработки тикетов в WordPress
16.04.2026
Как создать автоматическое сообщение о изменении статуса тикета в WordPress
21.03.2026
Как добавить автоматическую отправку отчетов в WordPress
10.04.2026