Obtener solo términos que están en uso
Actualmente estoy usando term_exists( $term, $taxonomy );
en un condicional, pero el problema es que incluye términos que no están siendo utilizados (aunque existen en la lista de categorías).
¿Existe algo que pueda usar además de term_exists
que incluya categorías solo si están en uso? ¿O necesito filtrar de alguna manera para obtener los términos en uso?
Estoy filtrando un archivo de propiedades inmobiliarias a través de un elemento select. Cada semana, cuando se designan casas abiertas, aplico la categoría 'Open House' a ellas, permitiendo a los visitantes filtrar para ver todas las casas abiertas. Después del fin de semana, elimino la categoría de casa abierta de cada listado. Ejemplo: https://megangulick.com/agent-listings/ (actualmente solo edito la opción manualmente, por lo que 'Open House' no aparece como opción).
Lo que quiero hacer es cambiar la opción inicial del select basado en si hay o no casas abiertas actualmente designadas.
Así es como se ve mi código actual:
<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<select name="listingcat" id="listingcat" onchange="submit()">
<?php //este es el fragmento para el que necesito una solución
$cat = (term_exists('Open House', $categories));
if $cat {
echo '<option value="">Seleccionar vecindario o casa abierta</option>';
} else {
echo '<option value="">Seleccionar vecindario</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>
La tarea aquí es cómo determinar si un término particular (por ejemplo, Open House) está en uso, luego usar esa información para una declaración condicional if/else.

Empecé a investigar sobre arrays de términos y se me ocurrió algo que funciona, la solución para crear un condicional basado en si un término está en uso por algún post o no:
<?php $categories = get_categories('taxonomy=listing-neighborhood&post_type=listings'); ?>
<?php
$term_name = wp_list_pluck( $categories, 'name' );
$this_name= 'Casa Abierta'; // Traducido "Open House" a español
if( in_array( $this_name, $term_name ) ){
echo '<option value="">Seleccionar estado o casa abierta</option>';
} else {
echo '<option value="">Seleccionar estado (mostrar todos por defecto)</option>';
}
?>
Agradezco la ayuda de todos. Creo que mi pregunta inicial fue engañosa, no era la pregunta que necesitaba hacer para encontrar la solución.

Para recuperar solo los términos que están en uso en publicaciones asociadas, puedes usar la función get_terms()
con el parámetro pad_counts
establecido en verdadero. Esto asegurará que la propiedad count de cada objeto término refleje el número de publicaciones asociadas. Luego puedes filtrar los términos con un conteo de 0
$taxonomy = 'tu_taxonomia'; // Reemplaza 'tu_taxonomia' con el nombre de tu taxonomía
$terms = get_terms(array(
'taxonomy' => $taxonomy,
'pad_counts' => true, // Establecer en true para incluir el conteo de publicaciones asociadas
));
// Filtrar términos para incluir solo aquellos con publicaciones asociadas
$used_terms = array_filter($terms, function($term) {
return $term->count > 0;
});
// Verificar si se recuperaron términos
if (!empty($used_terms)) {
foreach ($used_terms as $term) {
// Mostrar información del término
echo '<p>Nombre del término: ' . $term->name . '</p>';
echo '<p>ID del término: ' . $term->term_id . '</p>';
echo '<p>Slug del término: ' . $term->slug . '</p>';
echo '<p>Descripción del término: ' . $term->description . '</p>';
echo '<p>Conteo de publicaciones: ' . $term->count . '</p>';
// Puedes mostrar más información sobre el término si es necesario
}
} else {
echo 'No se encontraron términos con publicaciones asociadas.';
}

Eso va a requerir una reescritura más grande de lo que esperaba, pero parece prometedor. Volveré con resultados más tarde esta mañana. Gracias.
