В современном бизнес-сайте на WordPress автоматизация рутинных процессов — ключ к стабильной и эффективной работе. Одним из важных инструментов автоматизации являются отложенные задачи (CRON), которые позволяют запускать определённые функции по расписанию без участия пользователя. В этой статье мы подробно разберём, как программно создавать и удалять отложенные задачи в WordPress, а также рассмотрим примеры использования и лучшие практики.
Что такое отложенные задачи (CRON) в WordPress и зачем они нужны
WordPress использует собственную систему планировщика задач WP-Cron, которая имитирует стандартный системный CRON. Эта система позволяет запускать функции в определённое время или с регулярным интервалом. Примеры задач: очистка кеша, отправка email-рассылок, обновление данных, публикация запланированных записей.
Главное преимущество WP-Cron — простота настройки и отсутствие необходимости доступа к серверным CRON. Но важно понимать, что запуск WP-Cron привязан к посещениям сайта — задачи выполняются при заходе пользователя, что может привести к задержкам в их исполнении.
Для бизнес-сайтов с высокой нагрузкой и требованием точности лучше использовать системные CRON или внешние сервисы, но WP-Cron остаётся удобным инструментом для большинства проектов.
Как создать отложенную задачу в WordPress программно
Чтобы добавить задачу в расписание, используется функция wp_schedule_event(). Она принимает время первого запуска, интервал и имя хука, который будет вызван.
Пример: добавим задачу, которая будет запускаться каждый час и выполнять нашу функцию.
function wpbusiness_schedule_hourly_event() {
if (!wp_next_scheduled('wpbusiness_hourly_task_hook')) {
wp_schedule_event(time(), 'hourly', 'wpbusiness_hourly_task_hook');
}
}
add_action('wp', 'wpbusiness_schedule_hourly_event');
function wpbusiness_hourly_task_function() {
// Код задачи, например, очистка устаревших данных
}
add_action('wpbusiness_hourly_task_hook', 'wpbusiness_hourly_task_function');Здесь мы проверяем, не запланирована ли уже задача с таким именем, чтобы избежать дублирования. Далее привязываем функцию к нашему хуку.
Добавление пользовательских интервалов для расписания
WordPress по умолчанию поддерживает несколько интервалов: hourly (час), twicedaily (две раза в день), daily (день). Если нужно больше вариантов, можно добавить их через фильтр cron_schedules.
function wpbusiness_custom_cron_intervals($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpbusiness_custom_cron_intervals');Теперь можно использовать интервал 'every_five_minutes' при создании задач.
Как удалить отложенную задачу из расписания
Иногда требуется отменить ранее запланированные задачи. Для этого применяется функция wp_clear_scheduled_hook() или wp_unschedule_event().
Пример удаления всех задач с нашим хуком:
function wpbusiness_clear_hourly_event() {
wp_clear_scheduled_hook('wpbusiness_hourly_task_hook');
}
// Вызывать по необходимости, например, при деактивации плагина
register_deactivation_hook(__FILE__, 'wpbusiness_clear_hourly_event');Если задача была запланирована с определённым временем, можно удалить её точечно:
$timestamp = wp_next_scheduled('wpbusiness_hourly_task_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpbusiness_hourly_task_hook');
}Примеры практического применения отложенных задач
Автоматическая очистка базы данных от старых записей
Для бизнес-сайтов важно поддерживать базу в чистоте, удаляя устаревшие или черновики.
function wpbusiness_cleanup_old_drafts() {
global $wpdb;
$days = 30; // удалять черновики старше 30 дней
$wpdb->query($wpdb->prepare(
"DELETE FROM $wpdb->posts WHERE post_status = 'draft' AND post_modified < NOW() - INTERVAL %d DAY",
$days
));
}
add_action('wpbusiness_daily_cleanup_hook', 'wpbusiness_cleanup_old_drafts');
function wpbusiness_schedule_daily_cleanup() {
if (!wp_next_scheduled('wpbusiness_daily_cleanup_hook')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_daily_cleanup_hook');
}
}
add_action('wp', 'wpbusiness_schedule_daily_cleanup');Отправка напоминаний клиентам о событиях
Допустим, нужно раз в день отправлять email с напоминаниями о предстоящих встречах или акциях.
function wpbusiness_send_reminders() {
$users = get_users(array('role' => 'customer'));
foreach ($users as $user) {
// Логика отправки письма
wp_mail($user->user_email, 'Напоминание', 'Не забудьте о вашем событии!');
}
}
add_action('wpbusiness_daily_reminder_hook', 'wpbusiness_send_reminders');
function wpbusiness_schedule_daily_reminders() {
if (!wp_next_scheduled('wpbusiness_daily_reminder_hook')) {
wp_schedule_event(time(), 'daily', 'wpbusiness_daily_reminder_hook');
}
}
add_action('wp', 'wpbusiness_schedule_daily_reminders');Использование плагинов для управления отложенными задачами
Если не хочется писать код, можно воспользоваться проверенными плагинами, которые позволяют просматривать, создавать и удалять WP-Cron задачи через админ-панель.
- WP Crontrol — самый популярный плагин для управления задачами. Позволяет видеть все запланированные задачи, создавать новые, редактировать и удалять.
- Advanced Cron Manager — расширенный функционал для продвинутых пользователей.
Для бизнес-сайтов с высоким трафиком и критичными задачами рекомендуем комбинировать WP-Cron с системным CRON и использовать плагин Clearfy Pro для оптимизации и контроля фоновых задач.
Рекомендации и лучшие практики при работе с WP-Cron
Работа с отложенными задачами требует внимательности и понимания:
- Всегда проверяйте, не запланирована ли задача, чтобы избежать дублирования и перегрузки сервера.
- Используйте уникальные имена хуков с префиксом, например,
wpbusiness_, чтобы избежать конфликтов. - Для критичных задач лучше настроить системный CRON на сервере и отключить WP-Cron, чтобы гарантировать своевременный запуск.
- Тестируйте задачи в безопасной среде, чтобы избежать ошибок и потери данных.
- Регулярно удаляйте устаревшие задачи, чтобы не захламлять расписание.
Подробнее о правильной настройке CRON можно узнать в документации WordPress и на Expert Review — плагине для диагностики и оптимизации сайтов.