0

I have created the custom taxonomy for categories. I want to list the child categories lists of current parent category in child page.

$cateID = get_queried_object_id();    
$args = array(
  'format' => 'name',
  'separator' => ' ',
  'link' => false,
  'inclusive' => true
);
$checkparent =  get_term_parents_list( 
 $cateID, 'my-taxonamy' , $args
); 

I have tried the above code. But the code returns the parent category name/link. Any way to get the parent category id in child category page? Any methods or hooks are there in wordpress for getting the parent category id?

Example case:

  1. Parent category1
    • Child category1
    • Child category1
    • Child category3
  2. Parent category1
    • Child category1
    • Child category1

If i am in child category1 page, want to list the below categories.

  • Child category1
  • Child category1
  • Child category3

Problem: I cannot able to get the parent category id from the child category.

Thanks in advance ;)

2 Answers 2

2

On a taxonomy archive page, be it for a child or parent term, you can get the current/queried term object/data using get_queried_object() which contains properties like term_id (the term ID) and slug (the term slug). And the property name for the ID of the parent term is parent. So you can do so to get the parent's term ID:

$cat = get_queried_object();
$parent_cat_id = $cat->parent;

And for displaying a list of terms in the parent term, you can use wp_list_categories(). Here's an example with the title_li set to '' and echo set to 0, which means I'm manually putting the output into an UL (<ul></ul>):

$cat = get_queried_object();

$list = wp_list_categories( [
    'taxonomy' => $cat->taxonomy,
    'child_of' => $cat->parent,
    'title_li' => '',
    'echo'     => 0,
] );

if ( $list ) {
    echo "<ul>$list</ul>";
}

If you want full control over the HTML, e.g. to add custom HTML before/after the term link or perhaps to add custom CSS classes, you can use get_terms() and loop through the term objects to display the term:

$cat = get_queried_object();

$cats = get_terms( [
    'taxonomy' => $cat->taxonomy,
    'child_of' => $cat->parent,
] );

if ( ! empty( $cats ) ) {
    echo '<ul>';
    foreach ( $cats as $cat ) {
        $url = esc_url( get_category_link( $cat ) );
        // change the 'before' and/or 'after' or whatever necessary
        echo "<li>before <a href='$url'>$cat->name</a> after</li>";
    }
    echo '</ul>';
}
2
  • Thanks @sally. It's working. Can i able to add additional html tag to before of anchor tag?
    – Rajkumar S
    Mar 6, 2020 at 10:22
  • Basically, with wp_list_categories(), no. But check the updated answer.
    – Sally CJ
    Mar 6, 2020 at 15:22
0

Using a get_term function is Retrieve the terms in a given taxonomy or list of taxonomies.

Refer this Link : https://developer.wordpress.org/reference/functions/get_terms/

     /*change on 'taxonomy'=> 'your texonomy name'*/
      $terms = get_terms(array('taxonomy'=> 'category','hide_empty' => false, ));  ?>
        <div class="category_all">
            <div class="categor">
                <?php 
                echo "<ol>";
                 //get parent category term id $term->term_id            
                foreach ( $terms as $term ) {
                    if ($term->parent == 0 ) {
                     echo "<li>";                       
                     echo $term->name; // Parent Category Name 
                         echo "<ul>";
                         $subterms = get_terms(array('taxonomy'=> 'category','hide_empty' => false,'parent'=> $term->term_id));

                        //get child category term id $value->term_id
                        foreach ($subterms as $key => $value) 
                        {
                           echo "<li>".$value->name."</li>"; // Child Category Name 
                        }
                        echo "</ul>";                       
                    echo "</li>";
                    }                   

                    }
                    echo "</ol>";
            ?>
        </div>
    </div>

<?php

If you want to get category term id then you can use $term->term_id in your expression

Screenshot of parent with child Category

enter image description here

Your Answer

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

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