I’m trying to display the get_category_category limiting the results to only the child categories of parent “666”.

So a post may have a number of categories e.g. “1234”, “666”, “666/1341”, “5”, “5/17” but I only want to show the child of “666”.

$args = array( 'numberposts' => '5','post_status' => 'publish','category' => '1234','category__not_in' => '680', 'orderby' => 'post_date', 'order' => 'DESC' );
$recent_posts = wp_get_recent_posts($args);
{

///I want to return the category for each post in this loop that is within the "666" category.
///E.g get_the_category($recent['ID']) where the category is a child of 666

echo "POST ID" . $recent['ID'] . " CHILD CATEGORY ". $childcategory; 
}

The above loop will return the last 5 posts in category “1234” with each child category of “666”.

e.g.

  • POST ID 10 CHILD CATEGORY 1341
  • POST ID 11 CHILD CATEGORY 1341
  • POST ID 14 CHILD CATEGORY 99
  • POST ID 19 CHILD CATEGORY 1341
  • POST ID 23 CHILD CATEGORY 99

2 Answers
2

You can do this by getting the child categories of that category first, then passing them as an array to your query.

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

$cat_list = [];
foreach ($categories as $c) {
    $cat_list[] = $c->term_id;
}

ref: Get the children of the parent category

This won’t/might not work, but it’s usually worth trying passing an array where you could pass an integer in WordPress:

$args = array( 'numberposts' => '5','post_status' => 'publish','category' => $cat_list,'category__not_in' => '680', 'orderby' => 'post_date', 'order' => 'DESC' );

wp_get_recent_posts uses get_posts & get_post accepts an ID of a category, at the time of writing it doesn’t mention an array… So you might need to use WP_Query:

$query = new WP_Query( array( 'category__and' => $cat_list ) );

see: https://codex.wordpress.org/Class_Reference/WP_Query

Tags:

Leave a Reply

Your email address will not be published. Required fields are marked *