taxonomy - Count argument in get_terms has no effect on ouputdoesn't work

admin2025-01-07  5

I'm trying to get a count of the categories that are subcategories of a category with the id $categoryId.

In the documentation for the term query object, which is the primary argument to get_terms, the count parameter is listed, with the description:

(bool) Whether to return a term count (true) or array of term objects (false). Will take precedence over $fields if true. Default false.

Based off of this, I think the following code should return an integer term count. However, it does not, it returns an array of term objects, the same as if I didn't include the count argument. I've tried this with the values 1, "true", "True" and True as well.

get_terms(
    array(
        'parent' => $categoryId,
        'taxonomy' => 'category',
        'count' => true
    )
);

After searching more, I found this code, which works:

wp_count_terms( 'category', array( 'parent' => $categoryId ) );

Why does the count argument have no effect in this situation? Is this behavior consistent?

I'm trying to get a count of the categories that are subcategories of a category with the id $categoryId.

In the documentation for the term query object, which is the primary argument to get_terms, the count parameter is listed, with the description:

(bool) Whether to return a term count (true) or array of term objects (false). Will take precedence over $fields if true. Default false.

Based off of this, I think the following code should return an integer term count. However, it does not, it returns an array of term objects, the same as if I didn't include the count argument. I've tried this with the values 1, "true", "True" and True as well.

get_terms(
    array(
        'parent' => $categoryId,
        'taxonomy' => 'category',
        'count' => true
    )
);

After searching more, I found this code, which works:

wp_count_terms( 'category', array( 'parent' => $categoryId ) );

Why does the count argument have no effect in this situation? Is this behavior consistent?

Share Improve this question edited Mar 27, 2018 at 22:01 Marc 7315 silver badges15 bronze badges asked Mar 27, 2018 at 20:33 James G.James G. 1314 bronze badges
Add a comment  | 

1 Answer 1

Reset to default 1

Not sure from which version, but count argument not used anymore. Just checked WP_Term_Query class and found nothing related to count argument in get_terms() method, but you can still find it in constructor of this class. To return terms count only, you need to set count for fields argument.

get_terms(
    array(
        'parent' => $categoryId,
        'taxonomy' => 'category',
        'fields' => 'count'
    )
);

The function wp_count_terms() just do the same.

function wp_count_terms( $taxonomy, $args = array() ) {
    $defaults = array('hide_empty' => false);
    $args = wp_parse_args($args, $defaults);

    if ( isset($args['ignore_empty']) ) {
        $args['hide_empty'] = $args['ignore_empty'];
        unset($args['ignore_empty']);
    }

    //HERE IT SETS COUNT VALUE FOR YOU
    $args['fields'] = 'count';

    return get_terms($taxonomy, $args);
}

It's not the first time I noticed, that english version of codex is outdated. For example spanish codex don't have a 'count' argument - https://codex.wordpress.org/es:Function_Reference/get_terms

转载请注明原文地址:http://conceptsofalgorithm.com/Algorithm/1736260596a676.html

最新回复(0)