wp_transition_post_status() WP 2.3.0

Запускає хуки (події) для будь-яких змін статусів записів (з draft на publish , publish на private і т.д.).

Ця функція викликається в ядрі WordPress з інших функцій, щоб повідомити плагіни, теми та функції ядра про зміну статусу запису. А точніше, її завжди викликають wp_publish_post() .

wp_insert_post() викликає цей хук завжди, коли створюється або оновлюється запис будь-якого типу (крім attachment).

Ця функція не змінює статус посту, вона лише викликає хуки. Для реальної зміни статусу посту потрібно оновити дані посту за допомогою відповідних функцій: wp_publish_post() .

Хуки, які викликає ця функція:

transition_post_status

Використовуйте, коли потрібно підключитися при будь-якій зміні статусу.

do_action( 'transition_post_status', $new_status, $old_status, $post);
(old_status)_to_(new_status)

Використовуйте, коли потрібно підключитися при конкретних змінах статусу (з одного на інший).

do_action( "{$old_status}_to_{$new_status}", $post);

Декілька корисних варіантів хука:

  • new_to_publish– при першій публікації нового запису, наприклад, якщо запис додається функцією wp_insert_post() .
  • auto-draft_to_publish– при першій публікації нового запису з адмінки WP.
  • draft_to_publish– При публікації, збереженого запису.
  • future_to_publish– При публікації запланованого запису.
(new_status)_(post_type)

Використовуйте коли потрібно зробити щось для зазначеного статусу та типу посту.

do_action( "{$new_status}_{$post->post_type}", $post->ID, $post );

Декілька корисних варіантів хука:

  • publish_post – Дозволяє зробити щось, коли пост (запис типу post) публікується чи оновлюється. Спрацьовує завжди коли створюється/оновлюється пост зі статусом publish . Тому, якщо потрібно робити щось один раз, тільки коли пост публікується (а не оновлюється), використовуйте хуки вище.

  • pending_post– спрацьовує щоразу коли створюється/оновлюється пост зі статусом pending .

  • draft_post– спрацьовує щоразу коли створюється/оновлюється чернетка – пост зі статусом draft .
Список усіх статусів, які можуть застосовуватись у хуках:
  • new– якщо ще не було встановлених жодних статусів.
  • publish– Опублікований пост (сторінка або тип запису).
  • pending– Запис на розгляді перед публікацією.
  • draft– чернетка запису.
  • auto-draft– лише створений пост, ще без заголовка, контенту та іншої інформації.
  • future– запис запланований до публікації у майбутньому.
  • private– запис не доступний не авторизованим користувачам.
  • inherit– ревізія чи вкладення (revision or attachment). Дивіться get_children() .
  • trash– запис, що знаходиться в кошику.
Основа для:
wp_publish_post()

Хуки з функції
wp_transition_post_status($new_status, $old_status, $post);
$new_status
(рядок) (обов’язковий)
Який статус посту буде.
$old_status
(рядок) (обов’язковий)
Який статус посту був?
$post
(WP_Post) (обов’язковий)
Дані посту. Об’єкт.

Приклади

0

#1 Подивимося як працює функція

Для цього погляньмо на код функції wp_publish_post() :

function wp_publish_post( $post ) {
	Global $wpdb;

	if ( ! $post = get_post( $post ) )
		return;

	if ( 'publish' == $post->post_status )
		return;

	$wpdb->update( $wpdb->posts, array( 'post_status' => 'publish' ), array( 'ID' => $post->ID ) );

	clean_post_cache( $post->ID );

	$old_status = $post->post_status;
	$post->post_status = 'publish';

	// тепер, коли статус посту змінено, викликаємо хуки,
	// До яких надалі зможуть підключитися плагіни, теми та інші функції.
	wp_transition_post_status( 'publish', $old_status, $post );

	do_action( 'edit_post', $post->ID, $post );

	do_action( "save_post_{$post->post_type}", $post->ID, $post, true);

	do_action( 'save_post', $post->ID, $post, true);

	do_action( 'wp_insert_post', $post->ID, $post, true);
}
0

#2 Використання хука{$old_status}_to_{$new_status}

Додамо дію, що спрацьовуватиме при зміні статусу draft на publishdraft_to_publish, тобто. при публікації чернетки.

