统计类别及其子类别中的帖子数量,并使用快捷码显示结果

时间:2016-09-27 作者:Atef Wagih

我试图创建一个短代码来显示类别中的帖子数量。我已使用以下代码成功完成此操作:

// Add Shortcode to show posts count inside a category
function add_count_of_posts_in_category() {
$term = get_term( 7, \'category\' ); 
$count = $term->count;
echo $count;
}
add_shortcode( \'show-posts-count\', \'add_count_of_posts_in_category\' );
但是,这意味着我需要指定ID 短代码的类别。这意味着我需要为每个类别创建一个短代码,这是无用的。

我试图找到一种方法,用一个变量修改类别ID部分,这样我就可以使用这样的短代码:[show-posts-count="cars"] 在称为“汽车”的类别中显示邮政计数。我找不到这样做的方法。

非常感谢你的帮助。

EDIT: 29/09/2016在代码正常工作后,我正在尝试扩展该函数以统计子类别中的帖子。

因此,如果主类别没有帖子,但有2个子类别,每个子类别都有帖子,那么当我在主类别上使用快捷码时,显示的数字是主类别中所有帖子(如果有)的总和,此外,还有子类别和子类别中的帖子数量。。等

我试过使用get_term_children( $term, $taxonomy );, 但不知道如何获得子类别的帖子数量,然后将它们相加。

2 个回复
最合适的回答,由SO网友:Ahmed Fouad 整理而成

短代码

// Add Shortcode to show posts count inside a category
function category_post_count( $atts ) {

    $atts = shortcode_atts( array(
        \'category\' => null
    ), $atts );

    // get the category by slug.
    $term = get_term_by( \'slug\', $atts[\'category\'], \'category\');

    return ( isset( $term->count ) ) ? $term->count : 0;
}
add_shortcode( \'category_post_count\', \'category_post_count\' );
用法
[category_post_count category="category_slug_or_name"]
如果您想按名称获取计数,而不是slug,请更改此
$term = get_term_by( \'slug\', $atts[\'category\'], \'category\');
对此:

$term = get_term_by( \'name\', $atts[\'category\'], \'category\');

SO网友:Joe

要在指定类别之外的子类别中统计帖子,一种可能是使用cat 选项并计算结果。cat 默认情况下,选项查询子类别中的帖子。

add_shortcode(\'category_post_count\', function ($atts, $content) {
    $atts = shortcode_atts([
        \'category\' => 0
    ], $atts);
    $cat_id = is_numeric($atts[\'category\']) ?
        intval($atts[\'category\']) :
        get_category_by_slug($atts[\'category\'])->term_id;
    return count(get_posts([
        \'nopaging\' => true,
        \'fields\' => \'ids\',
        \'cat\' => $cat_id
    ]));
});
有查询子类别和汇总count 字段,但如果帖子属于多个匹配类别,则这可能会产生无效结果。