16

I made a few custom taxonomies and I need to show ALL the terms from it, what I achieved so far is showing the taxonomies that are selected/chosen in a custom post type but I need all of them to show, wether it's selected or not. So that later I can make a filter that filters according to which terms a custom post type value contains.

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

What I have so far.

Thanks in advance!

  • At what point does this fail? How much of it works the way you'd like? – s_ha_dum Mar 4 '14 at 14:26
  • It works the issue is that I can only show the SELECTED terms in a custom post type. I want all of them to show wether selected or not, I don't want to have a dummy post type that has everything selected just to show them. – David H Mar 4 '14 at 14:28
35

You need to pass an additional argument to get_terms(). The default is to hide "empty" terms-- terms which are assigned to no posts.

$terms = get_terms([
    'taxonomy' => $taxonomy,
    'hide_empty' => false,
]);
  • Thank you so much! But I want to ask something, why would you create an array inside a variable instead of declaring it above where the first array is shown? – David H Mar 4 '14 at 14:48
  • Simplicity. If the argument array were more complex I would have declared it first (most likely), but for a single argument that is just the most straightforward way to do it. It should work equally well either way. – s_ha_dum Mar 4 '14 at 14:53
  • Thanks a lot :) that thought me a lot. I really appreciate it! – David H Mar 4 '14 at 15:17
  • Works!! Now I can see what's going on with all the taxonomy options! Some plugins create complex structure in there. – eyal_katz Jun 22 '18 at 16:41
5

Since 4.5.0, taxonomies should be passed via the ‘taxonomy’ argument in the $args array so:

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

where terms that have no posts are hidden by default.

2

This code is fetches all category and subcategory custom taxonomies using 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; 
   ?>

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.