Get WordPress child category from specific parent

I’m building a small thumbnail gallery with posts from a category that has the ID 406.

Some of the posts are in multiple categories and I’m not sure how to grab the category name that is a child of 406. $post_cat[0]->name; returns a category, but I only need it to return children of 406.

Read More
$thumbnails = get_posts('posts_per_page=10&cat=406');

foreach ($thumbnails as $thumbnail) {

   $args = array(
     'type' => 'post',
     'child_of' => 0,
     'parent' => 406,
   );
   $categories = get_categories ( $args );

   foreach ( $categories as $category) {
      $cat_name = $category->name;
      $cat_slug = $category->slug;
   }

    echo $cat_name;
    echo $cat_slug;

 }

*EDIT**

$thumbnails = get_posts('posts_per_page=10&cat=406');
foreach ($thumbnails as $thumbnail) {

  $post_cat = get_the_category( $thumbnail->ID );
  echo '<li><a class="side-thumb" href="' . get_permalink( $thumbnail->ID ) . '" title="' . esc_attr( $thumbnail->post_title ) . '">';

  if ( has_post_thumbnail($thumbnail->ID)) {

   echo get_the_post_thumbnail($thumbnail->ID, 'thumbnail');
   $upload_dir = wp_upload_dir();
   $art_image = ''.$upload_dir['basedir'].'/icons/'.$post_cat[0]->slug.'.png';

   if (file_exists($art_image)) {

     echo '<p class="artist-latest"><img src="http://site.com/wp-content/uploads/icons/'.$post_cat[0]->slug.'.png" alt="'.$post_cat[0]->slug.'"/>'.$post_cat[0]->name.'</p>';

    } else{
        echo '<p class="artist-latest">'.$post_cat[0]->name.'</p>';
    }

    } else {

    }
    echo '</a></li>';
   }

Related posts

Leave a Reply

2 comments

  1. So now I’m fetching a list of category and its child, then I fetch posts having parent category assigned to it, after I get posts array, I loop into it and get all the categories assigned to the post, If there are additional categories other than the required category and its child I skip the post, otherwise do whatever I want to do.

    $category = get_category_by_slug( 'category-name' );
    
    $args = array(
    'type'                     => 'post',
    'child_of'                 => $category->term_id,
    'orderby'                  => 'name',
    'order'                    => 'ASC',
    'hide_empty'               => FALSE,
    'hierarchical'             => 1,
    'taxonomy'                 => 'category',
    ); 
    $child_categories = get_categories($args );
    
    $category_list = array();
    $category_list[] = $category->term_id;
    
    if ( !empty ( $child_categories ) ){
        foreach ( $child_categories as $child_category ){
            $category_list[] = $child_category->term_id;
        }
    }
    
    $posts_args = array(
    'posts_per_page'   => 10,
    'cat'  => $category->term_id,
    'post_type'        => 'post',
    'post_status'      => 'publish',
    'suppress_filters' => true 
    );
    
    $posts = new WP_Query ( $posts_args );
    if ( $posts->have_posts() ){
    
      while ( $posts->have_posts() ){
        $posts->the_post(); 
        $category_array = array();
        $post_categories = get_the_category ( get_the_ID() );
        if ( !empty ( $post_categories ) ){
           foreach ( $post_categories as $post_category ) {
              $category_array[] = $post_category->term_id;
            }
        }
        //Checks if post has an additional category
        $result = array_diff( $category_array,  $category_list   ); 
    
        if ( empty ( $result ) ) { ?>
           <li>
             <a href="<?php the_permalink(); ?>" class="side-thumb" title="<?php the_title(); ?>"> dfdf<?php 
                 if ( has_post_thumbnail() ){
                     echo get_the_post_thumbnail();
                 } 
                 //Put your default icon code here 
                 ?>
             </a> 
            </li> <?php
         }
       }
      }
      wp_reset_postdata();
    

    Above answer is as per your explanation, but I think what you want is, like you have a category Artists and there are subcategories each having a specific name, So for Artist gallery you want to display list of all the artists with their pictures.

  2. I also needed to get list of child categories of selected parent category with url,

    I found following code so useful

    <?php
    
    $categories = get_categories( array(
      'orderby' => 'name',
      'parent'  => 5
    ) );
    
    foreach ( $categories as $category ) {
    
       printf( '<li><a  class="btn btn-light btn-light-custom mt-2" href="%1$s">%2$s</a></li>',
          esc_url( get_category_link( $category->term_id ) ),
          esc_html( $category->name )
      );
    }
    
    ?>
    

    Replace “5” with your selected parent category ID