WP-Cron — встроенный механизм планирования и запуска отложенных задач в WordPress. Он позволяет выполнять повторяющиеся или одноразовые действия, такие как отправка писем, очистка кеша, обновление данных и многое другое без необходимости настраивать системные cron на сервере. В этой статье подробно разберём, как правильно использовать WP-Cron для автоматизации задач, какие есть подводные камни и лучшие практики, а также приведём примеры кода.
Что такое WP-Cron и как он работает
WP-Cron — это имитация системного cron, разработанная специально для WordPress. Задачи запускаются не по реальному времени, а при загрузке страницы сайта. При каждом посещении сайта WordPress проверяет, есть ли запланированные задачи, и если время выполнения подошло, запускает их.
Это удобно, так как не требует доступа к серверу, но имеет и ограничения — если на сайт долго не заходят, задачи могут запускаться с задержкой. Для критичных задач желательно использовать системный cron с вызовом wp-cron.php.
Основные функции WP-Cron:
- Планирование одноразовых и повторяющихся задач;
- Возможность создавать собственные хуки для запуска своих функций;
- Управление задачами через API WordPress.
Создание и планирование задач WP-Cron
Для работы с WP-Cron используются функции wp_schedule_event(), wp_clear_scheduled_hook() и хук add_action(). Ниже пример регистрации задачи, которая будет выполняться каждый час.
function wpcalc_register_cron_job() {
if (!wp_next_scheduled('wpcalc_hourly_event')) {
wp_schedule_event(time(), 'hourly', 'wpcalc_hourly_event');
}
}
add_action('wp', 'wpcalc_register_cron_job');
function wpcalc_hourly_task() {
// Ваш код, который нужно выполнять каждый час
error_log('Запуск часовой задачи WP-Cron');
}
add_action('wpcalc_hourly_event', 'wpcalc_hourly_task');Объяснение:
wp_schedule_event()планирует событие с указанным интервалом;- проверка
wp_next_scheduled()нужна, чтобы не создавать дубликаты задач; - действия по событию подключаются через
add_action()на кастомный хук.
Регистрация пользовательского интервала
По умолчанию в WP-Cron доступны интервалы: hourly, twicedaily, daily. Для нестандартных интервалов можно добавить свой:
function wpcalc_custom_cron_intervals($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpcalc_custom_cron_intervals');Теперь можно использовать every_five_minutes в wp_schedule_event().
Управление и отладка задач WP-Cron
Для просмотра текущих задач WP-Cron можно использовать плагин WP Crontrol. Он позволяет просматривать, запускать, удалять и создавать задачи через административную панель.
Отладка WP-Cron — важный этап. Если задачи не запускаются, проверьте:
- Активирован ли WP-Cron (параметр
DISABLE_WP_CRONвwp-config.phpдолжен быть false или отсутствовать); - Есть ли посещения сайта (если нет, задачи не запускаются);
- Логи ошибок сервера и WordPress;
- Корректно ли прописаны хуки и функция для задачи.
Пример удаления задачи
function wpcalc_clear_cron_job() {
$timestamp = wp_next_scheduled('wpcalc_hourly_event');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpcalc_hourly_event');
}
}
add_action('switch_theme', 'wpcalc_clear_cron_job');Этот код удалит запланированную задачу при смене темы, чтобы избежать утечек памяти и дублирования.
Практические примеры использования WP-Cron в задачах WordPress
WP-Cron позволяет автоматизировать множество рутинных процессов на сайте. Вот несколько идей:
- Отправка email-рассылок — запланировать отправку писем подписчикам;
- Очистка базы данных — удаление устаревших записей, ревизий и прочего мусора;
- Обновление данных — например, обновлять курсы валют или цены из внешних API;
- Автоматическое создание резервных копий через интеграции плагинов;
- Публикация отложенных записей или изменение статусов.
Пример: обновление курса валют через WP-Cron
function wpcalc_update_currency_rates() {
$response = wp_remote_get('https://api.exchangerate-api.com/v4/latest/USD');
if (is_wp_error($response)) {
error_log('Ошибка получения курса валют');
return;
}
$data = json_decode(wp_remote_retrieve_body($response), true);
if (!empty($data['rates'])) {
update_option('wpcalc_currency_rates', $data['rates']);
error_log('Курсы валют успешно обновлены');
}
}
function wpcalc_schedule_currency_update() {
if (!wp_next_scheduled('wpcalc_currency_update_event')) {
wp_schedule_event(time(), 'daily', 'wpcalc_currency_update_event');
}
}
add_action('wp', 'wpcalc_schedule_currency_update');
add_action('wpcalc_currency_update_event', 'wpcalc_update_currency_rates');Этот код раз в день запрашивает актуальные курсы валют и сохраняет их в опции WordPress для дальнейшего использования на сайте.
Оптимизация и рекомендации по работе с WP-Cron
WP-Cron удобен, но не всегда идеально подходит для всех задач. Вот рекомендации для эффективной работы:
- Для сайтов с низкой посещаемостью используйте системный cron, вызывающий
wp-cron.phpрегулярно (например, каждые 5 минут). - Минимизируйте время выполнения задач, чтобы не создавать нагрузку на сервер.
- Используйте функции
wp_schedule_single_event()для одноразовых отложенных задач. - Проверяйте наличие задач перед их созданием, чтобы исключить дублирование.
- Обрабатывайте ошибки и логируйте важные события для отладки.
Для настройки системного cron добавьте в crontab следующую строку (пример для Linux-сервера):
*/5 * * * * wget -q -O - https://ваш_сайт/wp-cron.php?doing_wp_cron >/dev/null 2>&1Это вызовет WP-Cron каждые 5 минут вне зависимости от посещаемости.
Выводы и полезные плагины для работы с WP-Cron
WP-Cron — мощный инструмент для автоматизации на WordPress. С его помощью можно значительно упростить рутинные задачи и повысить стабильность сайта.
Рекомендуемые плагины для расширенной работы с WP-Cron:
- WP Crontrol — управление и отладка задач;
- Clearfy Pro — оптимизация и очистка, позволяет интегрироваться с WP-Cron.
Используйте WP-Cron для повышения эффективности вашего сайта и автоматизации повторяющихся процессов. Правильная настройка и контроль задач помогут избежать сбоев и улучшить производительность.