# _transition_post_status()

URL: https://chugunov.pro/api-wordpress/functions/_transition_post_status/
Проверено на WordPress 6.9, обновлено 06.08.2026.
Источник: независимый русскоязычный справочник chugunov.pro. Не является официальной документацией WordPress.

Тип: функция.
Появился в версии: 2.3.0.

## Сигнатура

```php
_transition_post_status( string $new_status, string $old_status, WP_Post $post )
```

## Описание

См. alsowp_clear_scheduled_hook()

## Параметры

- `$new_status` `string` — обязательный. Новый статус записи.
- `$old_status` `string` — обязательный. Предыдущий статус записи.
- `$post` `WP_Post` — обязательный. Объект записи.

## Исходный код

Файл: `wp-includes/post.php:7931`

```php
function _transition_post_status( $new_status, $old_status, $post ) {
	global $wpdb;

	if ( 'publish' !== $old_status && 'publish' === $new_status ) {
		// Reset GUID if transitioning to publish and it is empty.
		if ( '' === get_the_guid( $post->ID ) ) {
			$wpdb->update( $wpdb->posts, array( 'guid' => get_permalink( $post->ID ) ), array( 'ID' => $post->ID ) );
		}

		/**
		 * Fires when a post's status is transitioned from private to published.
		 *
		 * @since 1.5.0
		 * @deprecated 2.3.0 Use 'private_to_publish' instead.
		 *
		 * @param int $post_id Post ID.
		 */
		do_action_deprecated( 'private_to_published', array( $post->ID ), '2.3.0', 'private_to_publish' );
	}

	// If published posts changed clear the lastpostmodified cache.
	if ( 'publish' === $new_status || 'publish' === $old_status ) {
		foreach ( array( 'server', 'gmt', 'blog' ) as $timezone ) {
			wp_cache_delete( "lastpostmodified:$timezone", 'timeinfo' );
			wp_cache_delete( "lastpostdate:$timezone", 'timeinfo' );
			wp_cache_delete( "lastpostdate:$timezone:{$post->post_type}", 'timeinfo' );
		}
	}

	if ( $new_status !== $old_status ) {
		wp_cache_delete( _count_posts_cache_key( $post->post_type ), 'counts' );
		wp_cache_delete( _count_posts_cache_key( $post->post_type, 'readable' ), 'counts' );
	}

	// Always clears the hook in case the post status bounced from future to draft.
	wp_clear_scheduled_hook( 'publish_future_post', array( $post->ID ) );
}
```

## История изменений

- 2.3.0 — Introduced.

## Связанные

Использует: [`do_action_deprecated`](https://chugunov.pro/api-wordpress/functions/do_action_deprecated/), [`wp_clear_scheduled_hook`](https://chugunov.pro/api-wordpress/functions/wp_clear_scheduled_hook/), [`wp_cache_delete`](https://chugunov.pro/api-wordpress/functions/wp_cache_delete/), [`get_the_guid`](https://chugunov.pro/api-wordpress/functions/get_the_guid/), [`_count_posts_cache_key`](https://chugunov.pro/api-wordpress/functions/_count_posts_cache_key/), [`wp_count_posts`](https://chugunov.pro/api-wordpress/functions/wp_count_posts/), `wpdb::update`, [`get_permalink`](https://chugunov.pro/api-wordpress/functions/get_permalink/).

Оригинал в официальной документации: https://developer.wordpress.org/reference/functions/_transition_post_status/
