web-dev-qa-db-ja.com

カテゴリーとそのサブカテゴリー内の投稿数を数え、ショートコードを使用して結果を表示する

カテゴリ内の投稿数を表示するためのショートコードを作成しようとしています。私はこのコードを使ってこれを成功させました:

// 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 );を使ってみましたが、サブカテゴリの投稿数を取得してそれらを合計する方法を知りませんでした。

1
Atef Wagih

ショートコード

// 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');
2
Ahmed Fouad

指定されたカテゴリに加えてサブカテゴリ内の投稿を数えるための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フィールドの集計の例がありますが、投稿がマッチしたカテゴリの複数に属する場合、これは無効な結果をもたらす可能性があります。

0
Joe