Получение только используемых терминов
В настоящее время я использую term_exists($term, $taxonomy);
в условном операторе, но проблема в том, что эта функция включает термины, которые не используются (хотя они существуют в списке категорий).
Есть ли что-то, что я могу использовать вместо term_exists
, что будет включать категории только если они используются? И мне нужно как-то фильтровать, чтобы получить только используемые термины?
Я фильтрую архив объектов недвижимости через элемент select. Каждую неделю, когда назначаются дни открытых дверей, я применяю категорию 'Open House' к соответствующим объектам, что позволяет посетителям фильтровать и видеть все открытые дома. После выходных я удаляю эту категорию из каждого объявления. Пример: https://megangulick.com/agent-listings/ (сейчас я редактирую опцию вручную, поэтому 'Open House' не отображается как вариант).
Что я хочу сделать - это изменить начальную опцию select в зависимости от того, есть ли в данный момент назначенные дни открытых дверей.
Вот как выглядит мой текущий код:
<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<select name="listingcat" id="listingcat" onchange="submit()">
<?php //это часть, для которой мне нужно решение
$cat = (term_exists('Open House', $categories));
if $cat {
echo '<option value="">Выберите район или день открытых дверей</option>';
} else {
echo '<option value="">Выберите район</option>';
}
?>
<?php
foreach ($categories as $category) :
echo '<option value="'.$category->name.'"';
if(isset($_GET['listingcat']) && ($_GET['listingcat'] == $category->name)) {
echo ' selected="selected"';
}
echo '>'.$category->name.'</option>';
endforeach;
?>
</select>
Задача здесь - определить, используется ли конкретный термин (например, Open House), а затем использовать эту информацию для условного оператора if/else.

Начал исследовать массивы терминов и придумал рабочее решение для создания условия, проверяющего, используется ли термин в каких-либо записях:
<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<?php
$term_name = wp_list_pluck( $categories, 'name' );
$this_name= 'Открытый дом'; // Open House
if( in_array( $this_name, $term_name ) ){
echo '<option value="">Выберите статус или открытый дом</option>'; // Select status or open house
} else {
echo '<option value="">Выберите статус (по умолчанию показывать все)</option>'; // Select status (show all by default)
}
?>
Благодарю всех за помощь. Думаю, мой первоначальный вопрос был вводящим в заблуждение - это был не тот вопрос, который мне нужно было задать для нахождения решения.

Чтобы получить только термины, которые используются в связанных записях, можно использовать функцию get_terms()
с параметром pad_counts
, установленным в true. Это гарантирует, что свойство count каждого объекта термина будет отражать количество связанных записей. Затем можно отфильтровать термины с количеством 0.
$taxonomy = 'ваша_таксономия'; // Замените 'ваша_таксономия' на название вашей таксономии
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'pad_counts' => true, // Установите true, чтобы включить количество связанных записей
));
// Фильтруем термины, оставляя только те, у которых есть связанные записи
$used_terms = array_filter($terms, function($term) {
return $term->count > 0;
});
// Проверяем, есть ли полученные термины
if (!empty($used_terms)) {
foreach ($used_terms as $term) {
// Выводим информацию о термине
echo '<p>Название термина: ' . $term->name . '</p>';
echo '<p>ID термина: ' . $term->term_id . '</p>';
echo '<p>Slug термина: ' . $term->slug . '</p>';
echo '<p>Описание термина: ' . $term->description . '</p>';
echo '<p>Количество записей: ' . $term->count . '</p>';
// Можно вывести больше информации о термине, если нужно
}
} else {
echo 'Не найдено терминов с связанными записями.';
}

Это потребует более масштабной переработки, чем я рассчитывал, но выглядит многообещающе. Я сообщу о результатах позже утром. Спасибо.
