Taxonomy count per Post type

时间:2011-11-10 作者:Carpy

下面是我用来输出post标记(分类法)计数/编号的代码。我希望能够根据分类法所包含的帖子类型(而不是总数)来拆分计数。

因此,我有默认的“post”帖子类型,以及“blogs”&;“图片”。我希望分类计数显示如下内容:x个帖子| x个博客| x个图片

            <?php
            $tags = get_tags( array(\'name__like\' => "a", \'order\' => \'ASC\') );
            foreach ( (array) $tags as $tag ) { ?>
                <li>                            
                    <a href="<?php echo get_tag_link( $tag->term_id ) ?>">          
                        <span class="name"><?php echo $tag->name ?></span>
                        <span class="number"><?php echo $tag->count ?></span>
                    </a>
                </li>
            <?php } ?>

3 个回复
最合适的回答,由SO网友:Bainternet 整理而成

我需要获得每个学期每种类型的帖子数量,所以我创建了这个小函数:

function get_term_post_count_by_type($term,$taxonomy,$type){
    $args = array( 
        \'fields\' =>\'ids\', //we don\'t really need all post data so just id wil do fine.
        \'posts_per_page\' => -1, //-1 to get all post
        \'post_type\' => $type, 
        \'tax_query\' => array(
            array(
                \'taxonomy\' => $taxonomy,
                \'field\' => \'slug\',
                \'terms\' => $term
            )
        )
     );
    $ps = get_posts( $args );
    if (count($ps) > 0){return count($ps);}else{return 0;}
}
一旦有了这个函数,就可以将代码更改为:

<?php
$ptypes = array(\'post\',\'blog\',\'pic\'); //array with all of your post types
$tags = get_tags( array(\'name__like\' => "a", \'order\' => \'ASC\') );
foreach ( (array) $tags as $tag ) { ?>
<li>                            
        <a href="<?php echo get_tag_link( $tag->term_id ) ?>">          
            <span class="name"><?php echo $tag->name ?></span>
        <span class="number">
            <?php 
                $count = 1;
                foreach($ptypes as $t){
                    echo get_term_post_count_by_type($tag,\'post_tag\',$t) . " " . $t;
                    if (count($ptypes) != $count){
                        echo " | ";
                        $count = $count + 1;
                    }
                }
            ?>
            </span>
    </a>
    </li>
<?php } ?>

SO网友:Mike Averto

我在每个术语的嵌套循环中使用此选项:

$terms = get_the_terms( $post->ID , \'yourtaxonomynamehere\' );
if($terms) {
    foreach( $terms as $term ) {
        echo $term->count;
    }
}
?>

SO网友:Jonathan

我想最好是posts_per_page1 因此,如果你有成千上万的帖子,那么不要加载所有的帖子(但只有一篇),这不是一种非常有效的方式。

将其设置为0 无法工作,因为WP\\U查询将检查if ( empty( $q[\'posts_per_page\'] ) ). 0empty(), 所以WP\\u Query不会使用它。

WP_Query 将对找到的帖子进行计数,以便可以使用,而不是选择所有帖子,然后将它们全部加载到内存中,使此功能比接受的功能更有效。

/**
 * Count number of any given post type in the term
 *
 * @param string $taxonomy
 * @param string $term
 * @param string $postType
 * @return int
 */
function count_posts_in_term($taxonomy, $term, $postType = \'post\') {
    $query = new WP_Query([
        \'posts_per_page\' => 1,
        \'post_type\' => $postType,
        \'tax_query\' => [
            [
                \'taxonomy\' => $taxonomy,
                \'terms\' => $term,
                \'field\' => \'slug\'
            ]
        ]
    ]);

    return $query->found_posts;
}

结束

相关推荐

Custom Taxonomy URL

我已经在这里阅读了几个小时的所有类似答案,但找不到任何足以满足我需求的基本答案。我有一个非层次化的自定义职位类型“库存”。我有一个自定义分类法“division”,它是库存类别我希望单个页面的永久链接URL为:sitename.com/division/postname 但它只是作为:sitename.com/postname 获取要在url中显示的库存类别(部门)的最简单方法是什么?为了澄清,我想用division所代表的类别名称替换“division”。非常感谢您的建议!更新时间: