Stinger3を使って人気記事をカテゴリ別でサイドバーに表示させる方法

このブログはまだ立ち上げたばかりで記事も少なく、PV数も少ないので他のブログを参考にしながら色々と模索しています。多くのブログはトップページに人気記事ランキングがサイドバーに表示されています。ただ、ちょっと違和感があったのは個別記事を見ている時に表示されるサイドバーの人気記事ランキングがトップページと同じ場合があったんですよね。

個別記事を見ている時は、そのカテゴリに関連する人気記事が表示された方が他の記事も見たくなるな、と感じたのでそういう風にカスタマイズしていきたいと思います。

photo credit: Osamu Iwasaki via photopin cc

Wordpress Popular Postsのインストール

Wordpressの管理画面から「プラグイン」の「新規作成」から「Wordpress Popular Posts」を検索します。インストール後に有効化します。

wordpress popular posts

しばらくすると関連記事が表示されます。少ないですね・・・。このままだと全てのカテゴリの人気記事しか表示されないのでカスタマイズしていきます。

まず、ウィジェットPHPを使えるようにする必要があるので「Exec-PHP」というプラグインをインストールします。Wordpress管理画面から「プラグイン」⇒「新規追加」で「Exec-PHP」と検索すると出てきますのでインストールします。

functions.phpにカテゴリIDを取得する関数を記述する

次に表示されているページのカテゴリIDを取得する為、以下の関数をfunctions.phpに追加します。

functions.phpはブログの表示に関わる重要なファイルの1つです。編集に失敗するとブログが表示されずに真っ白になる場合があるので編集する前には、バックアップを取るようにしましょう。

//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;
}

ウィジェットに人気記事を表示させる

最後にPHPウィジェットに書いて人気記事を表示させます。

テキストをウィジェットに追加

Wordpress管理画面から「外観」⇒「ウィジェット」を選んで、テキストをサイドバーに追加して下さい。今回は追尾させたかったのでスクロール広告用に追加しました。追加したテキストボックスに以下をコピペして下さい。

cat_ID; if (is_home() && $caca=="") { get_mostpopular('range=weekly&order_by=views&limit=5&stats_comments=0& stats_views=1&pages=0&thumbnail_width=100&thumbnail_height=100&thumbnail_selection=usergenerated'); }else{ get_mostpopular('range=weekly&order_by=views&cat='.$caca.'&limit=5&stats_comments=0& stats_views=1&pages=0&thumbnail_width=100&thumbnail_height=100&thumbnail_selection=usergenerated'); } ?>

limit=5 で表示させる記事数を変えることができます。

thumbnail_width、thumbnail_heightでサムネイルサイズを変えることができます。100×100を指定すると綺麗に整うと思います。ここらへんはお好みで。

今回参考にさせて頂いたサイトは@plus_iさんのブログ↓

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

非常に参考になりました。本当にありがとうございます。

ウィジェットPHPを書かずに同じことを実現する方法もあるみたいですが、うまくいかなかったので今回はこの方法を取りました。

りょうとくの一言

今回は、@plus_iさんのブログを参考にさせて頂いたのでスムーズにできることができました。皆さんも参考にして頂ければと思います。