shutdown хук-подіяWP 1.2.0

Спрацьовує в момент, коли PHP скрипт завершив усі свої операції або була викликана функція exit() .

Хук спрацює в будь-яких умовах, наприклад, якщо закінчився час виконання скрипту або скрипт обірваний через exit або якось ще, тому через нього зручно ловити якісь непередбачену логіку і якось обробляти або його зручно використовувати коли потрібно, щоб код був виконаний. в будь-якій ситуації.

Принцип роботи хука такий: на PHP функцію register_shutdown_function() повішена функція shutdown_action_hook() , яка, у свою чергу, викликає хук shutdown :

// Реєстрація функції, яка спрацює перед завершенням роботи скрипту
register_shutdown_function( 'shutdown_action_hook');

// Сама функція
function shutdown_action_hook() {

	// Описуваний хук
	do_action( 'shutdown');

	wp_cache_close();
}

Використання

add_action( 'shutdown', 'wp_kama_shutdown_action');

/**
 * Function for `shutdown` action-hook.
 *
 * @return void
 */
function wp_kama_shutdown_action(){

	// action...
}

Приклади

0

#1 Додавання безмежної кількості записів

Коли потрібно додати багато записів у базу даних, можна зіткнутися з проблемою: сервер зупиняє скрипт, що працює, через обмеження часу виконання скрипта (як правило 30 секунд). Це обмеження можна обійти за допомогою хука shutdown . Проте, такий обхід можна зробити не всіх серверах, тобто. це залежить від налаштувань сервера (викликає сервер функцію register_shutdown_function() щоразу при перевищенні ліміту часу роботи PHP).

Цей код лише для прикладу:

## Запускає процес генерації записів через додавання URL параметра init_new_posts_creation.
if ( isset( $_GET['init_new_posts_creation'] ) ) {
	// Запускає додавання записів до бази.
	add_action( 'init', 'create_new_posts');

	// Коли скрипт буде зупинено сервером, спрацює цей хук і запустить цю функцію.
	add_action( 'shutdown', 'reinit_create_new_posts');
}

## Запускає процес створення записів.
## Записує тривалість процесу генерації записів у секундах.
function reinit_create_new_posts() {
	// перерахуємо те, що там у нас набралося...
	wp_defer_term_counting(false);
	wp_defer_comment_counting(false);

	// Запускає процес створення записів.
	create_new_posts();
}

## Додає тестові записи до бази даних.
function create_new_posts() {

	static $index, $bigest_id;

	$creat_posts = (int) ($_GET['init_new_posts_creation']?: 10); // Скільки постів створити?

	// функція запустилася вперше
	if( $index === null ){
		Global $wpdb;
		$bigest_id = $wpdb->get_var("SELECT MAX(ID) FROM $wpdb->posts")?: 1;
		$index = $bigest_id;
	}
	else {
		// Скільки ще залишилося створити?
		$creat_posts = $creat_posts - ($index - $bigest_id);
		$bigest_id = $index;
	}

	// Все створено!
	if( $creat_posts <= 0 ){
		/ / Записує час виконання генерації записів.
		update_option( 'time_spent_to_create_posts', timer_stop(), false );
		return;
	}

	// Відключаємо операції, які уповільнюють додавання записів.
	wp_suspend_cache_addition (true);

	wp_defer_term_counting (true);
	wp_defer_comment_counting (true);

	// Генерує масив, що визначає кількість записів, що генеруються.
	$range = range($bigest_id, $bigest_id + $creat_posts);
	foreach ($range as $id) {
		sleep(1);

		// Дані записи.
		$post_data = [
			'post_title' => 'Заголовок запису' . $id,
			'post_content' => 'Тут має бути контент (текст) запису' . $id,
			'post_status' => 'draft', // з таким статусом запис додається швидше,
									   // потім одним разом змінимо у всіх доданих
									   // записів на publish
		];

		// Додає запис до бази даних.
		wp_insert_post(wp_slash($post_data));

		$index++;
	}

	wp_defer_term_counting (false);
	wp_defer_comment_counting(false);

}

список змін

З версії 1.2.0Введено.

Де викликається хук

shutdown

wp-includes/load.php 1102

do_action( 'shutdown');

Де використовується хук у WordPress

wp-includes/default-filters.php 408

add_action( 'shutdown', 'wp_ob_end_flush_all', 1);

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *