wp_update_term_count()WP 2.3.0

Обновляет/пересчитывает количество записей в элементе таксономии (термине).

Для обновления количества записей, можно установить свою функцию. Название такой функции устанавливается в объекте таксономии в поле update_count_callback при регистрации таксономии с помощью register_taxonomy() или можно установить чуть позднее, изменив данные таксономии и установив называние функции в указанное поле.

По умолчанию для подсчета используются функции:

  • _update_post_term_count( $terms, $taxonomy ) - для записей, которые только что опубликованы и прикрепляются к термину.
  • _update_generic_term_count( $terms, $taxonomy ) - для других объектов (например, пользователь), которые прикрепляются к термину.

По умолчанию подсчитывается количество связей термина с записью, после подсчета данные обновляются в поле count таблицы wp_term_taxonomy.

Смотрите также wp_defer_term_counting() - она напрямую связана с этой функцией.

Работает на основе: wp_update_term_count_now()

Хуков нет.

Возвращает

true|false.

  • false – когда нет указанных терминов.
  • true – когда удалось обновить значение поля.

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

wp_update_term_count( $terms, $taxonomy );
$terms(число/массив) (обязательный)
Число или массив чисел из поля term_taxonomy_id таблицы wp_term_relationships. C версии WP 4.4 оно должно совпадать с ID термина.
$taxonomy(строка) (обязательный)
Название таксономии, к которой принадлежат указанные в $terms числа.
$do_deferred(true/false)
Внутренний параметр. В обычной жизни не используется. Нужен для работы функции wp_defer_term_counting()

Примеры

1

#1 Обновление количества записей в рубриках

Обновим кол. записей в рубриках 12 и 13, например когда была добавлена новая запись. Такое обновление делает функция wp_insert_post() через вызов wp_set_object_terms().

wp_update_term_count( array(12,13), 'category' );
1

#2 Как пересчитать количество записей во всех элементах таксономии?

Чтобы обновить количество записей для всех терминов таксономии в WordPress, вы можете использовать функцию wp_update_term_count(). Эта функция пересчитывает количество постов, связанных с каждым термином в указанной таксономии, и обновляет счетчик терминов для каждого термина в базе данных.

Вот пример того, как можно обновить количество постов для всех терминов в таксономии category:

$taxonomy = 'category';
$terms = get_terms( [
	'taxonomy' => $taxonomy,
	'hide_empty' => false,
] );

foreach ( $terms as $term ) {
	wp_update_term_count( $term->term_id, $taxonomy );
}

В этом примере мы сначала получаем все термины для указанной таксономии с помощью функции get_terms(). Затем перебираем все термины и обновляем количество постов в них.

Обратите внимание, что в зависимости от количества терминов и постов на вашем сайте, эта операция может занять некоторое время.

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

С версии 2.3.0 Введена.

Код wp_update_term_count() WP 6.5.2

function wp_update_term_count( $terms, $taxonomy, $do_deferred = false ) {
	static $_deferred = array();

	if ( $do_deferred ) {
		foreach ( (array) array_keys( $_deferred ) as $tax ) {
			wp_update_term_count_now( $_deferred[ $tax ], $tax );
			unset( $_deferred[ $tax ] );
		}
	}

	if ( empty( $terms ) ) {
		return false;
	}

	if ( ! is_array( $terms ) ) {
		$terms = array( $terms );
	}

	if ( wp_defer_term_counting() ) {
		if ( ! isset( $_deferred[ $taxonomy ] ) ) {
			$_deferred[ $taxonomy ] = array();
		}
		$_deferred[ $taxonomy ] = array_unique( array_merge( $_deferred[ $taxonomy ], $terms ) );
		return true;
	}

	return wp_update_term_count_now( $terms, $taxonomy );
}