Mostrar todos os termos de uma taxonomia customizada?

18

Fiz algumas taxonomias personalizadas e preciso mostrar TODOS os termos, o que consegui até agora é mostrar as taxonomias que são selecionadas / escolhidas em um tipo de postagem personalizado, mas preciso que todas elas sejam exibidas, independentemente de estarem selecionadas ou não . Para que mais tarde eu possa criar um filtro que filtre de acordo com os termos que um valor de tipo de postagem personalizado contém.

<?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 
                }
              }
            }  
            ?>

O que eu tenho até agora.

Desde já, obrigado!

David H
fonte
Em que ponto isso falha? Quanto disso funciona da maneira que você gostaria?
s_ha_dum
A questão é que só posso mostrar os termos SELECTED em um tipo de postagem personalizado. Quero que todos eles mostrem se foram selecionados ou não, não quero ter um tipo de post fictício que tenha tudo selecionado apenas para mostrá-los.
David H

Respostas:

39

Você precisa passar um argumento adicional para get_terms(). O padrão é ocultar termos "vazios" - termos atribuídos a nenhuma postagem.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);
s_ha_dum
fonte
Muito obrigado! Mas quero perguntar uma coisa: por que você criaria uma matriz dentro de uma variável em vez de declará-la acima, onde a primeira matriz é mostrada?
David H
Simplicidade. Se a matriz de argumentos fosse mais complexa, eu a teria declarado primeiro (provavelmente), mas para um único argumento que é apenas a maneira mais direta de fazê-lo. Deve funcionar igualmente bem de qualquer maneira.
s_ha_dum
Muito obrigado :) que me pensou muito. Eu realmente gostei disso!
David H
Trabalho!! Agora eu posso ver o que está acontecendo com todas as opções de taxonomia! Alguns plugins criam uma estrutura complexa.
22618
6

Desde a versão 4.5.0, as taxonomias devem ser passadas pelo argumento 'taxonomy' na matriz $ args, de modo que:

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

onde os termos que não têm postagens estão ocultos por padrão.

Lawrence Oputa
fonte
3

Esse código busca todas as taxonomias personalizadas de categoria e subcategoria usando 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
fonte