wp_update_term_count()
Обновляет/пересчитывает количество записей в элементе таксономии (термине).
Для обновления количества записей, можно установить свою функцию. Название такой функции устанавливается в объекте таксономии в поле 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().
Хуков нет.
Возвращает
true|false.
false– когда нет указанных терминов.true– когда удалось обновить значение поля.
Использование
wp_update_term_count( $terms, $taxonomy, $do_deferred );
- $terms(число/массив) (обязательный)
- Число или массив чисел из поля
term_taxonomy_idтаблицыwp_term_relationships.
C WP 4.4 оно должно совпадать с ID термина. Подробнее читайте здесь. - $taxonomy(строка) (обязательный)
- Название таксономии, к которой принадлежат указанные в $terms числа.
- $do_deferred(true/false)
- Внутренний параметр. В обычной жизни не используется. Нужен для работы функции wp_defer_term_counting()
Примеры
#1 Обновление количества записей в рубриках
Обновим кол. записей в рубриках 12 и 13, например когда была добавлена новая запись. Такое обновление делает функция wp_insert_post() через вызов wp_set_object_terms().
wp_update_term_count( array(12,13), 'category' );
#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(). Затем перебираем все термины и обновляем количество постов в них.
Обратите внимание, что в зависимости от количества терминов и постов на вашем сайте, эта операция может занять некоторое время.
Вариант если ваш сайт работал на WP 4.4 или более ранней
Для старых версий WP значения полей таксономий term_id и term_taxonomy_id отличались, а по=хорошему в эту функцию нужно передавать значение term_taxonomy_id. Подробнее про это читайте здесь.
Поэтому для старых сайтов более стабильный код будет выглядеть так:
$taxonomy = 'category';
$terms = get_terms( [
'taxonomy' => $taxonomy,
'hide_empty' => false,
] );
$tt_ids = wp_list_pluck( $terms, 'term_taxonomy_id' );
if ( $tt_ids ) {
wp_update_term_count( $tt_ids, $taxonomy );
}
Список изменений
| С версии 2.3.0 | Введена. |