カスタム投稿+特定カテゴリー所属でループした記事数を取得・表示 | ワードプレス

最終更新日:  |  web関連, WordPressカスタマイズ, 記事一覧

今回やりたいことは
・特定のカスタム投稿
・それ専用のカテゴリー(X)のページ
・カテゴリー(X)のページで記事数の表示
この条件で作っていきます。

なぜこのようなことをするかと言いますと、カスタム投稿A、カスタム投稿B、カスタム投稿Cという複数のカスタム投稿を使ったニュースサイトを製作しています。
ナビにはカスタム投稿Aに所属しているカテゴリー(X)のページを表示。
当然そのリンク先はカスタム投稿Aでカテゴリー(X)のみを取得して表示します。
そこで、記事の数が膨大で複数のページに分ける場合、ページネーションを使用するわけですが、分けた場合、合計何件の記事があるか知りたいですよね?
そこでカテゴリーの所属記事数を取得します。
通常1つのPOSTタイプを使っているのであれば

<p>カテゴリー記事数:<?php $chosen_id = $cat;$thisCat = get_category($chosen_id);echo $thisCat->count;?>件</p>

で足りるのですが、今回は複数の投稿タイプを使っています。
さらに難となったのは、複数の投稿タイプで共通のカテゴリーを使用していました。

上のコードで表示すると、呼び出していないはずのカスタム投稿B、カスタム投稿Cに所属のカテゴリー(X)の記事数もカウントされています。

(例)

1.カスタム投稿Aの記事で、尚且つカテゴリー(X)に所属している記事数は58件
2.カスタム投稿Bの記事で、尚且つカテゴリー(X)に所属している記事数は6件
3.カスタム投稿Cの記事で、尚且つカテゴリー(X)に所属している記事数は20件

だとします。

今回取得したいものは1番の58件のみですが、出力するとカテゴリー(X)に所属している記事の総数84件が取得件数として表示されます。

当然条件分岐でカスタム投稿Aの記事を限定してますので、出力されている記事の数は58件なのに、カテゴリーの記事数は84件となるのでおかしい結果となってしまいます。

そこで色々調べてみると、よく見かけたのは

functions.phpに

function loop_count(){
global $wp_query;
return ($wp_query->post_count);
}

呼び出しで

<?php echo loop_count(); ?>

というものでしたが、これだとページネーションを使っているため表示されている件数のみとなってしまう。
※1ページ10件の表示の場合、上記の方法だと記事数は10件とされてしまう。

 

ということで、カスタマイズします。

functions.phpに

function loop_count(){
global $wp_query;
return ($wp_query->found_posts);
}

呼び出しで

<?php echo loop_count(); ?>

found_postsを使うことにより、全件取得して、その中の条件にあったloop件数を表示することができます。

今回かなり手間取った為、備忘録として記録しました。

————————-ここから追記—————————

情報が足りておりませんでした。

上記のコードでやった場合、query_postsの前に書いてしまうと他の投稿ポストの分までカウントしてしまいます。

なので、上記のコードを使う場合は必ずquery_postsで条件を指定した後にコードを入力してください。

前もって必要な情報は、htmlのトップに変数で格納をしてください。

<?php
//前もって必要な情報
//1ページ表示記事数
$number_of_display = 15;
//現在のカテゴリー名取得
$categoryname = single_cat_title('',false);
//カテゴリー名からカテゴリーIDの取得
$categoryid = get_cat_ID($categoryname);
//複数ページに分ける為、ページ数取得
$paged = get_query_var('paged');
//↓要らないかも?
$cat_id=get_query_var('cat');
$cat=get_category($cat_id);
?>
<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="<?php bloginfo('html_type'); ?>; charset=<?php bloginfo('charset'); ?>" />

————————————-

ループ回数取得、出力したい部分に

<?php query_posts( array('tax_query' => $taxquerysp,'s' => $s,'posts_per_page'=>$number_of_display,'paged'=>$paged,'cat'=>$categoryid));?>
<p>このカテゴリーの記事数は<?php echo loop_count(); ?>件です。</p>
<?php wp_reset_query(); ?>

query_postsを使用した時は、クエリーのリセットも忘れずに!