# _update_term_count_on_transition_post_status()

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

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

## Сигнатура

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

## Описание

Например, стандартные счётчики терминов для записей (в произвольных таксономиях) не учитывают приватные записи и черновики.

## Параметры

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

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

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

```php
function _update_term_count_on_transition_post_status( $new_status, $old_status, $post ) {
	if ( $new_status === $old_status ) {
		return;
	}

	// Update counts for the post's terms.
	foreach ( (array) get_object_taxonomies( $post->post_type, 'objects' ) as $taxonomy ) {
		/** This filter is documented in wp-includes/taxonomy.php */
		$counted_statuses = apply_filters( 'update_post_term_count_statuses', array( 'publish' ), $taxonomy );

		/*
		 * Do not recalculate term count if both the old and new status are not included in term counts.
		 * This accounts for a transition such as draft -> pending.
		 */
		if ( ! in_array( $old_status, $counted_statuses, true ) && ! in_array( $new_status, $counted_statuses, true ) ) {
			continue;
		}

		/*
		 * Do not recalculate term count if both the old and new status are included in term counts.
		 *
		 * This accounts for transitioning between statuses which are both included in term counts. This can only occur
		 * if the `update_post_term_count_statuses` filter is in use to count more than just the 'publish' status.
		 */
		if ( in_array( $old_status, $counted_statuses, true ) && in_array( $new_status, $counted_statuses, true ) ) {
			continue;
		}

		$tt_ids = wp_get_object_terms( $post->ID, $taxonomy->name, array( 'fields' => 'tt_ids' ) );
		wp_update_term_count( $tt_ids, $taxonomy->name );
	}
}
```

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

- 3.3.0 — Introduced.

## Связанные

Использует: [`wp_update_term_count`](https://chugunov.pro/api-wordpress/functions/wp_update_term_count/), [`wp_get_object_terms`](https://chugunov.pro/api-wordpress/functions/wp_get_object_terms/), [`get_object_taxonomies`](https://chugunov.pro/api-wordpress/functions/get_object_taxonomies/), [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/).

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