Хуки при смене статусов постов

В версии WordPress 2.3 появилось три вида потрясающих хуков, которые запускаются при смене статуса поста:

  1. transition_post_status,
  2. {старый_статус}_to_{новый_статус},
  3. {новый_статус}_{тип_записи}.

Суть каждого из них примерно одинакова, поэтому вы можете использовать любой, который считаете более удобным.

А сейчас остановимся на каждом из них поподробнее.

Хук transition_post_status

transition_post_status имеет три параметра:

$new_status
Новый статус поста.
$old_status
Старый статус поста.
$post
Объект поста.

Пример 1. Запускаем функцию при любой смене статуса

function ljubaja_smena_statusa( $new_status, $old_status, $post ) {
	// по сути всё, что нам нужно, это проверить, чтобы старый статус не был равен новому
	if ( $new_status != $old_status ) {
		// дальше выполняем необходимые действия
	}
}
add_action(  'transition_post_status',  'ljubaja_smena_statusa', 10, 3 );

Хук {старый_статус}_to_{новый_статус}

Этот хук имеет только один параметр — объект поста, как видите, статусы задаются непосредственно в самом хуке. Вариантов может быть множество future_to_publish, pending_to_future, draft_to_publish и так далее.

Вот ссылка, где перечислены все стандартные статусы постов.

Пример 2. Запускаем функцию, когда запланированный пост отправляется в публикацию

function v_publikaciju( $post ) {
	// дальше выполняем необходимые действия
}
add_action(  'future_to_publish',  'v_publikaciju', 10, 1 );

Хук {новый_статус}_{тип_записи}

Данный тип хуков очень часто встречается в темах и плагинах WordPress. Уверен, вы уже не раз работали с его разновидностями, например хук publish_post срабатывает при публикации записи, future_post — когда запись меняет свой статус на «Запланированная».

Также вместо post можно указать и другой тип поста, например page (страницы), тогда хук publish_page будет срабатывать уже при публикации страниц.

Пример 3. Функция, срабатывающая при публикации страниц

function publikacija_stranic( $ID, $post ) {
	// хук имеет два параметра - ID поста и объект поста
}
add_action(  'publish_page',  'publikacija_stranic', 10, 2 );

Устаревшие хуки

С версии 2.3 хуки private_to_published и publish_future_post устарели и должны быть заменены на соответствующие новые аналоги.

Старый Новый аналог
private_to_published private_to_publish
publish_future_post future_to_publish
Миша Рудрастых Разработчик WordPress WooCommerce

Миша Рудрастых

Впервые познакомился с WordPress в 2009 году, и после двух лет мучений с Joomla и самописными движками это был просто бальзам на душу. С 2014 года меня можно встретить на WordCamp — официальной конфе по WP в Москве, иногда там выступаю. Также в настоящее время веду курсы по WordPress в Epic Skills в Питере.

Смотрите также