Wordpress:如何按自定义分类法在作者页面中显示 post 计数

Wordpress: How to display post count in author page by custom taxonomy

我正在尝试在作者页面中使用计数器显示自定义分类法,但我似乎不知道该怎么做。

我在function.php

中有一个代码
    add_action( 'pre_get_posts', function ( $q ) {

    if( !is_admin() && $q->is_main_query() && $q->is_author() ) {

        $q->set( 'posts_per_page', 100 );
        $q->set( 'post_type', 'custom_feedback' );

    }

});

在我的作者页面中:

<div class="feedback-respond"> 
         <h3 class="feedback-title">User Feedback </h3>
             <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
               <?php the_content(); ?>
             <?php endwhile; else: ?>
               <p><?php _e('No posts by this author.'); ?></p>
             <?php endif; ?> 
            </div>

该代码适用于所有作者个人资料,但我不知道如何让自定义分类法像这样显示:

用户反馈

6 条正面反馈 4 条负面反馈

所有反馈都在这里

所有反馈都在这里

所有反馈都在这里

顺便说一句,它是一个自定义 post 类型 (custom_feedback) 和自定义分类法 (feedback_taxonomy),具有两个类别正负两类。

请各位高手帮忙?

实现此目的的唯一方法是 运行 两个单独的查询并计算从两个单独的查询返回的 post。为此,我们将使用 get_posts,因为 get_posts 已经将一些重要的默认值传递给 WP_Query,以使查询更快,更注重性能。

我们将为查询添加一个巨大的时间和资源节省器,'fields' => 'ids'。它所做的是,它只获取 post id,而不是完整的 post 对象。这可以将查询时间和数据库查询减少 99%,因此即使您要 运行 对整个数据库进行 2 个单独的查询,页面性能的损失也不会引起注意。

让我们把所有东西都放在代码中(这进入 author.php,注意,这段代码未经测试,至少需要 PHP 5.4+

$author_id = get_queried_object_id(); // Gets the author id when viewing the author page

// Add our term slugs into an array. 
$terms = ['positive', 'negative']; // Just make sure these values are correct
$count = [];
foreach ( $terms as $term ) {
    // Build our query
    $args = [
        'nopaging' => true,
        'post_type' => 'custom_feedback',
        'author' => $author_id,
        'tax_query' => [
            [
                'taxonomy' => 'feedback_taxonomy',
                'field' => 'slug',
                'terms' => $term
            ],
        ],
        'fields' => 'ids'
    ];
    $q = get_posts( $args );

    // Count the amount of posts and add in array
    $count[$term] = count( $q );
}

// Display our text with post counts, just make sure your array keys correspond with your term slugs used
$positive = ( isset( $count['positive'] ) ) ? $count['positive'] : 0;
$negative =( isset( $count['negative'] ) ) ? $count['negative'] : 0;

echo $positive . ' POSITIVE feedback ' . $negative . ' NEGATIVE feedback';