【WordPress Popular Posts】カテゴリ別人気記事の表示が難しかったのでシンプルに直してみた

はじめに

みなさん、こんにちは!

今回は、Wordpressの人気記事を表示してくれる、Wordpress Popular Postsというプラグインを使用して、カテゴリ別の人気記事を表示できるようにするのが思ったより手間だった!
ので、コード編集をシンプルにしてみた、という話題です。

 

WordPress Popular Postsとは

はい。Wordpressユーザの皆さんなら、もう今更ですよね。はい。すみません。
記事の人気度(PV数やコメント数など)が高いものを自動でチョイスして表示してくれる、というプラグインです。ありがたい!

1

こんな感じで、このブログでも右サイドバーに表示されているやつですね。

で、今回のこの記事はなんなの??

はい。
Popular Postsは、基本的にブログ内の全記事の人気度を勘案して、人気記事を自動表示してくれます。
これだけで十分なんですが…
私のブログのような、バイクの記事も、プログラミングの記事も、その他いろいろな記事も…書く人間にとっては、ちょっと困るんですよね。
というのも、私の記事はバイク関連の記事が強すぎて、カテゴリ別にしないと、プログラミングの記事を見ていても、人気記事がバイクのものばかりに。
これじゃあ困りますよね。

そんなあなたに朗報です!
一応、Popular Postsプラグイン自体は、カテゴリ指定を受け付けるような口自体は開いています。
が、どうやらそれはphpからパラメータを与えないと使えないようなんですね。
いつもの、プラグイン編集からではできなさそう、という感じでした。

カテゴリ別に表示するためのプラグインあるからそっちでよくね??

はい。
その通りです。あります。
WPP Plus Widget というプラグインがあり、これを使用すると、phpでコード修正は不要でカテゴリ別記事を表示できるようです。
ただ!
こんなことで一個一個プラグインを追加していたら、数年したらプラグインばっかりのブログになってしまう!!
と思いましたので、今回、この記事ではプラグインを使用せず、php編集で実現することにしますよ!!

 

前置きが長くなりました。ここからが本番です。

まず、今回この記事を書くにあたって、下記のサイトを参考にさせて頂きました。

 

WordPress Popular Postsで今見てる記事と同じカテゴリの人気記事を表示させる方法(まなしばさん)

ありがとうございます。とても参考になりました。

今回は、下記の動きを満たすようにphpを修正しました。

  • ページが単一記事、又は、カテゴリページの場合に、カテゴリ別に人気記事を表示する
  • そうでない場合は、ページ全体の人気記事を表示する

もう少し細かく条件をしたい場合は、お好きなように改修してください。

 

また、カテゴリ別人気記事を実現するための大きなフローとしては、下記のような感じです。

  1. WordPress Popular Postsのプラグインをインストール&有効化
  2. サイドバーを作るphpに人気記事表示用のコードを挿入(10行くらい!コピペでok)

はい。以上です。
あと、申し訳ありませんが、1のプラグインインストールは簡単なのでここでは割愛します!
プラグイン⇒検索でWordpress Popular Posts を入力してEnter⇒インストール⇒有効化
のいつもの手順ですね。はい。

で、2.のphpにコード挿入が一番の関心事ですよね。
早速やってきましょう。

まずは、php編集画面に行きますよ。
外観⇒テーマの編集
で、インストールされているテーマの編集画面にいきます。

今回は、サイドバーに人気記事を表示しますので、サイドバーを表示するphpを探します。
私は、Amadeusというテーマを使用しているのですが、その場合は、下記画像のサイドバー(sidebar.php)がそれを指していますので、クリックします。

2

移動すると、一度も編集していなければ、下記のような状態になっていると思います。
ちなみに、デフォルトテーマのうちのTwenty Sixteenというテーマでも、Amadeusと全く同じでした。

3

さて、このうちの、dynamic_sidebar()…うんたらという所が、サイドバーのウィジェットコンテンツを吐いているようですので、今回は、この直前に、下記のコードを挿入しました。
(2016/08/31 コードを微妙に修正しました)
(2017/11/17 正常に動かなくなっていたので、コードを微妙に修正しました)

<div class="widget-area">
<h4>人気記事</h4>
<div id="popular-post">
<?php
$category_cond_str = "";
if(is_single() || is_category()){
$current_categories = get_the_category();
$category_cond_str = (!empty($current_categories) && !empty($current_categories[0])) ? "&cat=".$current_categories[0]->cat_ID : "";
}
if(function_exists('wpp_get_mostpopular')){
wpp_get_mostpopular('limit=5&range=monthly&order_by=views&thumbnail_width=90&thumbnail_height=90'.$category_cond_str.'&stats_views=0&stats_comments=0');
}
?>
</div>
</div>

どうです。割とシンプルではないですか?

結果は、こんな感じになると思います。

4

一応、かんたんにコード説明をしておきます。

1行目はなくても良いんですが、人気記事だよ!と分かる見出しを付けておくためのタグです。なくても良いです。
2行目は、ないとたぶんダメです。このidタグを基にプラグインが人気記事を付けに来てくれる…はずです。このまんまコピーしてください。人気記事のラッパーとして配置します。なくても大丈夫そうでした。はい。
5行目は、単一ページか、又は、カテゴリページの場合ならーと聞いています。そうでないと、カテゴリIDが無いでしょうからね。
6,7行目は、カテゴリIDを取得し、Popular Postsに与えるパラメータの一部を作っています。
get_the_category関数で、そのページのカテゴリ情報を取得、情報があれば、”&cat” + カテゴリID となるような文字列を作り、なければ空白を返すようにしています。
9行目で、Popular Postsの関数存在チェックをしています。
10行目で、上記関数があった場合に、パラメータを組み立てて実行します。パラメータは、URLのクエリストリングと同じような形式で、「パラメータ名」=「パラメータ値」& のような感じで指定します。

パラメータは、公式ページでも確認できますし、先に掲載したリンクのページにも載っていますので、詳しくはそちらを…
とも思いましたが、利用度が高そうなものだけ一応ここにも掲載しますね。

  • cat
    • カテゴリIDを指定します
  • limit
    • 表示件数です。今回は5件固定としていますが、カテゴリ有無によって切り替えたりしても良いでしょう
  • range
    • Popular Postsの設定にもあるように、どの期間での人気度を採用しますか、というパラメータですね
      daily, weekly, mohthly, all が設定できるようです
  • orderby
    • comments, views, argが指定できるようです
      記事の並び順を意味します

他にも色々あるんですが、力尽きました…

おわりに

これで保存した後、ページを開くと、カテゴリ又は単一ページなら、カテゴリ内の人気記事が、そうでなければブログ全体の人気記事が表示されるようになっているはずです。

もしなっていなければ…
テーマとの相性か、コピー間違いだと思います。

今回は以上です!

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です