WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru Платформа для конвертации и монетизации трафика

wp_cron() WP 2.1

Запускает все запланированные Крон события, время которых подошло.

Проверяет существует ли хоть одно задание с подошедшем временем. Если да, то вызывает функцию spawn_cron(), которая в свою очередь создает запрос на файл крона /example.com/wp-cron.php.

При вызове этой функции, будут запущены все действия, которые были запланированы и время их запуска уже наступило.

Подробнее про крон читайте в описании функции wp_schedule_event(), которая создает новое крон-событие. Там куча примеров и по сути все то, что нужно знать о крон в WordPress.

Эту функцию не нужно вызывать отдельно. Она вызывается автоматически на событии init:

if ( ! defined( 'DOING_CRON' ) ) {
	add_action( 'init', 'wp_cron' );
}

Если где-то определена константа DISABLE_WP_CRON, то функция ничего не запустит.

Cron — это название взято из UNIX-подобных операционных систем, где в задачи этого демон-планировщика входит: периодическое выполнение заданий в определённое время.

Подробно о Крон: WP Cron (планировщик) в WordPress

Хуков нет.

Возвращает

int/false.

  • Число — при успешном выполнении — число отработанных событий (0 означает что сейчас нет событий которые нужно выполнить).
  • false — когда не удалось обработать хоть одно событие.

Использование

<?php wp_cron() ?>

Примеры

#1. Пример, отправки сообщения ежечасно на email.

Код можно поместить, например, в файл темы functions.php.

// включаем крон задачу, если она еще не включена. 
// Лучше это делать один раз при активации плагина, например
if ( ! wp_next_scheduled( 'my_task_hook' ) ) {
	wp_schedule_event( time(), 'hourly', 'my_task_hook' );
}

// добавляем крон хук
add_action( 'my_task_hook', 'my_task_function' );
function my_task_function() {
	wp_mail( 'your@email.com', 'Автоматическое письмо', 'Запланированное письмо от WordPress.');
}

#2. Добавление крон задачи и своего интервала

Код нужно добавлять в файл functions.php или плагин.

add_filter( 'cron_schedules', 'mycron_add_schedule' );
add_action( 'init', 'mycron_add_hook' );

## добавляет крон функцию
function mycron_add_hook(){
	if ( ! wp_next_scheduled( 'my_cron_worker_start' ) ) { 
		wp_schedule_event( time(), 'my_cron_worker', 'my_cron_worker_start' ); 
	}
}

## добавляет крон интервал времени
function mycron_add_schedule( $schedules ){
	$schedules['my_cron_worker'] = array( 'interval' => 60, 'display' => 'My Cron Worker' );
	return $schedules;
}

Список изменений

С версии 2.1.0 Введена.
С версии 5.1.0 Return value added to indicate success or failure.

Код wp_cron() WP 5.6.2

<?php
function wp_cron() {
	// Prevent infinite loops caused by lack of wp-cron.php.
	if ( strpos( $_SERVER['REQUEST_URI'], '/wp-cron.php' ) !== false || ( defined( 'DISABLE_WP_CRON' ) && DISABLE_WP_CRON ) ) {
		return 0;
	}

	$crons = wp_get_ready_cron_jobs();
	if ( empty( $crons ) ) {
		return 0;
	}

	$gmt_time = microtime( true );
	$keys     = array_keys( $crons );
	if ( isset( $keys[0] ) && $keys[0] > $gmt_time ) {
		return 0;
	}

	$schedules = wp_get_schedules();
	$results   = array();
	foreach ( $crons as $timestamp => $cronhooks ) {
		if ( $timestamp > $gmt_time ) {
			break;
		}
		foreach ( (array) $cronhooks as $hook => $args ) {
			if ( isset( $schedules[ $hook ]['callback'] ) && ! call_user_func( $schedules[ $hook ]['callback'] ) ) {
				continue;
			}
			$results[] = spawn_cron( $gmt_time );
			break 2;
		}
	}

	if ( in_array( false, $results, true ) ) {
		return false;
	}
	return count( $results );
}

Из метки: cron (расписание schedule)

25 комментов
Полезные 1 Вопросы 2 Все
    Войти