WordPressでカスタム投稿の数を取得して表示する

tags: WordPress

WordPressを利用することは多く、今回はmeta_queryを利用して、カスタムフィールドに指定の値を持つ記事数を表示するという処理が必要になったので調査した。

ネットでよく見る実装方法

例によって検索をすると、以下の実装がよくひっかかる。

$args = array(
    'post_type' => 'post',
    'meta_key' => $post_meta_key,
    'meta_value' => $post_meta_value,
    'posts_per_page' => -1
);
$meta_posts = get_posts($args);
$count_post = 0;
foreach ($meta_posts as $post) {
    $count_post++;
}
return $count_post;

こっちの方がよくないですか?

なぜみんなこの記述を採用しているのかわからないが、同じ記述がよく出てくる。
が、気になるのは以下の部分

$count_post = 0;
foreach ($meta_posts as $post) {
    $count_post++;
}

カウンター変数に記事の数だけループさせて、カウントアップしているけど、なぜcount()じゃあダメなんだろう?
以下の処理ではダメなんだろうという疑問。

$args = [
    'post_type' => 'post',
    'meta_key' => $post_meta_key,
    'meta_value' => $post_meta_value,
    'posts_per_page' => -1
];
$meta_posts = get_posts($args);
return count($meta_posts);

処理時間を調べたわけではないけど、こちらの方が標準関数だからループ回すより断然速い気がするのだけれど、、、

もう1つ突っ込むとこの$meta_postsの中身は記事の配列が入っているので、重そう。。
WordPressにクエリ結果の記事数を返す関数がないか?と思ってるんだけど、調べるのがめんどくさくて調べてない。

動けばどうでもいいか(笑