Recupera solo i termini in uso
Sto attualmente usando term_exists( $term, $taxonomy );
in una condizione, ma il problema è che include termini che non sono in uso (sebbene esistano nella lista delle categorie).
Esiste qualcosa che posso usare oltre a term_exists
che includerà le categorie solo se sono in uso? Oppure devo in qualche modo filtrare per ottenere i termini in uso?
Sto filtrando un archivio di proprietà immobiliari tramite un elemento select. Ogni settimana, quando vengono designate le case aperte, applico la categoria 'Open House' a queste proprietà, permettendo ai visitatori di filtrare per vedere tutte le case aperte. Dopo il weekend, rimuovo la categoria open house da ogni annuncio. Esempio: https://megangulick.com/agent-listings/ (attualmente sto modificando manualmente l'opzione, quindi 'Open House' non appare come opzione).
Quello che voglio fare è cambiare l'opzione iniziale del select in base alla presenza o meno di case aperte attualmente designate.
Ecco come appare il mio codice attuale:
<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<select name="listingcat" id="listingcat" onchange="submit()">
<?php //questa è la parte per cui ho bisogno di una soluzione
$cat = (term_exists('Open House', $categories));
if $cat {
echo '<option value="">Seleziona quartiere o casa aperta</option>';
} else {
echo '<option value="">Seleziona quartiere</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>
Il compito qui è determinare se un termine specifico (es. Open House) è in uso, quindi utilizzare queste informazioni per un'istruzione condizionale if/else.

Ho iniziato a ricercare gli array di termini e ho trovato una soluzione funzionante per creare una condizione basata sul fatto che un termine sia o meno in uso da parte di qualsiasi articolo:
<?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="">Seleziona stato o open house</option>';
} else {
echo '<option value="">Seleziona stato (mostra tutto per default)</option>';
}
?>
Apprezzo l'aiuto di tutti. Penso che la mia domanda iniziale fosse fuorviante, non era la domanda che dovevo porre per trovare la soluzione.

Per recuperare solo i termini che sono associati a post in uso, puoi utilizzare la funzione get_terms()
con il parametro pad_counts
impostato su true. Questo assicurerà che la proprietà count di ogni oggetto termine rifletta il numero di post associati. Puoi poi filtrare i termini con un conteggio di 0
$taxonomy = 'your_taxonomy'; // Sostituisci 'your_taxonomy' con il nome della tua tassonomia
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'pad_counts' => true, // Imposta su true per includere il conteggio dei post associati
));
// Filtra i termini per includere solo quelli con post associati
$used_terms = array_filter($terms, function($term) {
return $term->count > 0;
});
// Controlla se sono stati recuperati termini
if (!empty($used_terms)) {
foreach ($used_terms as $term) {
// Stampa le informazioni del termine
echo '<p>Nome Termine: ' . $term->name . '</p>';
echo '<p>ID Termine: ' . $term->term_id . '</p>';
echo '<p>Slug Termine: ' . $term->slug . '</p>';
echo '<p>Descrizione Termine: ' . $term->description . '</p>';
echo '<p>Conteggio Post: ' . $term->count . '</p>';
// Puoi stampare ulteriori informazioni sul termine se necessario
}
} else {
echo 'Nessun termine trovato con post associati.';
}

Richiederà una riscrittura più ampia di quanto sperassi, ma sembra promettente. Tornerò con i risultati più tardi questa mattina. Grazie.
