WordPressで投稿記事数をカウントする方法+特定の記事を除外する工夫

※2017年5月14日執筆情報なので古い可能性があります。

今回は、運営サイトでWordpressで記事数カウント表示をしている部分において、特定のカテゴリ記事数を表示したい時の技です。

とはいえ、単に引き算しているだけなんですが(笑)

現時点では、件数カウント自体は簡単に取ってこれる関数があるのでそれを使った方がいいはずです。

WordPressで記事投稿数のカウントがうまくいってない

まずは課題の整理です。運営サイトのWebサービス集めましたで、上の「サービス数:180件」ですが、今は正しくなっています。

以前は、「サービス数:184件」となっていて、余分に取得している状態でした。理由は簡単で、「全ての投稿記事を取得してそれをカウントしていたから」です。

記事数カウントの方法

実際には、$wpdbを用いて、SQLでcountしているコードがあります。これらは全記事数。よって、特定のカテゴリを別に取得し、その件数を引けばいいと考えました。

具体的には、特定のカテゴリとは「月間ランキング」のサービスを紹介する記事数です。これらが4記事現時点であります。

<?php 
		$numposts = $wpdb->get_var("SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post'");
		//ランキング紹介記事数を数える
		$ranking_numposts =  $wpdb->get_var("SELECT count(*) FROM $wpdb->posts WHERE post_status = 'publish' AND post_type = 'post' AND post_name like '%ranking%'");
		
			if (0 < $numposts){
				//全記事からランキング紹介記事を除外する
				$numposts = number_format($numposts-$ranking_numposts);
				echo 'サービス数:' . $numposts . ' 件';

			}
		?>

$numpostsが全記事数で、条件でWhereがありますが、公開されてかつ投稿タイプをしています。投稿記事でなく固定ページを取得したいなら固定ページにする必要があります。

$ranking_numpostsで、やや苦肉の策ですが月間ランキングに該当するものとして、投稿ファイル名で「ranking」を含むものとしてlikeで取ってきています。

全記事数 ー 月間ランキング記事数 = 投稿されたサービス数

で適当な変数に入れて、めでたしめでたしとなります。

ただおそらくですが、Wordpressでdb自体にアクセスしてSelectくらいならまだ良さそうですが、こういう直接のやり方って多分奨励されないなんだろうなあとか思います。他の方法は分からないので、一つのやり方としてメモです。

タイトルとURLをコピーしました