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

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

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

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

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

デフォルトで設定されているのは「post(投稿)」です。引数に指定がなければ「投稿」の記事数を取得します。

wp_count_posts は投稿ステータス別に投稿数を返すので、ステータス指定が必要です。$posts_num = $count_posts->publish;
こちらを指定しないとエラーになります。

「投稿」以外の投稿タイプの場合は 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_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」というカウントになります。

found_postspost_count を使って「〇〇件中〇〇件」という形の表示ができます。

echo $wp_query->found_posts . "件中" . $wp_query->post_count . "件を表示";

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

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 を使用したサブループでは count() を使用します。

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

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

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

【カテゴリーの例】

<?php
  $cats = get_categories();
  foreach ($cats as $cat):
    $cat_slug = get_category_link($cat->term_id);
    $cat_name = $cat->name;
    $cat_count = $cat->category_count;
?>
  <p><a href="<?php echo $cat_slug; ?>"><?php echo $cat_name; ?><span>(<?php echo $cat_count; ?>)</span></a></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へ