WP-Cron — это встроенный механизм планировщика задач в WordPress, который позволяет автоматически выполнять определённые действия по расписанию. Это особенно полезно для автоматизации рутинных процессов, таких как очистка базы данных, отправка уведомлений, публикация отложенных записей и многое другое. В этой статье мы разберём, как правильно использовать WP-Cron, какие есть подводные камни, а также приведём практические примеры с кодом для реализации собственных задач.
Что такое WP-Cron и как он работает
WP-Cron — это имитация системного cron, встроенная в ядро WordPress. В отличие от системного cron, который запускается на уровне сервера по расписанию, WP-Cron запускается при посещении сайта — при любом запросе к серверу. Это значит, что если на сайте нет посетителей, задачи WP-Cron не будут выполняться вовремя.
WP-Cron используется для:
- Планирования публикации отложенных постов;
- Очистки кэша или временных данных;
- Отправки email-рассылок по расписанию;
- Автоматического резервного копирования;
- Выполнения любых других регулярных задач, необходимых вашему сайту.
Для работы с WP-Cron используются функции wp_schedule_event, wp_clear_scheduled_hook, add_action и другие.
Как правильно регистрировать и запускать пользовательские задачи WP-Cron
Для создания собственной задачи нужно зарегистрировать событие и привязать к нему функцию-обработчик. Рассмотрим пример из практики для сайта expert-review.ru.
Шаг 1. Регистрируем событие при активации плагина или темы
function expertreview_activate_cron() {
if (!wp_next_scheduled('expertreview_daily_task')) {
wp_schedule_event(time(), 'daily', 'expertreview_daily_task');
}
}
register_activation_hook(__FILE__, 'expertreview_activate_cron');Здесь мы проверяем, не запланировано ли уже событие expertreview_daily_task, и если нет — ставим его на ежедневный запуск.
Шаг 2. Очищаем задачу при деактивации плагина
function expertreview_deactivate_cron() {
$timestamp = wp_next_scheduled('expertreview_daily_task');
if ($timestamp) {
wp_unschedule_event($timestamp, 'expertreview_daily_task');
}
}
register_deactivation_hook(__FILE__, 'expertreview_deactivate_cron');Это важно, чтобы при удалении плагина не оставались висеть ненужные задачи.
Шаг 3. Добавляем функцию-обработчик задачи
add_action('expertreview_daily_task', 'expertreview_perform_daily_task');
function expertreview_perform_daily_task() {
// Например, очистка старых ревью из базы данных
global $wpdb;
$days = 30;
$wpdb->query($wpdb->prepare(
"DELETE FROM {$wpdb->prefix}reviews WHERE review_date < NOW() - INTERVAL %d DAY",
$days
));
}В данном примере мы удаляем отзывы старше 30 дней. Естественно, таблица reviews и поле review_date — это пример, замените на актуальные для вашего сайта.
Расширенные возможности: добавление своих интервалов WP-Cron
По умолчанию доступны интервалы: hourly, twicedaily, daily. Если нужно более гибкое расписание, можно добавить собственные интервалы.
add_filter('cron_schedules', 'expertreview_add_custom_cron_interval');
function expertreview_add_custom_cron_interval($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
);
return $schedules;
}После этого можно использовать интервал every_five_minutes в wp_schedule_event.
Как проверить и отладить задачи WP-Cron
WP-Cron может работать не всегда корректно, особенно если на сайте мало посетителей или есть проблемы с кешированием. Для отладки используйте плагины:
- WP Crontrol — позволяет просматривать, запускать, удалять задачи, менять расписание через админку;
- Cron Logger — логирует выполнение cron-задач для анализа;
- Query Monitor — помогает находить ошибки в коде, связанные с cron.
Важный совет: если ваш сайт нуждается в точном запуске cron-задач, лучше отключить встроенный WP-Cron и настроить системный cron на сервере, который будет вызывать wp-cron.php по расписанию.
define('DISABLE_WP_CRON', true);Затем в планировщик сервера добавьте задание:
wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1Примеры полезных задач для WP-Cron на expert-review.ru
Автоматическое обновление рейтингов и отзывов
Можно создать задачу, которая будет ежедневно собирать и обновлять показатели рейтингов или загружать отзывы с внешних сервисов.
Отправка еженедельной рассылки с новыми обзорами
WP-Cron отлично подойдет для формирования и отправки email-рассылок подписчикам с новыми материалами сайта.
Очистка временных таблиц и кеша
Регулярная чистка устаревших данных помогает поддерживать базу данных в оптимальном состоянии и ускоряет работу сайта.
Заключение по использованию WP-Cron
WP-Cron — мощный инструмент для автоматизации в WordPress, но требует правильной настройки и понимания особенностей работы. Используйте приведённые инструкции и примеры, чтобы создавать свои задачи, улучшать производительность и функциональность сайта expert-review.ru.