publish_postхук-событиеWP 2.3.0

Позволяет сделать что-либо, когда пост (запись типа post) публикуется или обновляется.

Этот хук срабатывает всегда, а НЕ только при публикации поста. Т.е. сработает:

  • При первом переходе поста в статус опубликовано (publish) из другого статуса.
  • А также при последующих обновлениях уже опубликованного поста.

wp_insert_post() вызывает этот хук всегда. Поэтому, если нужно делать что-либо один раз, только когда пост публикуется (а не обновляется), используйте:

  • Хуки из семейства (old_status)_to_(new_status):

    • new_to_publish - при первой публикации новой записи, например если запись добавляется функцией wp_insert_post().
    • auto-draft_to_publish - при первой публикации новой записи из админки WP.
    • draft_to_publish - при публикации, сохраненной записи.
    • future_to_publish - при публикации запланированной записи.
  • Или хук transition_post_status - срабатывает при любом обновлении записи или смене статуса.

Для страниц (записей типа page) этот хук будет иметь название publish_page. Для вложений publish_attachment и т.д.

Это один из вариантов динамического хука (new_status)_(post_type)

Использование

add_action( 'publish_post', 'wp_kama_publish_post_action', 10, 3 );
function wp_kama_publish_post_action( $post_id, $post, $old_status ){
	// action...
}
$post_id(int)
ID поста.
$post(WP_Post)
Объект поста WP_Post.
$old_status(строка)
Старый статус поста.

Примеры

0

#1 Делаем что-либо для опубликованного поста

Этот пример показывает как сделать что-либо, когда пост публикуется или обновляется пост со статусом publish:

add_action( 'publish_post', 'publish_post_action', 10, 2 );

function publish_post_action( $post_id, $post ){

	// делаем что-то при публикации поста
}

Список изменений

С версии 2.3.0 Введена.
С версии 5.9.0 Added $old_status parameter.

Где вызывается хук

wp_transition_post_status()
publish_post
wp-includes/post.php 5375
do_action( "{$new_status}_{$post->post_type}", $post->ID, $post, $old_status );

Где используется хук в WordPress

wp-includes/default-filters.php 264
add_action( $action, '_delete_option_fresh_site', 0 );
wp-includes/default-filters.php 404
add_action( 'publish_post', '_publish_post_hook', 5, 1 );