1. Прежде чем выводить данные термина, вы должны проверять наличие этих данных простой проверкой
if () { ... }
2. Т.к. у вас список
<li>
, предположу, что вы хотите вывести список терминов. Соберите их в массив, запустите любой цикл
3. В объекте термина хранится общее количество записей, поэтому количество записей с конкретным мета-ключом вы можете получить только отдельным запросом
get_posts()
. Желательно указать
post_type
. Можете указать параметр
fields = ids
, чтобы запрос не был таким тяжелым
4. Для перевода текста нужно использовать функции
__()
или
_e()
. Текст должен быть написан на английском, содержать идентификатор темы, после чего его нужно перевести на нужные вам языки с помощью программы poedit или плагина loco translate
Вот итоговый код:
<?php
$term_ids = array( 29, 30, 31 );
$taxonomy = 'project_category';
foreach ( $term_ids as $term_id ) {
if ( $term = get_term( $term_id, $taxonomy ) ) { ?>
<li class="item">
<a href="<?php echo get_term_link( $term_id, $taxonomy ); ?>" class="link">
<h4 class="title"><?php echo $term->name; ?></h4></a>
<div>
<?php
$args = array(
'post_type' => 'project',
'posts_per_page' => -1,
'tax_query' => [
[
'taxonomy' => $taxonomy,
'field' => 'id',
'terms' => $term_id
]
],
'meta_key' => 'project_year',
'meta_value' => '2020',
'fields' => 'ids'
);
if ( $project_posts = get_posts( $args ) ) { ?>
<div class="number"><?php echo count($project_posts); ?></div>
<?php } ?>
<div class="text12"><?php _e( 'Filed', 'source' ); ?></div>
</div>
</li>
<?php }
} ?>