WordPress Popular Postsでタグ毎の人気記事を表示させる方法

公開日: / 更新日:

前回に引き続いてwpp関連です。
今回オリジナルテーマ作成にあたりwppを使用したのは全4箇所で、それぞれ以下のような仕様でした。

  • 全記事中上位n件の中からランダムでx件表示
  • 全記事中上位n件を表示
  • カテゴリ毎に上位n件を表示
  • タグ毎に上位n件を表示

この中で、「タグ毎に上位n件を表示」を実装する方法が巷で見つからなかったのでご紹介します。

今回は以下の記事を参考にさせていただきました。

カテゴリ毎の人気記事を表示する方法

wppは外観<メニューから設定する他に、ショートコードやphpに直接記述できる関数が用意されています。
例えば、カテゴリ毎の人気ランキングというのはphpで以下のように記述すれば実装が可能です。

このようなやり方で、
「全記事中上位n件を表示」
「カテゴリ毎に上位n件を表示」
この2つまでは特に問題なく実装できました。

しかし、この関数ですが実はタグ用のパラメータが用意されていません。
どうするか…と調べたところ、どうやら無理やりquery_postsで取得する方法があるらしい!

query_postsでランキングデータを取得する

試しにやってみました。

参考)[カスタマイズ]WordPress Popular Posts をquery_postsで取得出来るようにする1つの方法()

問題なく表示ができることを確認! ヽ(*´∀`)ノ

ちなみにパーマリンクの中に「%postname%」を使った場合記事毎にパーマリンクの編集ができますが、日本語だったり、コピーしたページだったりでパーマリンクとスラッグが一致していない場合があるようです。(たまたまなのか、よくある事なのかは分からないのですが)
そうなっていると、url_to_postidでURLから投稿IDをうまく取得できないので注意が必要です。

タグ毎の人気記事を表示する

query_postsに入ってさえしまえば、タグでの絞り込みも容易です。
上記コードの32行め〜36行めを以下に変更します。

こちらで、投稿タグの人気記事ランキングが表示できるようになりました!

注意点として、wppによって$shortcodeに代入したパラメータlimitの件数が取得された後にquery_postsで出力する件数(‘posts_per_page’)に絞り込まれるため、出力したい件数分がlimitに入ってるとは限らないことです。

例えば、タグ「hogehoge」のランキングを出したいとき、
limit = 100
posts_per_page = 5
このような指定で$shortcodeのlimit分の記事(=全記事中上位100件)にタグ「hogehoge」の記事が1件しかなかった場合、quesry_postのposts_per_pageが5件でも、取得できているのが1件しかないので1件しか表示されません。

あまりビュー数が少ない記事のタグだと、$shortcodeのlimitを大きい値にする必要があります。

おまけ「全記事中上位n件の中からランダムでx件表示」

ちなみに、「全記事中上位n件の中からランダムでx件表示」する場合は32行め〜36行めを以下に変更するとできます!



  • このエントリーをはてなブックマークに追加