Функция wp_doing_cron()
в WordPress проверяет, является ли текущий запрос вызовом WP-Cron. Этот инструмент полезен для разработчиков, которые хотят выполнить определённые действия только во время выполнения крон-задач.
wp_doing_cron(): bool
Возвращаемое значение
- true — если это запрос, инициированный WordPress Cron (через
wp-cron.php
). - false — если это обычный запрос, например, при загрузке страницы через браузер.
Как работает wp_doing_cron()
Эта функция является обёрткой для проверки наличия константы DOING_CRON
, которая устанавливается WordPress во время выполнения крон-задачи. Если сайт загружается через файл wp-cron.php
, эта константа будет установлена в true
.
Пример использования условной конструкции для проверки:
if( defined( 'DOING_CRON' ) && DOING_CRON ){
// Это запрос от WP-Cron
}
Пример 1: Выполнение действия только во время крон-запроса
Этот пример показывает, как выполнить код только во время крон-запроса. Например, мы можем удалить запланированную задачу при срабатывании крон-запроса:
add_action( 'shutdown', function() {
if( wp_doing_cron() ){
// Получаем временную метку следующего запланированного события
$timestamp = wp_next_scheduled('custom_cron_hook');
// Удаляем событие, если оно существует
if ( $timestamp ) {
wp_unschedule_event( $timestamp, 'custom_cron_hook' );
}
}
});
В этом примере, если крон-задача с хуком custom_cron_hook
запланирована, она будет удалена во время выполнения WP-Cron. Эта операция выполняется в момент завершения работы WordPress, так как она добавлена на хук shutdown
.
Пример 2: Логирование крон-запросов
В данном примере мы создаём простой механизм логирования, который фиксирует выполнение крон-задач. Это может быть полезно для отладки работы WP-Cron.
add_action( 'init', function() {
if( wp_doing_cron() ) {
// Записываем лог при каждом крон-запросе
error_log( 'Крон-задача выполнена: ' . date('Y-m-d H:i:s') );
}
});
При каждом крон-запросе в журнал будет добавлена запись с указанием времени выполнения. Это позволяет следить за активностью WP-Cron в реальном времени.
Пример 3: Отключение определённых функций во время крон-запросов
Иногда может понадобиться отключить определённые действия или функции, если запрос инициирован кроном. Этот пример показывает, как можно блокировать отправку уведомлений во время выполнения крон-задачи.
add_filter( 'wp_mail', function( $args ) {
if( wp_doing_cron() ) {
// Блокируем отправку писем во время крон-запросов
return false;
}
return $args;
});
Здесь мы используем фильтр wp_mail
, чтобы заблокировать отправку писем при выполнении крон-задачи, тем самым предотвращая лишнюю нагрузку на почтовый сервер во время автоматических запросов.
Когда использовать wp_doing_cron()
- Оптимизация кода: Если нужно ограничить выполнение ресурсоёмких процессов только в фоновом режиме (например, выполнение операций во время крон-запроса).
- Управление крон-задачами: Вы можете запускать задачи только во время крон-запросов или отменять их в зависимости от контекста выполнения.
- Отладка и мониторинг: Проверка, как и когда выполняются крон-задачи, может помочь в отладке работы WP-Cron.
Заключение
Функция wp_doing_cron()
— это простой и удобный инструмент для проверки, когда запрос инициирован кроном WordPress. Она помогает разработчикам выполнять специализированные задачи только в момент выполнения WP-Cron и не вмешиваться в основную работу сайта.