Функция wp_cron()
является основным механизмом, с помощью которого WordPress обрабатывает запланированные крон-задачи. Она отвечает за проверку всех событий, время выполнения которых уже наступило, и их активацию.
wp_cron(): false|int|void
Описание
Функция wp_cron()
выполняется при загрузке WordPress на событии wp_loaded
. Она проверяет все запланированные задачи и запускает те, чье время выполнения уже наступило. Если событие уже произошло, wp_cron()
вызывает внутреннюю функцию _wp_cron()
, которая активирует выполнение событий через файл wp-cron.php
.
Если константа DISABLE_WP_CRON
установлена в true
, то функция wp_cron()
не будет работать.
Возвращаемое значение
- false — если не удалось обработать хотя бы одно событие.
- int — количество запущенных событий (0, если нет событий, которые нужно выполнить).
- void — если функция только зарегистрировала
_wp_cron()
для выполнения на событииwp_loaded
.
Пример 1: Добавление кастомной крон-задачи с пользовательским интервалом
Этот пример демонстрирует, как добавить собственный крон-хук с кастомным интервалом.
add_filter( 'cron_schedules', 'custom_cron_add_interval' );
add_action( 'init', 'custom_cron_add_hook' );
// Добавляем кастомный интервал в расписание
function custom_cron_add_interval( $schedules ) {
$schedules['custom_interval'] = array(
'interval' => 120, // Интервал в секундах (2 минуты)
'display' => __( 'Каждые 2 минуты' ),
);
return $schedules;
}
// Планируем крон-задачу, если она еще не запланирована
function custom_cron_add_hook() {
if ( ! wp_next_scheduled( 'custom_cron_event' ) ) {
wp_schedule_event( time(), 'custom_interval', 'custom_cron_event' );
}
}
// Добавляем функцию, которая будет вызвана кроном
add_action( 'custom_cron_event', 'custom_cron_task' );
function custom_cron_task() {
error_log( 'Крон-задача с кастомным интервалом сработала.' );
}
В этом примере мы добавляем новый интервал — «Каждые 2 минуты» — в список доступных расписаний. Затем мы регистрируем крон-задачу, которая будет срабатывать каждые две минуты и записывать сообщение в лог-файл.
Пример 2: Автоматическая отправка писем каждую неделю
Этот пример показывает, как использовать wp_cron()
для отправки автоматических писем по расписанию.
// Планируем крон-задачу для отправки письма раз в неделю
if ( ! wp_next_scheduled( 'weekly_email_task' ) ) {
wp_schedule_event( time(), 'weekly', 'weekly_email_task' );
}
// Функция для отправки письма
add_action( 'weekly_email_task', 'send_weekly_email' );
function send_weekly_email() {
$to = '[email protected]';
$subject = 'Еженедельный отчет';
$message = 'Это автоматическое письмо, отправленное каждую неделю.';
wp_mail( $to, $subject, $message );
}
В этом примере крон-задача отправляет письмо каждую неделю. Функция wp_schedule_event()
планирует выполнение задачи weekly_email_task
раз в неделю, а send_weekly_email()
отправляет письмо на указанный адрес.
Пример 3: Запуск задачи при загрузке WordPress
Иногда нужно выполнять крон-задачи сразу после загрузки сайта. Этот пример покажет, как запустить крон-задачи при загрузке WordPress с помощью wp_cron()
.
add_action( 'init', function() {
// Запускаем крон-задачи вручную при загрузке
wp_cron();
});
Этот код запускает все запланированные задачи во время загрузки сайта, если их время выполнения уже наступило. Однако такой подход может создать дополнительную нагрузку на сайт при каждом запросе, поэтому его использование следует тщательно продумать.
Пример 4: Запуск задачи для очистки базы данных
Этот пример иллюстрирует использование wp_cron()
для автоматической очистки базы данных каждые 24 часа.
if ( ! wp_next_scheduled( 'daily_cleanup_task' ) ) {
wp_schedule_event( time(), 'daily', 'daily_cleanup_task' );
}
// Функция для очистки базы данных
add_action( 'daily_cleanup_task', 'clean_up_database' );
function clean_up_database() {
global $wpdb;
// Пример запроса для удаления старых записей
$wpdb->query( "DELETE FROM wp_custom_table WHERE created_at < NOW() - INTERVAL 30 DAY" );
error_log( 'Очистка базы данных выполнена.' );
}
Здесь задача daily_cleanup_task
будет автоматически вызываться раз в сутки и удалять старые данные из базы данных.
Когда использовать wp_cron()
- Запуск периодических задач:
wp_cron()
используется для планирования и выполнения повторяющихся задач, таких как отправка писем, обновление данных и очистка базы. - Автоматизация рутинных операций: Крон-задачи удобны для выполнения задач, которые нужно запускать автоматически без участия пользователя.
- Настройка кастомных интервалов: Вы можете добавлять свои собственные интервалы для выполнения задач с определенной периодичностью.
Заключение
Функция wp_cron()
— это важный элемент системы автоматизации WordPress, позволяющий запускать запланированные задачи. Она упрощает создание периодических операций и обеспечивает надежную работу WP-Cron, включая задачи, такие как отправка писем, очистка данных и другие действия, которые требуют регулярного выполнения.