Wordpress:如何通过自定义分类法在作者页面中显示帖子计数

时间:2015-06-28 08:52:29

标签: php wordpress custom-post-type 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负面反馈

所有反馈都在这里

所有反馈都在这里

所有反馈都在这里

顺便说一下,它是一个自定义帖子类型(custom_feedback)和自定义分类法(feedback_taxonomy),有两个类别正面和负面。

请帮助主人?

1 个答案:

答案 0 :(得分:1)

您接受此操作的唯一方法是运行两个单独的查询并计算从两个单独查询返回的帖子。为此,我们将get_posts使用get_posts已将WP_Query的一些重要默认值传递给'fields' => 'ids',以使查询更快,更注重性能。

我们将为查询$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'; 添加一个巨大的时间和资源保护程序。它的作用是,它只获取post id,而不是完整的post对象。这可以将查询时间和数据库查询减少99%,因此即使您要在整个数据库上运行2个单独的查询,页面性能的损失也是不可察觉的。

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

{{1}}