WordPress 投稿数の取得・表示方法

WordPress 投稿数の取得・表示方法

WordPress で公開済記事の投稿数を取得して表示する方法を紹介します。
例えば、投稿のアーカイブページで投稿数を表示したい時に便利な方法です。
合わせて、固定ページの記事の投稿数や、カテゴリアーカイブページのタームに紐づく記事の投稿数、サブループでカスタマイズしたクエリの記事の投稿数などの表示方法も紹介します。

  1. カスタム投稿タイプの投稿数の表示
    1. スラッグを動的に指定する場合
    2. 固定ページの投稿数を表示
  2. WP_Query で投稿取得後の投稿数を取得する方法
  3. カテゴリやタグのアーカイブページで投稿数を表示
  4. メインクエリの投稿数を表示
    1. 投稿やカスタム投稿タイプの合計数を表示する場合
  5. サブループで指定したクエリから投稿数を取得する方法

カスタム投稿タイプの投稿数の表示

カスタム投稿タイプの公開済みの投稿数を取得して表示する方法を紹介します。
投稿数の取得にはテンプレートタグ wp_count_posts() を使用します。
次のコードは、カスタム投稿タイプのスラッグが products の場合の投稿数の取得方法です。

<?php // 投稿数の取得
$count_post = wp_count_posts( 'products' ); // カスタム投稿タイプのスラッグを指定
?>

投稿タイプの指定は $count_post = wp_count_posts( 'products', 'readable' );products を変更してください。
通常の投稿であれば post を指定してください。
取得した値は次のように格納されています。

stdClass Object ( [publish] => 123 [future] => 0 [draft] => 0 [pending] => 0 [private] => 0 [trash] => 0 [auto-draft] => 0 [inherit] => 0 )

公開済の投稿を表示する場合は $count_post に対して publish(公開済み) を指定します。

<?php
$count_post = wp_count_posts( 'products' ); // カスタム投稿タイプのスラッグを指定
echo $count_post->publish; // 公開済の投稿数を表示
?>

変更できる投稿ステータスは次の通りです。

公開済 publish
誰でも見ることができる投稿
予約済 future
未来の日付に公開を設定された投稿
下書き draft
特定の権限を持つユーザーしか閲覧できない未完成の投稿
非公開 private
WordPress 閲覧権限を持つユーザーしか見られない投稿

スラッグを動的に指定する場合

カスタム投稿タイプのスラッグを動的に指定する場合は get_post_type_object() を使用します。
次のコードをカスタム投稿のアーカイブや詳細ページのテンプレートに追加します。

<?php
$custom_post_name = get_post_type_object(get_post_type())->name; // カスタム投稿タイプのスラッグを表示
$count_post = wp_count_posts( $custom_post_name , 'readable' ); // カスタム投稿タイプのスラッグを指定
echo $count_post->publish; // 公開済の投稿数を表示
?>

固定ページの投稿数を表示

固定ページの投稿数を表示する場合は wp_count_posts()page を指定します。

<?php
$count_page = wp_count_posts('page'); // 固定ページを指定
echo $count_page->publish; // 公開済の投稿数を表示
?>

WP_Query で投稿取得後の投稿数を取得する方法

WP_Query で投稿取得後の投稿数を取得する場合は、$the_query から post_count を使って取得した投稿数を取得します。
次のコードは WP_Query で取得した投稿が $the_query に格納されている場合の取得方法です。

<?php echo $the_query->post_count; ?>

カテゴリやタグのカテゴリアーカイブページで投稿数を表示

現在表示しているカテゴリアーカイブページの分類(カテゴリ・タグ・タームなど)に紐づく投稿数を表示する場合は get_queried_object() を使用します。
この関数は、アーカイブページを表示中ならカテゴリオブジェクトを取得できるので、その値からカウント数を取り出して表示します。

<?php
$term = get_queried_object();
echo $term->count;
?>

メインクエリの投稿数を表示

現在表示しているメインクエリの投稿数を表示する場合は $wp_query から投稿数を取得します。
トップページなどで全ての記事の投稿数を表示したい時に便利な方法です。

<?php
global $wp_query;
echo '投稿数'.$wp_query->found_posts.'件';
?>

この方法は管理画面にログインしていると非公開の記事も含まれるので注意が必要です。
サブループでクエリをカスタマイズしている場合は「サブループで指定したクエリから投稿数を取得する方法」をご覧ください。

投稿やカスタム投稿タイプの合計数を表示する場合

投稿やカスタム投稿タイプの合計を表示する場合は、メインクエリをカスタマイズして投稿数を取得する必要があります。
例えば、投稿とカスタム投稿タイプ products の合計数を表示したい場合は、次のコードを functions.php に追加してください。

/* 【出力カスタマイズ】メインクエリーに投稿タイプを追加 */
add_action( 'pre_get_posts', 'foo_modify_main_queries' );
function foo_modify_main_queries ( $query ) {
if ( ! is_admin() && $query->is_main_query() ) { // 管理画面以外 かつ メインクエリーを対象とする
if ( $query->is_home() ) { // ホームページに 投稿とカスタム投稿タイプを含める
$query->set( 'post_type', array( 'post','products' )); // 投稿タイプの指定
}
}
}

メインクエリにカスタム投稿タイプを追加することで、wp_count_posts() から投稿を合計した投稿数を取得することができるようになります。

サブループで指定したクエリから投稿数を取得する方法

サブループで指定したクエリから投稿数を取得する場合は $the_query->found_posts を使って取得します。
次のコードを、カスタム投稿タイプのサブループ内に追加してください。

<?php echo $the_query->found_posts; ?>

まとめ

WordPress で公開済記事の投稿数を取得して表示する方法を紹介しました。