admin管理员组

文章数量:1317915

I'm trying to show the only the last child terms of a taxonomy in a post.

For example, the post "Johnny Pastafrolla" has the following terms of the taxonomy "camp" selected:

  • Summer Camp
    • Summer Camp 2018
    • Summer Camp 2019
  • Space Camp
  • Winter Camp
    • Winter Camp 2017

In this case, the displayed terms are gonna be: Summer Camp 2018, Summer Camp 2019, Space Camp, Winter Camp 2017

I found a code online which is doing this, but for Categories.

add_filter( 'the_category_list', 'ci_theme_the_category_list_remove_parent_categories', 10 );
function ci_theme_the_category_list_remove_parent_categories( $categories ) {
    $categories_tmp = $categories;
    foreach ( $categories_tmp as $child_cat ) {
        foreach ( $categories_tmp as $key => $parent_cat ) {
            if ( isset( $categories[ $key ] ) ) {
                if ( cat_is_ancestor_of( $parent_cat, $child_cat ) ) {
                    unset( $categories[ $key ] );
                }
            }
        }
    }

    return $categories;
}

I'm trying to "adapt it" for this specific taxonomy, but I'm kind of lost. Any hint?

Thank you

Dave

I'm trying to show the only the last child terms of a taxonomy in a post.

For example, the post "Johnny Pastafrolla" has the following terms of the taxonomy "camp" selected:

  • Summer Camp
    • Summer Camp 2018
    • Summer Camp 2019
  • Space Camp
  • Winter Camp
    • Winter Camp 2017

In this case, the displayed terms are gonna be: Summer Camp 2018, Summer Camp 2019, Space Camp, Winter Camp 2017

I found a code online which is doing this, but for Categories.

add_filter( 'the_category_list', 'ci_theme_the_category_list_remove_parent_categories', 10 );
function ci_theme_the_category_list_remove_parent_categories( $categories ) {
    $categories_tmp = $categories;
    foreach ( $categories_tmp as $child_cat ) {
        foreach ( $categories_tmp as $key => $parent_cat ) {
            if ( isset( $categories[ $key ] ) ) {
                if ( cat_is_ancestor_of( $parent_cat, $child_cat ) ) {
                    unset( $categories[ $key ] );
                }
            }
        }
    }

    return $categories;
}

I'm trying to "adapt it" for this specific taxonomy, but I'm kind of lost. Any hint?

Thank you

Dave

Share Improve this question edited Oct 31, 2020 at 0:52 Tom J Nowell 61k7 gold badges79 silver badges148 bronze badges asked Oct 31, 2020 at 0:07 DandeDande 351 silver badge8 bronze badges 3
  • How are you displaying these terms? What function are you trying to modify? I believe what you want is not the last terms but last child terms, would that be correct? Asking for the last term implies a publish date, or that you want the last item in a list which would be Winter Camp 2017 or Winter Camp – Tom J Nowell Commented Oct 31, 2020 at 0:51
  • yes exactly, the last child terms if there are any, otherwise the parent term (my example shows what I mean, the description doesn't quite :) ) – Dande Commented Oct 31, 2020 at 1:12
  • @TomJNowell I guess I found a way. By the way, I checked your site; the post about anxiety is really interesting! :) have a nice weekend! – Dande Commented Oct 31, 2020 at 13:29
Add a comment  | 

1 Answer 1

Reset to default 0

I wanted to display the terms with the get_the_term_list function so, since categories & taxonomy have a "similar logic", I replaced the "the_category_list"

add_filter( 'the_category_list', 'ci_theme_the_category_list_remove_parent_categories', 10 );

with "get_the_terms"

add_filter( 'get_the_terms', 'only_last_taxonomy_terms', 10 );

and it does what I need.

本文标签: how to show only last child terms of a taxonomy