47

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!

2
  • At what point does this fail? How much of it works the way you'd like?
    – s_ha_dum
    Commented Mar 4, 2014 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
    Commented Mar 4, 2014 at 14:28

4 Answers 4

89

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,
]);

EDIT:

Incase you want to display the name or the slug of the enlisted custom taxonomies being held by the $terms variable you can use this piece of code bellow:

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

Where $term->slug outputs the slug of the taxonomy item that's enlisted and $term->name outputs the name of the according taxonomy item.

4
  • 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
    Commented Mar 4, 2014 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
    Commented Mar 4, 2014 at 14:53
  • Thanks a lot :) that thought me a lot. I really appreciate it!
    – David H
    Commented Mar 4, 2014 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
    Commented Jun 22, 2018 at 16:41
9

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.

7

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; 
   ?>
0
<div class="col-sm-4">  
                <?php 
                $categories = get_terms( array(
                        'taxonomy' => 'freelancer_type',
                        'hide_empty' => false,
                        'parent' => 0,
                    ) );
                ?>
                <select class="form-control" name="parent_category" id="parent_category">
                    <option value="">Select Category</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="">Select Sub Category</option>
                </select>
            </div>
1
  • Your answer could be improved with additional supporting information. Please edit to add further details, such as citations or documentation, so that others can confirm that your answer is correct. You can find more information on how to write good answers in the help center.
    – Community Bot
    Commented Jan 3, 2022 at 14:48

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

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