以下は私がポストタグ(分類法)の数/数を出力するのに使うコードです。分類数の特徴である投稿の種類に基づいて(総数ではなく)数を分割できるようにします。
だから私はデフォルトの "post" Postタイプ、 "blogs"、& "pics"を持っています。タクソノミーカウントに次のようなものを表示したいと思います。 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 } ?>
私はこの小さな関数を作成したので、私は用語ごとにタイプごとの投稿数を取得する必要がありました:
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 } ?>
何千もの投稿があるのであれば、すべての投稿をロードしないようにposts_per_page
を1
に設定するのが賢い方法です。
WP_Queryはif ( empty( $q['posts_per_page'] ) )
をチェックするため、これを0
に設定しても機能しません。 0
はempty()
なので、WP_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;
}
私は各用語の入れ子になったループの中でこれを使っています:
$terms = get_the_terms( $post->ID , 'yourtaxonomynamehere' );
if($terms) {
foreach( $terms as $term ) {
echo $term->count;
}
}
?>