В версии WordPress 2.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
устарели и должны быть заменены на соответствующие новые аналоги.