Как получить Все Таксономии И Все Термины Для Каждой Таксономии С Нулевым Количеством Записей
Существует ли простой способ получить каждую зарегистрированную таксономию и для каждой зарегистрированной таксономии получить все термины для этой таксономии и для каждого термина получить количество сообщений, фактически не извлекая все данные о сообщениях?
Я бы предположил, что это, безусловно, возможно. Я бы также предположил, что для этого требуется очень длинный запрос к базе данных с использованием $wpdb
.
2 answers
Вы можете сделать это просто get_terms
- это позволяет вам извлекать все (или некоторые) термины из одной (или нескольких) таксономий.
По умолчанию он исключает "пустые" термины, поэтому вам нужно будет соответствующим образом задать аргументы.
//Array of taxonomies to get terms for
$taxonomies = array('category','post_tags','my-tax');
//Set arguments - don't 'hide' empty terms.
$args = array(
'hide_empty' => 0
);
$terms = get_terms( $taxonomies, $args);
$empty_terms=array();
foreach( $terms as $term ){
if( 0 == $term->count )
$empty_terms[] = $term;
}
//$empty_terms contains terms which are empty.
Если вы хотите получить массив зарегистрированных таксономий программно, вы можете использовать get_taxonomies()
<?php
// your taxonomy name
$tax = 'cat';
// get the terms of taxonomy
$terms = get_terms( $tax, $args = array(
'hide_empty' => false, // do not hide empty terms
));
// loop through all terms
foreach( $terms as $term ) {
// Get the term link
$term_link = get_term_link( $term );
if( $term->count > 0 )
// display link to term archive
echo '<a href="' . esc_url( $term_link ) . '">' . $term->name .'</a>';
elseif( $term->count !== 0 )
// display name
echo '' . $term->name .'';
}
?>