update_post_term_count_statuses
Позволяет изменить список статусов записей, учитываемых при обновлении счётчика кол-ва терминов в таксономии.
Этот фильтр применяется в процессе обновления количества записей, связанных с термином (например, категориями или метками). По умолчанию учитываются только записи со статусом publish.
Используя этот фильтр, можно включить в подсчёт и другие статусы: draft, pending, private и пользовательские статусы.
Важно: После изменения логики подсчёта записей в термине с помощью этого фильтра, необходимо вручную инициировать обновление счётчиков терминов.
Это можно сделать, например, с помощью функции wp_update_term_count_now(), передав ей список терминов и таксономию.
Обычно счетчик обновляется при обновлении поста, для термина к которому првязан обновляемый пост.
Использование
add_filter( 'update_post_term_count_statuses', 'wp_kama_update_post_term_count_statuses_filter', 10, 2 );
/**
* Function for `update_post_term_count_statuses` filter-hook.
*
* @param string[] $post_statuses List of post statuses to include in the count.
* @param WP_Taxonomy $taxonomy Current taxonomy object.
*
* @return string[]
*/
function wp_kama_update_post_term_count_statuses_filter( $post_statuses, $taxonomy ){
// filter...
return $post_statuses;
}
- $post_statuses(string[])
- Список статусов записей, которые будут учитываться при подсчёте.
По умолчанию: ['publish'] - $taxonomy(WP_Taxonomy)
- Объект текущей таксономии, для которой обновляется счётчик терминов.
Примеры
#1 Учитывать пользовательский статус archived для таксономии genre
Добавим в подсчёт кол-ва записей в терминах записи с пользовательским статусом archived для таксономии genre.
add_filter( 'update_post_term_count_statuses', 'my_post_term_count_add_archived_status', 10, 2 );
/**
* @param string[] $statuses List of post statuses to include in the count.
* @param WP_Taxonomy $taxonomy Current taxonomy object.
*
* @return string[]
*/
function my_post_term_count_add_archived_status( $statuses, $taxonomy ) {
if ( $taxonomy->name === 'genre' ) {
$statuses[] = 'archived';
}
return $statuses;
} #2 Учитывать все статусы записей при подсчёте кол-ва записей в термине
Если необходимо учитывать все возможные статусы записей при подсчёте кол-ва записей в термине, можно использовать следующий код:
add_filter( 'update_post_term_count_statuses', 'my_include_all_statuses', 10, 2 );
/**
* @param string[] $statuses List of post statuses to include in the count.
* @param WP_Taxonomy $taxonomy Current taxonomy object.
*
* @return string[]
*/
function my_include_all_statuses( $statuses, $taxonomy ) {
$all_statuses = get_post_stati( [], 'names' );
return $all_statuses;
} #3 Учитывать черновики и приватные записи при подсчёте кол-ва постов в категориях
Добавим в подсчёт кол-ва записей в категориях записи со статусами draft и private:
add_filter( 'update_post_term_count_statuses', 'category_up_term_count_statuses', 10, 2 );
/**
* @param string[] $statuses List of post statuses to include in the count.
* @param WP_Taxonomy $taxonomy Current taxonomy object.
*
* @return string[]
*/
function category_up_term_count_statuses( $statuses, $taxonomy ) {
if ( $taxonomy->name === 'category' ) {
$statuses[] = 'draft';
$statuses[] = 'private';
}
return $statuses;
}
Список изменений
| С версии 5.7.0 | Введена. |
Где вызывается хук
$post_statuses = esc_sql( apply_filters( 'update_post_term_count_statuses', $post_statuses, $taxonomy ) );
$counted_statuses = apply_filters( 'update_post_term_count_statuses', array( 'publish' ), $taxonomy );
