2

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

1

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

0

You can use array_map so you can return only the categories that you want. For example:

array_map( function( $cat ) {
        if ( $cat->parent != 0 ) {
            return $cat;
        }
     },
     get_the_category()
);

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.