Что такое WP-Cron и зачем он нужен в WordPress
WP-Cron — это встроенный в WordPress механизм планирования задач, который позволяет запускать функции по расписанию без необходимости настраивать системный cron на сервере. Он полезен для автоматизации рутинных задач: отправки писем, очистки базы, обновления данных и прочего.
Диагностика проблем с WP-Cron
Частая проблема — задачи WP-Cron не выполняются вовремя или вообще не запускаются. Это может быть вызвано:
- Отключением стандартного поведения WP-Cron (define('DISABLE_WP_CRON', true);)
- Отсутствием трафика на сайт (WP-Cron по умолчанию запускается при загрузке страниц)
- Ошибками в коде хука задачи
- Неправильной настройкой системного cron (если используется)
Проверить, работают ли задачи, можно с помощью плагина WP Crontrol (https://wordpress.org/plugins/wp-crontrol/). Он показывает список задач и позволяет запускать их вручную.
Пошаговое создание и регистрация пользовательской задачи WP-Cron
1. Добавляем хук с функцией, которую нужно выполнять
function wpqa_custom_cron_task() {
// Пример: очистка временных опций
global $wpdb;
$wpdb->query("DELETE FROM $wpdb->options WHERE option_name LIKE '_transient_timeout_%' AND option_value < UNIX_TIMESTAMP()");
}
add_action('wpqa_custom_cron_hook', 'wpqa_custom_cron_task');2. Регистрируем событие при активации темы или плагина
function wpqa_schedule_custom_cron() {
if (!wp_next_scheduled('wpqa_custom_cron_hook')) {
wp_schedule_event(time(), 'hourly', 'wpqa_custom_cron_hook');
}
}
add_action('wp', 'wpqa_schedule_custom_cron');3. Удаляем задачу при деактивации
function wpqa_clear_custom_cron() {
$timestamp = wp_next_scheduled('wpqa_custom_cron_hook');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpqa_custom_cron_hook');
}
}
register_deactivation_hook(__FILE__, 'wpqa_clear_custom_cron');Проверка результата после внедрения
Для проверки:
- Установите и активируйте WP Crontrol.
- Перейдите в раздел «Cron Events» и найдите вашу задачу
wpqa_custom_cron_hook. - Запустите задачу вручную через интерфейс плагина и проверьте, что функция
wpqa_custom_cron_taskсработала, например, через логи или изменения в базе. - Подождите, чтобы убедиться, что задача запускается автоматически с заданной периодичностью.
Частые ошибки при работе с WP-Cron и как их исправить
- DISABLE_WP_CRON установлен в true: WP-Cron не сработает. Проверьте
wp-config.phpи отключите эту константу, если не используете системный cron. - Низкий трафик сайта: WP-Cron в стандартном режиме запускается только при загрузке страниц. На сайтах с низким трафиком задачи могут запускаться с задержкой. Решение — настроить системный cron для вызова
wp-cron.php. - Ошибки в коде функций задачи: Если в функции есть ошибки PHP, задача не выполнится. Включите журнал ошибок и отладку для диагностики.
- Несоответствие интервалов планирования: Стандартные интервалы — hourly, daily, twicedaily. Для кастомных интервалов нужно добавить их через фильтр
cron_schedules.
Практические советы по безопасности и производительности
- Не запускайте ресурсоёмкие операции слишком часто — выбирайте разумный интервал.
- Избегайте выполнения задач, которые могут блокировать сайт — используйте асинхронные вызовы или offload в сторонние сервисы.
- Для повышения надежности используйте системный cron, который вызывает
wp-cron.phpкаждые 15 минут:*/15 * * * * wget -q -O - https://example.com/wp-cron.php?doing_wp_cron >/dev/null 2>&1 - Для расширенной автоматизации рассмотрите плагины типа WPGPT от WPShop для интеграции с AI и автоматизации контента.
Пример добавления кастомного интервала планирования
function wpqa_custom_cron_schedules($schedules) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 5 минут в секундах
'display' => __('Каждые 5 минут')
);
return $schedules;
}
add_filter('cron_schedules', 'wpqa_custom_cron_schedules');После этого можно использовать 'every_five_minutes' при регистрации задачи.
Сравнение вариантов запуска WP-Cron
| Способ запуска | Плюсы | Минусы | Когда использовать |
|---|---|---|---|
| Стандартный (запуск при загрузке страниц) | Не требует настроек, прост | Зависит от трафика сайта, задержки | Для сайтов с хорошим трафиком |
| Системный cron (через crontab) | Точный запуск по расписанию, надежен | Требует доступа к серверу, настройку | Для сайтов с низким трафиком или критичными задачами |
| Плагины для управления cron | Удобный интерфейс, диагностика | Дополнительная нагрузка, зависимость от плагина | Для разработчиков и администраторов, нуждающихся в контроле |