カテゴリーや投稿タイプなどの投稿数を取得&表示【WordPress】 | KoMariCote

カテゴリーや投稿タイプなどの投稿数を取得&表示【WordPress】

更新2024/01/16

WordPressで投稿した記事数を表示させたい場合のメモです。
複数の取得方法があるので、表示させる箇所によって使い分けていきましょう。

wp_count_posts() で投稿タイプ・ステータス別に取得&表示

投稿や固定ページ、カスタム投稿タイプなどの投稿タイプ別に投稿数を取得する関数が wp_count_posts() です。

<?php
  $post_count = wp_count_posts();
  $posts_num = $post_count->publish;
  echo '現在公開されている投稿の記事は「'.$posts_num.'件」です。';
?>

wp_count_posts では投稿ステータス別に投稿数を返すので「どの投稿ステータスか」ということが必要です。これを指定しないとエラーになります。

$posts_num = $count_posts->publish;

表示させたい時は大体が公開されている記事だと思いますが、指定できる投稿ステータスは以下のようなものがあります。「publish」の部分を別のプロパティに変更することで該当の投稿ステータスの数が表示されるようになります。

指定するプロパティ投稿ステータス
publish公開
future予約投稿
draft下書き
pendingレビュー待ち状態
private非公開
trashごみ箱
inherit継承記事(リビジョンなど)

デフォルトで設定されているのは「post(投稿)」ですが、 wp_count_posts() の引数に他の投稿タイプを指定することができます。

// 固定ページの投稿数を取得したい
$page_count = wp_count_posts('page');
$pages_num = $page_count->publish;
echo '現在公開されている固定ページは「'.$pages_num.'件」です。';

// カスタム投稿の投稿数を取得したい
$custom_post_count = wp_count_posts('custom_post_name');
$custom_post_num = $custom_post_count->publish;
echo '現在公開されているcustom_post_nameは「'.$custom_post_num.'件」です。';

動的に投稿タイプを指定する

複数のカスタム投稿タイプを使用していて、かつその投稿タイプのアーカイブや詳細ページで投稿数を表示させたい場合、一つ一つ指定せずとも動的にスラッグを取得して表示させることができます。

<?php
  $custom_post = get_post_type_object(get_post_type())->name;
  $custom_post_count = wp_count_posts($custom_post);
  echo $custom_post_count->publish;
?>

トップページなどやヘッダーなどで使用した場合、メインループの投稿数が表示されます。

複数の投稿タイプを合わせた数を取得・表示

計算式を追加することで、複数の投稿タイプを合わせた数字を表示させることができます。

<?php
  // 「投稿」の公開数を取得
  $post_count = wp_count_posts();
  $posts_num = $post_count->publish;

  // 「カスタム投稿」の公開数を取得
  $custom_post_count = wp_count_posts('page');
  $custom_post_num = $custom_post_count->publish;

  // 2つの投稿タイプの記事数を足す
  $post_all = $posts_num + $custom_post_num;
  echo 'このサイトの記事は'.$post_all.'件あります';
?>

投稿数によって表示内容を変える

投稿数によって表示内容を変えたい場合は if文を使って切り替えます。

<?php
  $post_count = wp_count_posts();
  $posts_num = $post_count->publish;
  if ($posts_num >= 10) {
    echo 'このサイトには10件以上の記事があります';
  } else {
    echo 'まだこのサイトには記事が10件もありません';
  }
?>

wp_count_posts のコード詳細

【PR】

wp_query から投稿数を取得&表示

$wp_query の中にメインクエリの投稿数が入っているので、ここから投稿数を引き出すことができます。表示させたい数字によって指定するプロパティが変わります。

全ての投稿数を取得 – found_posts

投稿されている全てを表示したい場合は found_posts というプロパティをつけます。
※ログインしている状態の時には非公開の記事も含まれます。

// 投稿されている全ての数字を表示
echo $wp_query->found_posts;

検索結果ページに記事数を表示させたい場合やカテゴリー・タグのアーカイブページなどに使えます。

【検索結果ページでの実装例】

<?php $found_posts = $wp_query->found_posts; ?>
<p>「<?php echo get_search_query() ?>」に関連する記事は<?php echo $found_posts ?>件あります。</p>

【カテゴリー・タグアーカイブページでの実装例】

<?php $found_posts = $wp_query->found_posts; ?>
<p>現在公開されている<?php single_cat_title(); ?>の記事は「<?php echo $found_posts ?>」件</p>

表示されるページでの投稿数を取得 – post_count

ページ内で取得した投稿数を取得する場合は post_count というプロパティをつけます。

// 現在表示しているページで取得している投稿数
$wp_query->post_count;

これは「1ページに表示される投稿数で設定している数字を最大値」として表示されます。例えば全部で10件の投稿があったとしても、表示される投稿数を5件に設定してる場合は「5」が出力されます。

  • ・トータルで100件の投稿
  • ・全10ページの投稿アーカイブページ
  • ・1ページに10件ずつ表示

上記の場合、それぞれのページで「10」というカウントになります。

サブループでの取得&表示

WP_Query を使ったサブループ内なら found_posts が使えます。

<?php
  $args=array(
    'posts_per_page' => -1,
    'post_type' => 'page',
  );
  $my_query = new WP_Query( $args );
  echo "この記事は「".$my_query->found_posts."」件あります";
?>

get_posts を使用したサブループでは found_posts ではなく、count() を使用します。

<?php
  $args = array(
    'posts_per_page' => -1,
    'post_type' => 'page',
  );
  $my_query = get_posts($args);
  echo "記事数は「".count($my_query)."」件";
?>

【PR】

カテゴリーやタグの記事数を取得&表示

サイドバーやヘッダー・フッターといった場所にカテゴリーやタグ一覧を表示させて、記事数も表示したい、といった場合は以下のような記述で表示させることができます。

【カテゴリーの例】

<?php
  $cats = get_categories();
  foreach ($cats as $cat):
    $cat_name = $cat->name;
    $cat_count = $cat->category_count;
?>
  <p><?php echo $cat_name; ?><span>(<?php echo $cat_count; ?>)</span></p>
<?php endforeach; ?>

【タグの例】

<?php
  $all_tags = get_tags();
  foreach($all_tags as $tag) :
    $tag_slug = get_tag_link($tag->term_id);
    $tag_name = $tag->name;
    $tag_count = $tag->count;
?>
  <p><a href="<?php echo $tag_slug; ?>"><span><?php echo $tag_name; ?></span><span>(<?php echo $tag_count; ?>)</span></a></p>
<?php endforeach; ?>

【表示例】

カテゴリー名(10)

タグ名(10)

カテゴリー : WordPress

TOPへ