wp_transition_post_status()
Запускає хуки (події) для будь-яких змін статусів записів (з 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()
Хуки з функції
-
$new_status
(рядок) (обов’язковий) - Який статус посту буде.
-
$old_status
(рядок) (обов’язковий) - Який статус посту був?
-
$post
(WP_Post) (обов’язковий) - Дані посту. Об’єкт.
Приклади
#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); }
#2 Використання хука{$old_status}_to_{$new_status}
Додамо дію, що спрацьовуватиме при зміні статусу draft на publish – draft_to_publish
, тобто. при публікації чернетки.
add_action( 'draft_to_publish', function( $post ){ // ваш код } );
Якщо потрібно підключиться до моменту схвалення (pending) посту, потрібно використовувати хук pending_to_publish
.
#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' ) { // Пост знятий з публікації } }
#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 ) { // Статус посту змінено } }
#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 | Введено. |