WordPress 投稿数の取得・表示方法
最終更新日 - 公開日 2016.01.15
by
WordPress で公開済記事の投稿数を取得して表示する方法を紹介します。
例えば、投稿のアーカイブページで投稿数を表示したい時に便利な方法です。
合わせて、固定ページの記事の投稿数や、カテゴリアーカイブページのタームに紐づく記事の投稿数、サブループでカスタマイズしたクエリの記事の投稿数などの表示方法も紹介します。
- カスタム投稿タイプの投稿数の表示
- WP_Query で投稿取得後の投稿数を取得する方法
- カテゴリやタグのアーカイブページで投稿数を表示
- メインクエリの投稿数を表示
- サブループで指定したクエリから投稿数を取得する方法
カスタム投稿タイプの投稿数の表示
カスタム投稿タイプの公開済みの投稿数を取得して表示する方法を紹介します。
投稿数の取得にはテンプレートタグ 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 で公開済記事の投稿数を取得して表示する方法を紹介しました。