Функция wp_update_term_count()
обновляет количество записей, связанных с терминами (элементами таксономии) в указанной таксономии.
Функция используется для пересчёта количества записей, прикреплённых к конкретным терминам. Если для таксономии задан собственный callback для подсчёта записей (через параметр update_count_callback
при регистрации таксономии с помощью register_taxonomy()
), то используется этот callback.
По умолчанию используются функции:
_update_post_term_count( $terms, $taxonomy )
— для записей (постов), связанных с терминами._update_generic_term_count( $terms, $taxonomy )
— для других типов объектов (например, пользователей).
После пересчёта обновлённое количество записей сохраняется в поле count
таблицы wp_term_taxonomy
.
wp_update_term_count( int|array $terms, string $taxonomy, bool $do_deferred = false ): bool
Параметры
$terms
(int|array) — ID термина (или массив ID), который нужно пересчитать. Это полеterm_taxonomy_id
из таблицыwp_term_taxonomy
.$taxonomy
(string) — Название таксономии, к которой относятся указанные термины.$do_deferred
(bool, по умолчанию:false
) — Нужно ли откладывать пересчёт. Этот параметр используется вместе с функциейwp_defer_term_counting()
для оптимизации пересчёта при массовых операциях.
Возвращаемое значение
true
— если подсчёт был успешным.false
— если не удалось выполнить операцию (например, не переданы термины).
Пример 1: Обновление количества записей в конкретных рубриках
Допустим, необходимо обновить количество записей в рубриках с ID 12 и 13 после добавления новой записи.
wp_update_term_count( array( 12, 13 ), 'category' );
В этом примере функция обновит счётчики записей для терминов с ID 12 и 13 в таксономии category
.
Пример 2: Пересчёт количества записей для всех терминов таксономии
Для обновления количества записей во всех терминах определённой таксономии, например, для всех рубрик (category
), можно использовать следующий код:
$taxonomy = 'category';
$terms = get_terms( array(
'taxonomy' => $taxonomy,
'hide_empty' => false,
) );
foreach ( $terms as $term ) {
wp_update_term_count( $term->term_id, $taxonomy );
}
Этот код выполняет следующие шаги:
- Получает все термины для таксономии
category
с помощью функцииget_terms()
, включая пустые термины. - Перебирает каждый термин и обновляет количество записей в нём с помощью функции
wp_update_term_count()
.
Этот процесс может занять некоторое время на больших сайтах с большим количеством терминов и записей.
Пример 3: Использование отложенного пересчёта
При выполнении массовых операций, например, при импорте или обновлении большого количества постов, целесообразно использовать отложенный пересчёт, чтобы избежать лишних вызовов.
wp_defer_term_counting( true );
// Выполнение массовых операций, добавление постов и терминов...
wp_defer_term_counting( false ); // Включаем пересчёт
Функция wp_defer_term_counting()
временно отключает пересчёт термов, а затем включает его обратно.
Заключение
Функция wp_update_term_count()
— это мощный инструмент для управления таксономиями в WordPress, позволяющий обновлять количество записей, связанных с терминами. Она особенно полезна для случаев, когда требуется точный пересчёт количества записей после различных изменений (например, добавление или удаление записей, массовое обновление таксономий).
Используя эту функцию, разработчики могут вручную контролировать процесс пересчёта, а также оптимизировать производительность через отложенный пересчёт с помощью wp_defer_term_counting()
. Это особенно важно для сайтов с большими объёмами данных, где автоматический пересчёт может замедлять работу сайта.
Также важно отметить, что wp_update_term_count()
может быть заменена пользовательским callback-функциями, что позволяет кастомизировать процесс пересчёта в зависимости от специфики проекта. Это делает её гибким решением для сложных проектов, где стандартного механизма может быть недостаточно.