Get the children of the parent category

I’m trying to get all the children categories to display in this loop but I’m struggling with the code. This is what I have so far.

<?php $args=array('orderby' => 'name', 'order' => 'ASC');
    $categories=get_categories($args); 
    foreach ($categories as $cat) { ?>
    <dt><a href="#" rel="nofollow noreferrer noopener" class="customer-acquisitiontop" id="<?php echo $cat->slug; ?>" data-filter=".<?php echo $cat->slug; ?>"><h2><?= $cat->cat_name; ?></h2></a></dt>
    <dd><div class="services">
    <?= $categories=get_categories('parent'); ?> /*This should be the children of the parent category */
    </div>
    </dd>
<?php } ?>

Any help would be great

Answers:

Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.

Method 1

You can’t just pass the string “parent” to get_categories. You have to pass the ID of the parent.

$categories=get_categories(
    array( 'parent' => $cat->cat_ID )
);

Notice that there are two similar but not equal “get child” parameters that you can use.

child_of
(integer) Display all categories that are descendants (i.e. children & grandchildren) of the category identified by its ID. There
is no default for this parameter. If the parameter is used, the
hide_empty parameter is set to false.

parent
(integer) Display only categories that are direct descendants (i.e. children only) of the category identified by its ID. This does
NOT work like the ‘child_of’ parameter. There is no default for this
parameter. [In 2.8.4]

Now you need to loop over the $categories. You can’t just echo an array.

foreach ($categories as $c) {
    var_dump($c);
    // what you really want instead of var_dump is something to
    // to create markup-- list items maybe, For example...
    echo '<li>'.$c->cat_name.'</li>';
}

Method 2

Use the code below in your archive.php file.
This code will help you:

<?php

    $term = get_queried_object();

    $children = get_terms( $term->taxonomy, array(
        'parent'    => $term->term_id,
        'hide_empty' => false
    ) );

    if ( $children ) { 
        foreach( $children as $subcat )
        {
            echo '<li><a href="' . esc_url(get_term_link($subcat, $subcat->taxonomy)) . '" rel="nofollow noreferrer noopener">' . $subcat->name . '</a></li>';
        }
    }
?>

Method 3

If there are no values in the array you can try the following approach:

$last_categories = get_categories(
  array(
    'taxonomy' => 'product_cat',
    'parent' => $sub_category->cat_ID
  )
);

Method 4

To get child categories you can use following code.

$category = get_queried_object(); // this is for getting the parent category on archive or any place the category object is called.
$categories=get_categories(
                        array( 'parent' => $category->term_id,
                                'hide_empty' => false )
                                );

Notice :- I have used ‘hide_empty’ => false to show categories with no any posts under it.
Then use the $categories array to loop and make your markup.


All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0

0 0 votes
Article Rating
Subscribe
Notify of
guest

0 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x