В WordPress часто возникает необходимость запускать определённые задачи автоматически — будь то очистка кеша, отправка уведомлений, обновление данных или другие процессы. Для этого в WordPress существует встроенная система планировщика задач — WP-Cron. Однако у многих разработчиков возникают вопросы, как правильно создавать и настраивать собственные события, чтобы они запускались регулярно и без сбоев.
Что такое WP-Cron и зачем он нужен
WP-Cron — это имитация системного планировщика задач cron, встроенная в ядро WordPress. В отличие от настоящего cron, WP-Cron запускается при загрузке любой страницы сайта. Это означает, что если на сайте нет посетителей, задачи не выполняются вовремя, что может быть критично для важной автоматизации.
Тем не менее, WP-Cron удобен тем, что не требует доступа к серверному cron и позволяет создавать свои события прямо из кода плагина или темы.
Если вам нужна более точная и надежная периодичность, рекомендуется отключить WP-Cron и настроить настоящий cron на сервере, который будет обращаться к WordPress для запуска задач.
Создание пользовательских событий с WPManual_cron_schedule
Для запуска своих задач нужно зарегистрировать новое событие и привязать к нему функцию-обработчик. Ниже приведён пример создания собственного события с интервалом в 5 минут.
function wpmanual_add_custom_cron_intervals( $schedules ) {
if ( ! isset( $schedules['every_five_minutes'] ) ) {
$schedules['every_five_minutes'] = array(
'interval' => 300, // 300 секунд = 5 минут
'display' => 'Каждые 5 минут',
);
}
return $schedules;
}
add_filter( 'cron_schedules', 'wpmanual_add_custom_cron_intervals' );
function wpmanual_schedule_custom_event() {
if ( ! wp_next_scheduled( 'wpmanual_custom_cron_hook' ) ) {
wp_schedule_event( time(), 'every_five_minutes', 'wpmanual_custom_cron_hook' );
}
}
add_action( 'wp', 'wpmanual_schedule_custom_event' );
function wpmanual_custom_cron_function() {
// Здесь пишем код, который должен выполняться каждые 5 минут
error_log('WPManual: Запуск пользовательского CRON-события');
}
add_action( 'wpmanual_custom_cron_hook', 'wpmanual_custom_cron_function' );В этом примере мы добавляем новый интервал в 5 минут, регистрируем событие при инициализации сайта и прикрепляем функцию-обработчик, которая будет выполняться в соответствии с расписанием.
Как проверить и отладить WP-Cron
Для контроля работы WP-Cron можно использовать несколько способов:
- Плагин WP Crontrol позволяет просматривать, редактировать и запускать задачи вручную.
- В логе ошибок сервера (или в debug.log при включённом WP_DEBUG_LOG) можно отслеживать сообщения из обработчиков.
- Для проверки фактического запуска событий можно временно добавить запись в лог или отправку email.
Если задачи не запускаются, возможно, низкая посещаемость сайта или отключён WP-Cron (константа DISABLE_WP_CRON установлена в true). В этом случае нужно либо включить WP-Cron, либо настроить системный cron.
Настройка системного cron для надежного запуска задач
Для высоконагруженных сайтов рекомендуется использовать системный cron вместо WP-Cron. Для этого:
- Отключите WP-Cron, добавив в
wp-config.phpстрокуdefine('DISABLE_WP_CRON', true); - Настройте системный cron на сервере, например, с помощью crontab:
*/5 * * * * wget -q -O - https://ваш-сайт.ru/wp-cron.php?doing_wp_cron >/dev/null 2>&1<Это обеспечит вызов wp-cron.php каждые 5 минут, запускающий запланированные события.
Примеры практического применения автоматизированных событий
Автоматическая очистка кеша с помощью плагина Clearfy Pro
Если у вас установлен плагин Clearfy Pro, можно автоматически сбрасывать кеш по расписанию, интегрировав вызов функции очистки в CRON-событие:
function wpmanual_clearfy_cache_clear() {
if ( function_exists( 'clearfy_pro_clear_cache' ) ) {
clearfy_pro_clear_cache();
}
}
add_action( 'wpmanual_custom_cron_hook', 'wpmanual_clearfy_cache_clear' );Отправка автоматических email-уведомлений
Допустим, нужно раз в день отправлять отчет администраторам. Реализуем это через CRON:
function wpmanual_send_daily_report() {
$to = get_option( 'admin_email' );
$subject = 'Ежедневный отчет сайта';
$message = 'Статистика посещений и другие данные...';
wp_mail( $to, $subject, $message );
}
add_action( 'wpmanual_daily_cron_hook', 'wpmanual_send_daily_report' );
// Регистрация ежедневного события
function wpmanual_schedule_daily_event() {
if ( ! wp_next_scheduled( 'wpmanual_daily_cron_hook' ) ) {
wp_schedule_event( time(), 'daily', 'wpmanual_daily_cron_hook' );
}
}
add_action( 'wp', 'wpmanual_schedule_daily_event' );Рекомендации по работе с WP-Cron
Чтобы избежать проблем с WP-Cron, соблюдайте следующие рекомендации:
- Используйте системный cron для критичных задач.
- Минимизируйте нагрузку в задачах — избегайте длительных операций.
- Используйте уникальные имена событий, чтобы избежать конфликтов с другими плагинами.
- Регулярно проверяйте список запланированных задач с помощью плагинов.
Соблюдая эти правила, вы сможете эффективно автоматизировать выполнение любых задач на WordPress и поддерживать стабильную работу сайта.