カテゴリ内の投稿数を表示するためのショートコードを作成しようとしています。私はこのコードを使ってこれを成功させました:
// 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"]
は、carsと呼ばれるカテゴリの中で投稿数を表示するため。その方法が見つかりません。
あなたの助けは大歓迎です。
編集:2016/09/29コードを動かした後、私は子カテゴリの投稿も数えるように機能を拡張しようとしています。
したがって、メインカテゴリに投稿がなく、2つのサブカテゴリがあり、それぞれに投稿がある場合、メインカテゴリにショートコードを使用すると、表示される数はメインカテゴリ内のすべての投稿の合計になります。さらに、サブカテゴリ内の投稿数、およびサブサブカテゴリ...など
私はget_term_children( $term, $taxonomy );
を使ってみましたが、サブカテゴリの投稿数を取得してそれらを合計する方法を知りませんでした。
// 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"]
$term = get_term_by( 'slug', $atts['category'], 'category');
これに:
$term = get_term_by( 'name', $atts['category'], 'category');
指定されたカテゴリに加えてサブカテゴリ内の投稿を数えるための1つの可能性は、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
フィールドの集計の例がありますが、投稿がマッチしたカテゴリの複数に属する場合、これは無効な結果をもたらす可能性があります。