¿Mostrar todos los términos de una taxonomía personalizada?

4 mar 2014, 16:15:49
Vistas: 242K
Votos: 47

Creé algunas taxonomías personalizadas y necesito mostrar TODOS los términos de las mismas. Hasta ahora he logrado mostrar las taxonomías que están seleccionadas/elegidas en un tipo de entrada personalizada, pero necesito mostrarlas todas, estén seleccionadas o no. Esto es para poder crear más adelante un filtro que filtre según los términos que contiene un valor de tipo de entrada personalizada.

<?php 
$args=array(
  'public'   => true,
  '_builtin' => false
);
$output = 'names'; // o objects
$operator = 'and';
$taxonomies=get_taxonomies($args,$output,$operator); 
if  ($taxonomies) {
  foreach ($taxonomies  as $taxonomy ) {
    $terms = get_terms($taxonomy);
        foreach ( $terms as $term) {
?>
        <li><br><a href="#"><input type="checkbox" name="profile[]" value=""><?php echo $term->name; ?> <br/></a></li>
       <?php 
                }
              }
            }  
            ?>

Esto es lo que tengo hasta ahora.

¡Gracias de antemano!

2
Comentarios

¿En qué punto falla esto? ¿Cuánto de esto funciona como te gustaría?

s_ha_dum s_ha_dum
4 mar 2014 16:26:41

Funciona, el problema es que solo puedo mostrar los términos SELECCIONADOS en un tipo de publicación personalizada. Quiero que se muestren todos, estén seleccionados o no, no quiero tener un tipo de publicación ficticia que tenga todo seleccionado solo para mostrarlos.

David H David H
4 mar 2014 16:28:30
Todas las respuestas a la pregunta 4
4
89

Necesitas pasar un argumento adicional a get_terms(). Por defecto se ocultan los términos "vacíos", es decir, términos que no están asignados a ninguna entrada.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);

EDICIÓN:

En caso de que quieras mostrar el nombre o el slug de las taxonomías personalizadas que están contenidas en la variable $terms, puedes usar este fragmento de código a continuación:

foreach ($terms as $term){
  echo $term->slug." : ";
  echo $term->name;
  echo "<br><br>";
}

Donde $term->slug muestra el slug del elemento de taxonomía que está en la lista y $term->name muestra el nombre del elemento de taxonomía correspondiente.

4 mar 2014 16:42:36
Comentarios

¡Muchas gracias! Pero quiero preguntar algo, ¿por qué crearías un array dentro de una variable en lugar de declararlo arriba donde se muestra el primer array?

David H David H
4 mar 2014 16:48:44

Simplicidad. Si el array de argumentos fuera más complejo lo habría declarado primero (muy probablemente), pero para un único argumento esa es simplemente la forma más directa de hacerlo. Debería funcionar igual de bien de cualquier manera.

s_ha_dum s_ha_dum
4 mar 2014 16:53:09

¡Muchas gracias! :) eso me enseñó mucho. ¡Realmente lo aprecio!

David H David H
4 mar 2014 17:17:40

¡¡Funciona!! ¡Ahora puedo ver lo que está pasando con todas las opciones de taxonomía! Algunos plugins crean estructuras complejas allí.

eyal_katz eyal_katz
22 jun 2018 19:41:42
0

Desde la versión 4.5.0, las taxonomías deben pasarse a través del argumento 'taxonomy' en el array $args de la siguiente manera:

$terms = get_terms( array(
    'taxonomy' => 'post_tag',
    'hide_empty' => false,
) );

donde los términos que no tienen entradas están ocultos por defecto.

21 jul 2017 15:34:50
0

Este código obtiene todas las categorías y subcategorías de taxonomías personalizadas usando get_terms():

<?php 
// Obtener todas las categorías principales (parent = 0) incluyendo las vacías
$wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'parent' =>0)); 
foreach($wcatTerms as $wcatTerm) : 
?>
<ul>
   <li>
      <!-- Enlace a la categoría principal -->
      <a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>
      <ul class="megaSubCat">
         <?php
            // Configuración para obtener las subcategorías
            $wsubargs = array(
               'hierarchical' => 1,
               'show_option_none' => '',
               'hide_empty' => 0,
               'parent' => $wcatTerm->term_id,
               'taxonomy' => 'product_cat'
            );
            // Obtener todas las subcategorías de la categoría actual
            $wsubcats = get_categories($wsubargs);
            foreach ($wsubcats as $wsc):
            ?>
         <!-- Mostrar cada subcategoría con su enlace -->
         <li><a href="<?php echo get_term_link( $wsc->slug, $wsc->taxonomy );?>"><?php echo $wsc->name;?></a></li>
         <?php
            endforeach;
            ?>  
      </ul>
   </li>
</ul>
<?php 
endforeach; 
?>
14 feb 2017 10:54:48
1
<div class="col-sm-4">  
                <?php 
                // Obtener todas las categorías principales
                $categories = get_terms( array(
                        'taxonomy' => 'freelancer_type',
                        'hide_empty' => false,
                        'parent' => 0,
                    ) );
                ?>
                <select class="form-control" name="parent_category" id="parent_category">
                    <option value="">Seleccionar Categoría</option>
                    <?php  
                        foreach($categories as $category) {
                            ?>
                                <option value="<?php echo $category->term_id; ?>"><?php echo $category->name; ?></option>
                            <?php 
                        }   
                            
                    ?>      
                </select>
                <select class="form-control" name="child_category" id="child_category">
                    <option value="">Seleccionar Subcategoría</option>
                </select>
            </div>
28 dic 2021 10:27:48
Comentarios

Tu respuesta podría mejorarse con información adicional de apoyo. Por favor [edita] para agregar más detalles, como citas o documentación, para que otros puedan confirmar que tu respuesta es correcta. Puedes encontrar más información sobre cómo escribir buenas respuestas en el centro de ayuda.

User User
3 ene 2022 16:48:26