0

I'm looking for a way to hide all the subcategories based in my post:

It always displays in my posts like : Categorie, sub categories.

So I'd like to exclude all of the sub_categories.

I've been trying to trick this portion of code:

<?php the_category(', ') ?>

but I can not manage to make it work .

If anybody has a solution, I ll be really thankful!! :)

1 Answer 1

1

There is no filter for the_category. All that the_category does is to echo get_the_category_list. Have a look at the function in wp-includes/category-template.php lines 273 - 275

273 function the_category( $separator = '', $parents='', $post_id = false ) {
274         echo get_the_category_list( $separator, $parents, $post_id );
275 }

Personally I would say that the_category is incorrect for what you want to do, as you don't need to display any type of parent/child relationship

You can take a look at wp_list_categories which gives you a lot of flexibility. wp_list_categories is also not just limited to categories, is can be used for custom taxonomies as well.

The parameter that you should have a look at here is depth which you can set to

  • 0 - All Categories and child Categories (Default).

  • 1 - All Categories displayed in flat (no indent) form (overrides hierarchical).

  • 1 - Show only top level Categories

  • n - Value of n (some number) specifies the depth (or level) to descend in displaying Categories

Here is a slightly modified version of the code found in the codex page. I've set the depth parameter to 1, which will only show the top most category level

<?php 
$taxonomy = 'category';

// get the term IDs assigned to post.
$post_terms = wp_get_object_terms( $post->ID, $taxonomy, array( 'fields' => 'ids' ) );
// separator between links
$separator = ', ';

if ( !empty( $post_terms ) && !is_wp_error( $post_terms ) ) {

    $term_ids = implode( ',' , $post_terms );
    $terms = wp_list_categories( 'title_li=&style=none&echo=0&depth=1&taxonomy=' . $taxonomy . '&include=' . $term_ids );
    $terms = rtrim( trim( str_replace( '<br />',  $separator, $terms ) ), $separator );

    // display post categories
    echo  $terms;
}
?>
0

Your Answer

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

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