add_action( 'draft_to_publish', function( $post ){
	// ваш код
} );

Якщо потрібно підключиться до моменту схвалення (pending) посту, потрібно використовувати хук pending_to_publish.

0

#3 Використання хукаtransition_post_status

Це загальний хук, який спрацьовує коли нам потрібно підключитися в момент зміни будь-якого статусу на будь-який. Хук передає 3 параметри: $ new_status, $ old_status, $ post.

Цей приклад показує, як підключатися, коли статус поста змінюється з publish на будь-який інший статус:

add_action( 'transition_post_status', 'post_unpublished', 10, 3);
function post_unpublished( $new_status, $old_status, $post ) {
	if ( $old_status == 'publish' && $new_status != 'publish' ) {
		// Пост знятий з публікації
	}
}
0

#4 Хук, що спрацьовує за будь-якої зміни статусу

add_action( 'transition_post_status', 'intercept_all_status_changes', 10, 3);
function intercept_all_status_changes( $new_status, $old_status, $post ) {
	if ( $new_status != $old_status ) {
		// Статус посту змінено
	}
}
0

#5 Використання хука{$new_status}_{$post->post_type}

Якщо потрібно підключитися до поточного статусу, незалежно від того, який статус до цього використовуємо конструкцію: СТАТУС_ТИПЗАПИСИ .

Наприклад, якщо потрібно щось зробити, коли пост зі статусом publish публікується або оновлюється, то конструкція буде виглядати так publish_post:

add_action( 'publish_post', 'publish_post_action', 10, 2);
function publish_post_action( $post_id, $post ){
	// робимо щось при публікації посту
}

Зверніть увагу, що цей хук спрацьовуватиме і при оновленні запису, якщо при оновленні статус вказаний publish або якщо статус не був вказаний, але при цьому до цього він був publish .

список змін

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

wp transition post status WP 6.0.2

function wp_transition_post_status( $new_status, $old_status, $post ) {
	/**
	 * Fires when a post is transitioned з одного status до іншого.
	 *
	 * @ Since 2.3.0
	 *
	 * @param string $new_status New post status.
	 * @param string $old_status Old post status.
	 * @param WP_Post $post Post об'єкт.
	 */
	do_action( 'transition_post_status', $new_status, $old_status, $post);

	/**
	 * Fires when a post is transitioned з одного status до іншого.
	 *
	 * The dynamic portions of hook name, `$new_status` and `$old_status`,
	 * refer to the old and new post statuses, respectively.
	 *
	 * Possible hook names include:
	 *
	 * - `draft_to_publish`
	 * - `publish_to_trash`
	 * - `pending_to_draft`
	 *
	 * @ Since 2.3.0
	 *
	 * @param WP_Post $post Post об'єкт.
	 */
	do_action( "{$old_status}_to_{$new_status}", $post);

	/**
	 * Fires when a post is transitioned з одного status до іншого.
	 *
	 * The dynamic portions of hook name, `$new_status` and `$post->post_type`,
	 * refer to the new post status and post type, respectively.
	 *
	 * Possible hook names include:
	 *
	 * - `draft_post`
	 * - `future_post`
	 * - `pending_post`
	 * - `private_post`
	 * - `publish_post`
	 * - `trash_post`
	 * - `draft_page`
	 * - `future_page`
	 * - `pending_page`
	 * - `private_page`
	 * - `publish_page`
	 * - `trash_page`
	 * - `publish_attachment`
	 * - `trash_attachment`
	 *
	 * Please note: Якщо ця функція використовується, ви можете отримати особливу статтю (like
	 * 'publish', as `publish_{$post->post_type}`), it will fire both when a post is
	 * First transitioned to that status from something else, as well as upon
	 * subsequent post updates (old and new status are both the same).
	 *
	 * Therefore, if you are looking to only fire a callback when a post is first
	 * transitioned to a status, використовуючи {@see 'transition_post_status'} hook instead.
	 *
	 * @ Since 2.3.0
	 * @since 5.9.0 Added `$old_status` parameter.
	 *
	 * @param int $post_id Post ID.
	 * @param WP_Post $post Post об'єкт.
	 * @param string $old_status Old post status.
	 */
	do_action( "{$new_status}_{$post->post_type}", $post->ID, $post, $old_status );
}

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

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