ワードプレスのサイドバーにカテゴリ別人気記事を表示する

最近ちょこちょことブログまわりをいじってます。どうもこういうのが好きみたいです。今回は、サイドバーではWoredpress Popular Postsというプラグインを使って人気記事を表示するようにしていますが、ここを見ている記事やカテゴリによって、変更してみました。
複数のジャンルを取り扱うブログ
PLUSのブログもそうですが、iPhone、Web、プログラム、関係のないコラムなどなど私が興味を持っている内容を記事として配信しています。しかし、iPhoneに興味がある人がWebの技術にも興味を持っているかと聞かれるとそうではありません。
つまり、iPhoneの記事を読んでいる人に、サイドバーにWeb技術関連の記事を置いたとしても役に立たないということです。逆もしかりです。せっかく訪問してくれていますので、過去に書いた記事も読んで欲しいところ。
そこで、読んでいる記事のカテゴリによって人気記事も変更したら、興味のある記事がずらーっと出てきて良さそうです。
Woredpress Popular Postsの導入
まずはWoredpress Popular Postsプラグインをインストール。しかし普通にインストールすると、全てのカテゴリの人気記事しか表示されません。
インストール・有効化して、しばらくすると集計結果が表示されます。これは「設定」→「Woredpress Popular Posts」から確認することができます。
(参考) WordPress Popular Postsでサムネイルを表示している方は要注意!
ウィジェットでPHPを使えるようにする
後ほど、ウィジェット内にPHPを記述して、カテゴリ毎に判別して記事一覧を出すようにするので、PHPが使えるように「Exec-PHP Plugin」というプラグインをインストールします。Exec-PHP Pluginを入れると、投稿記事内やウィジェットでPHPプログラムを記述できるようになります。
現在のカテゴリIDを取得する関数を用意
まず、記事別、カテゴリ別にカテゴリIDを取得するためfunction.phpに関数を追加します。このファイルは使用しているテーマ内に入っているはずです。以下のコードを追加してください。
//wp_head()実行時にget_current_category()を実行 add_action('wp_head', 'get_current_category'); // 現在のカテゴリを取得 function get_current_category() { global $_curcat; $cate = null; if( is_category() ) { //カテゴリー表示だったら //$now_cate = get_query_var('cat'); //$cate = get_category($now_cate); $cat_now = get_the_category(); // 親の情報を$cat_nowに格納 $cate = $cat_now[0]; } else if (is_single() ) { //シングルページ表示だったら $cates = get_the_category(); $i = 0; $use_category = 0; foreach ($cates as $cate) { //未分類を除外した配列の一番初めのカテゴリを選択 if($cate->category_parent > 0 && $use_category == 0) { $use_category = $i; } $i++; } $cate = $cates[$use_category]; } //カテゴリーのオブジェクトごと保持 $_curcat = $cate; return $cate; }
(参考) シングルやアーカイブで現在属するカテゴリーを取得する方法(WordPress)
いよいよウィジェット内に人気記事を配置
さて、ここまできたら、いよいよウィジェットに人気記事を追加します。
ウィジェット内に下のプログラムを入れます。
<div class="pop"> <?php global $_curcat; $caca=$_curcat->cat_ID; if (is_home() && $caca=="") { get_mostpopular('range=weekly&order_by=views&limit=10&stats_comments=0& stats_views=1&pages=0&thumbnail_width=60&thumbnail_height=40&thumbnail_selection=usergenerated'); }else{ get_mostpopular('range=weekly&order_by=views&cat='.$caca.'&limit=10&stats_comments=0& stats_views=1&pages=0&thumbnail_width=60&thumbnail_height=40&thumbnail_selection=usergenerated'); } ?> </div>
簡単に解説します。$cacaには、さきほどfunction.phpに追加した関数より、カテゴリIDが返ってきます。
次に
if (is_home() && $caca==””) {
にてトップページかどうかを判別してトップページだったら、カテゴリに関係なく人気記事一覧を表示します。逆に、そうでなければ指定したカテゴリ内の人気記事を表示します。
get_mostpopularはWoredpress Popular Postsに用意されている関数で、()の中にプロパティを指定することができます。
この例でいうと、range=weeklyが週間、order_by=viewsが閲覧数で並び替え、&catが指定したカテゴリIDのみ、limitは何件表示するか、stats_commentsはコメント数を表示するかどうか0で表示しない、あとはサムネイルの大きさ指定など。
詳しくはWoredpress Popular Postsの設定ページのFAQに各パラメータの説明があります。
後は表示されたページのソースを見て、CSSをカスタマイズすれば完了です。
[sc name=”engeneer”]
SHARE
PROFILE

Webサービスを作るのが大好きです。制作会社10年→フリーランス→受託をやめサービス開発に専念。プログラミングのメンターサービスMENTAは月間流通額約1,300万を突破🚀 YouTubeでは個人開発について語ってます / 「自分のサービスで生きていく」をコンセプトに個人開発オンラインサロン「入江開発室」を運営(詳しいプロフィール)