Что такое WP-Cron и зачем он нужен в WordPress
WP-Cron — это встроенная система планировщика задач в WordPress, которая позволяет запускать повторяющиеся или отложенные действия без необходимости настройки системного cron на сервере. Это упрощает автоматизацию рутинных операций: очистка базы данных, отправка уведомлений, обновление кэша, и многое другое.
Диагностика проблем с WP-Cron
Частая проблема — WP-Cron не срабатывает или работает с задержкой. Это происходит потому, что WP-Cron запускается при загрузке страницы, а если трафик низкий или есть блокировка запросов, задачи не выполняются вовремя.
Как проверить работу WP-Cron:
- Используйте плагин
Cron Managerили WP-CLI командуwp cron event listдля просмотра запланированных задач. - Проверьте, вызывается ли файл
wp-cron.php. Для этого можно добавить временный лог в файл или использовать инструмент мониторинга. - Убедитесь, что в
wp-config.phpне стоит константаDISABLE_WP_CRONсо значениемtrue, если хотите использовать WP-Cron.
Пошаговое решение: как настроить и использовать WP-Cron для автоматизации
1. Включение WP-Cron (если отключен)
define('DISABLE_WP_CRON', false); // в wp-config.php2. Добавление пользовательской задачи
Допустим, нужно ежедневно очищать устаревшие записи кастомного типа event старше 30 дней.
function wpsource_clear_old_events() {
global $wpdb;
$threshold = date('Y-m-d H:i:s', strtotime('-30 days'));
$wpdb->query(
$wpdb->prepare(
"DELETE FROM {$wpdb->posts} WHERE post_type = %s AND post_date < %s",
'event', $threshold
)
);
}
// Запускаем задачу
add_action('wpsource_daily_cleanup', 'wpsource_clear_old_events');
// Регистрируем расписание, если его нет
add_filter('cron_schedules', function($schedules) {
if (!isset($schedules['daily'])) {
$schedules['daily'] = [
'interval' => 86400, // 24 часа
'display' => 'Ежедневно'
];
}
return $schedules;
});
// Запланировать событие при активации темы или плагина
if (!wp_next_scheduled('wpsource_daily_cleanup')) {
wp_schedule_event(time(), 'daily', 'wpsource_daily_cleanup');
}3. Удаление задачи при деактивации
function wpsource_deactivation() {
$timestamp = wp_next_scheduled('wpsource_daily_cleanup');
if ($timestamp) {
wp_unschedule_event($timestamp, 'wpsource_daily_cleanup');
}
}
register_deactivation_hook(__FILE__, 'wpsource_deactivation');Проверка результата после внедрения
- Убедитесь, что задача запланирована:
wp cron event listили Cron Manager. - Добавьте временный лог в функцию, чтобы зафиксировать вызов, например, запись в файл или запись в таблицу базы.
- Проверьте изменения в базе данных (удаление старых записей).
Частые ошибки и как их исправить
- DISABLE_WP_CRON установлен в true: WP-Cron не запускается. Решение — изменить на false или настроить системный cron.
- Низкий трафик сайта: WP-Cron срабатывает только при загрузке страниц. Для критичных задач настройте системный cron, который вызывает
wp-cron.phpчерезwgetилиcurl. - Дублирование событий: Не проверяйте наличие запланированных задач и создавайте новые при каждом запуске. Используйте
wp_next_scheduled(). - Ошибки в функциях, вызываемых по cron: Функции должны быть корректно подключены и не вызывать фатальных ошибок.
Практические советы по безопасности и производительности
- Не выполняйте тяжелые задачи в WP-Cron, если трафик ограничен — лучше использовать системный cron.
- При работе с базой используйте подготовленные запросы и проверяйте разрешения пользователя.
- Логируйте выполнение задач для отладки и мониторинга.
- Ограничьте доступ к
wp-cron.phpчерез .htaccess или конфиг веб-сервера, если используете системный cron для вызова.
Сравнение способов запуска cron-задач в WordPress
| Метод | Плюсы | Минусы | Использование |
|---|---|---|---|
| WP-Cron (по умолчанию) | Не требует доступа к серверу, простая настройка | Зависит от посещаемости сайта, задержки | Для не критичных задач и небольших сайтов |
| Системный cron + вызов wp-cron.php | Точное время запуска, надежность | Требует доступа к серверу и навыков администрирования | Для сайтов с низким трафиком и критичных задач |
| Плагины планировщика (WP Crontrol и др.) | Удобный интерфейс для управления задачами | Зависит от WP-Cron, служит для удобства | Управление и отладка cron-задач |