## WP_TRANSITION_POST_STATUS() │ WP 2.3.0
Функция WP_TRANSITION_POST_STATUS() отвечает за обработку изменения статуса поста в WordPress. Например, когда пост переходит из черновика в опубликованный статус или из опубликованного в закрытый.
Важно отметить, что эта функция **не меняет статус поста сама по себе**, а только вызывает три хуки. Она используется другими функциями после изменения статуса, чтобы уведомить плагины, темы и основные функции о том, что статус поста изменился. Для реального изменения статуса поста используйте функции wp_update_post() или wp_publish_post().
### Хуки функции
- **transition_post_status**
Используется, когда нужно реагировать на любое изменение статуса поста.
```php
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- срабатывает каждый раз, когда вы обновляете/создаете пост со статусом «опубликован».pending_post- срабатывает каждый раз, когда вы обновляете/создаете пост со статусом «ожидание».draft_post- срабатывает каждый раз, когда вы обновляете/создаете пост со статусом «черновик».
Список всех статусов, которые могут использоваться в хуках выше
new- если статус ещё не установлен.publish- опубликованный пост (страница, пост или другой тип поста).pending- пост на проверке перед публикацией.draft- черновик поста.auto-draft- только созданный пост без заголовка и контента.future- пост запланирован к публикации в будущем.private- пост недоступен неавторизованным пользователям.inherit- ревизия или вложение.trash- пост в корзине.
Эта функция уже используется там, где она нужна в основных возможностях WordPress. Нет необходимости вызывать её при изменении статуса поста через wp_update_post() или wp_insert_post().
Пример использования
wp_transition_post_status( $new_status, $old_status, $post );
Параметры функции
$new_status(string, обязательный) - новый статус поста.$old_status(string, обязательный) - предыдущий статус поста.$post(WP_Post, обязательный) - данные поста.
Примеры использования
Пример 1: Хук при любом изменении статуса
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 ) {
// Статус поста изменился
}
}
Пример 2: Как работает функция
Посмотрим на код функции 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 );
}
Пример 3: Использование хука transition_post_status
add_action( 'transition_post_status', 'post_unpublished', 10, 3 );
function post_unpublished( $new_status, $old_status, $post ) {
if ( $old_status == 'publish' && $new_status != 'publish' ) {
// Пост убран из публикации
}
}
Пример 4: Использование хука draft_to_publish
add_action( 'draft_to_publish', function( $post ){
// Ваш код для обработки публикации черновика
} );
Пример 5: Использование хуков по типу поста
Если вы хотите выполнить действие, когда пост со статусом «опубликован» публикуется или обновляется:
add_action( 'publish_post', 'publish_post_action', 10, 2 );
function publish_post_action($post_id, $post){
// Действие при публикации поста
}
Изменения с версии 2.3.0
Функция была введена в версии 2.3.0. Она продолжает активно использоваться в WordPress и позволяет гибко управлять изменениями статусов постов и выполнять соответствующие действия.
Заключение
Функция wp_transition_post_status() - это мощный инструмент для работы со статусами постов в WordPress. Она предоставляет разработчикам возможность настраивать и реагировать на изменения статусов, что играет важную роль в процессе управления контентом.