# _update_post_term_count()

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

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

## Сигнатура

```php
_update_post_term_count( int[] $terms, WP_Taxonomy $taxonomy )
```

## Описание

Приватная функция для функции обратного вызова по умолчанию для таксономий post_tag и category.

## Параметры

- `$terms` `int[]` — обязательный. Список term_taxonomy_id.
- `$taxonomy` `WP_Taxonomy` — обязательный. Текущий объект таксономии терминов.

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

Файл: `wp-includes/taxonomy.php:4151`

```php
function _update_post_term_count( $terms, $taxonomy ) {
	global $wpdb;

	$object_types = (array) $taxonomy->object_type;

	foreach ( $object_types as &$object_type ) {
		list( $object_type ) = explode( ':', $object_type );
	}

	$object_types = array_unique( $object_types );

	$check_attachments = array_search( 'attachment', $object_types, true );
	if ( false !== $check_attachments ) {
		unset( $object_types[ $check_attachments ] );
		$check_attachments = true;
	}

	if ( $object_types ) {
		$object_types = esc_sql( array_filter( $object_types, 'post_type_exists' ) );
	}

	$post_statuses = array( 'publish' );

	/**
	 * Filters the post statuses for updating the term count.
	 *
	 * @since 5.7.0
	 *
	 * @param string[]    $post_statuses List of post statuses to include in the count. Default is 'publish'.
	 * @param WP_Taxonomy $taxonomy      Current taxonomy object.
	 */
	$post_statuses = esc_sql( apply_filters( 'update_post_term_count_statuses', $post_statuses, $taxonomy ) );

	foreach ( (array) $terms as $tt_id ) {
		$count = 0;

		// Attachments can be 'inherit' status, we need to base count off the parent's status if so.
		if ( $check_attachments ) {
			// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration
			$count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts p1 WHERE p1.ID = $wpdb->term_relationships.object_id AND ( post_status IN ('" . implode( "', '", $post_statuses ) . "') OR ( post_status = 'inherit' AND post_parent > 0 AND ( SELECT post_status FROM $wpdb->posts WHERE ID = p1.post_parent ) IN ('" . implode( "', '", $post_statuses ) . "') ) ) AND post_type = 'attachment' AND term_taxonomy_id = %d", $tt_id ) );
		}

		if ( $object_types ) {
			// phpcs:ignore WordPress.DB.PreparedSQLPlaceholders.QuotedDynamicPlaceholderGeneration
			$count += (int) $wpdb->get_var( $wpdb->prepare( "SELECT COUNT(*) FROM $wpdb->term_relationships, $wpdb->posts WHERE $wpdb->posts.ID = $wpdb->term_relationships.object_id AND post_status IN ('" . implode( "', '", $post_statuses ) . "') AND post_type IN ('" . implode( "', '", $object_types ) . "') AND term_taxonomy_id = %d", $tt_id ) );
		}

		/**
		 * Fires when a term count is calculated, before it is updated in the database.
		 *
		 * @since 6.9.0
		 *
		 * @param int    $tt_id         Term taxonomy ID.
		 * @param string $taxonomy_name Taxonomy slug.
		 * @param int    $count         Term count.
		 */
		do_action( 'update_term_count', $tt_id, $taxonomy->name, $count );

		/** This action is documented in wp-includes/taxonomy.php */
		do_action( 'edit_term_taxonomy', $tt_id, $taxonomy->name );
		$wpdb->update( $wpdb->term_taxonomy, compact( 'count' ), array( 'term_taxonomy_id' => $tt_id ) );

		/** This action is documented in wp-includes/taxonomy.php */
		do_action( 'edited_term_taxonomy', $tt_id, $taxonomy->name );
	}
}
```

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

- 2.3.0 — Introduced.

## Связанные

Использует: [`esc_sql`](https://chugunov.pro/api-wordpress/functions/esc_sql/), `wpdb::update`, [`apply_filters`](https://chugunov.pro/api-wordpress/functions/apply_filters/), [`do_action`](https://chugunov.pro/api-wordpress/functions/do_action/), `wpdb::get_var`, `wpdb::prepare`.
Используется в: [`wp_update_term_count_now`](https://chugunov.pro/api-wordpress/functions/wp_update_term_count_now/).

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