WordPressでカスタム投稿タイプを活用すると、投稿タイプごとにコンテンツを管理できるようになるため、より柔軟なサイト構築が可能になります。たとえばニュース記事、製品、イベント、スタッフ紹介などを別々の投稿タイプとして管理でき、デザインや機能の拡張も簡単です。
ところで、サイト内で「特定のカスタム投稿タイプが何件あるか」を表示したいケースがあります。そこで本記事では、WordPressで特定のカスタム投稿タイプの投稿数を取得する方法を2つご紹介します。
WP_Queryとfound_postsを使って取得する方法
WordPressで最も定番のやり方は、WP_Query クラスを利用し、そのプロパティである found_posts から総数を取得する方法です。
以下のように、post_type で特定のカスタム投稿タイプを指定し、さらに post_status を ‘publish’ にすることで公開済みの投稿のみを対象にします。そして、posts_per_page を1にしておけば実際に取得する投稿は最小限で済みます。
$args = [
'post_type' => 'my_custom_post_type', // カスタム投稿タイプのスラッグ
'post_status' => 'publish', // 公開状態のみを対象
'posts_per_page' => 1, // 最小限の件数でOK
];
$query = new WP_Query( $args );
// 総数を取得
$my_custom_post_count = $query->found_posts;
- 取得する投稿データは最小限に抑えられるので、パフォーマンス的に有利。
- クエリ条件を変更することで柔軟な集計ができる。
WP_Query は特定の投稿タイプやタクソノミーなど、複雑な条件を指定して投稿を絞り込む場合にもよく使われる手法です。とくに、投稿数が多いサイトほど効率的に投稿数を取得できるため、最適な方法といえます。
get_posts()とcount()を使う方法
もう1つの簡単なやり方としては、get_posts() 関数ですべての投稿を取得し、count() で配列の件数を確認する方法があります。
$args = [
'post_type' => 'my_custom_post_type',
'post_status' => 'publish',
'numberposts' => -1, // 全件取得
];
$posts = get_posts( $args );
$my_custom_post_count = count( $posts );
この方法はすべての投稿を実際に取得してしまうため、投稿数が多い場合はメモリや処理時間が増加し、サイトのパフォーマンスに影響する可能性があります。サーバーへの負荷も大きくなりやすいので、数件〜数十件レベルの小規模サイトであれば問題ないですが、大規模サイトではおすすめできません。
まとめ
特定のカスタム投稿タイプの投稿数を効率的に取得する場合、WP_Query
の found_posts
を使う方法が最も一般的でパフォーマンス面でも優れています。以下をまとめます。
- WP_Query + found_posts
- 最小限のデータで総数が取得できるため、パフォーマンスに優れている。
- クエリの柔軟性が高いため、条件を追加・変更しやすい。
- get_posts() + count()
- コードがシンプルでわかりやすい。
- 投稿数が多い場合は処理に時間がかかり、パフォーマンスに悪影響を及ぼす可能性がある。
サイトの規模や投稿数に応じて、使いやすい方法を選んでみてください。カスタム投稿タイプを活用したサイト管理をより便利にし、ユーザーにとっても見やすい情報提供を目指しましょう。