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

18

Hice algunas taxonomías personalizadas y necesito mostrar TODOS los términos, lo que he logrado hasta ahora es mostrar las taxonomías que se seleccionan / eligen en un tipo de publicación personalizada, pero necesito que todas se muestren, estén seleccionadas o no . Para que luego pueda hacer un filtro que filtre según los términos que contiene un valor de tipo de publicación personalizado.

<?php 
$args=array(
  'public'   => true,
  '_builtin' => false
);
$output = 'names'; // or 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 
                }
              }
            }  
            ?>

Lo que tengo hasta ahora.

¡Gracias por adelantado!

David H
fuente
¿En qué punto falla esto? ¿Cuánto funciona de la manera que te gustaría?
s_ha_dum
Funciona, el problema es que solo puedo mostrar los términos SELECCIONADOS en un tipo de publicación personalizada. Quiero que todos se muestren seleccionados o no, no quiero tener un tipo de publicación ficticia que tenga todo seleccionado solo para mostrarlos.
David H

Respuestas:

39

Necesita pasar un argumento adicional a get_terms(). El valor predeterminado es ocultar términos "vacíos": términos que no se asignan a ninguna publicación.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);
s_ha_dum
fuente
Muchas gracias! Pero quiero preguntar algo, ¿por qué crearía una matriz dentro de una variable en lugar de declararla arriba donde se muestra la primera matriz?
David H
Sencillez. Si el conjunto de argumentos fuera más complejo, lo habría declarado primero (lo más probable), pero para un solo argumento, esa es la forma más sencilla de hacerlo. Debería funcionar igualmente bien de cualquier manera.
s_ha_dum
Muchas gracias :) que me pensó mucho. ¡Realmente lo aprecio!
David H
¡¡Trabajos!! ¡Ahora puedo ver lo que sucede con todas las opciones de taxonomía! Algunos complementos crean una estructura compleja allí.
eyal_katz
6

Desde 4.5.0, las taxonomías deben pasarse a través del argumento 'taxonomía' en la matriz $ args, entonces:

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

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

Lawrence Oputa
fuente
3

Este código recupera todas las taxonomías personalizadas de categoría y subcategoría utilizando get_terms():

<?php $wcatTerms = get_terms('product_cat', array('hide_empty' => 0, 'parent' =>0)); 
   foreach($wcatTerms as $wcatTerm) : 
   ?>
<ul>
   <li>
      <a href="<?php echo get_term_link( $wcatTerm->slug, $wcatTerm->taxonomy ); ?>"><?php echo $wcatTerm->name; ?></a>
      <ul class="megaSubCat">
         <?php
            $wsubargs = array(
               'hierarchical' => 1,
               'show_option_none' => '',
               'hide_empty' => 0,
               'parent' => $wcatTerm->term_id,
               'taxonomy' => 'product_cat'
            );
            $wsubcats = get_categories($wsubargs);
            foreach ($wsubcats as $wsc):
            ?>
         <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; 
   ?>
amit gangrade
fuente