WordPress Popular Posts ショートコードでカテゴリー別人気ランキングを表示する

スポンサーリンク

WordPress Popular Postsとは

WordPress Popular Posts(以下wppと記す)は、サイドバーやフッターにウィジェットで、サイト内の記事を人気順(閲覧数やコメント数順)にランキング表示できるWordPressのプラグインです。

ウィジェットでは非常に多くの方が利用していますが、wppの「ショートコード」を活用すれば、投稿記事中にランキング表示したり、固定ページや、トップ、カテゴリー、アーカイブ、タグページにランキングを作成することが簡単にできます。

これから紹介する方法は、「WordPress Popular Posts」のインストールが必要です。こちらを参考にインストールして下さい。

インストールの手順 インストールするプラグインを検索 「ダッシュボード」→「プラグイン」→「新規追加」を選択し、検索窓にインストールした...

人気ランキングをショートコードで表示する

この記事は、「カテゴリー別」と「全記事」の人気ランキングを、ユーザーが閲覧中のページによって1つのコードで自動判定し、表示する方法について書いています。

「全記事」のみの人気ランキングをショートコードで表示する方法はこちらです。

WordPress Popular Postsとは WordPress Popular Posts(以下wppと記す)は、サイドバーやフッ...

カテゴリー別人気ランキングをショートコードで表示する

「カテゴリー別」の人気ランキングを表示するためには、ユーザーが閲覧中のページのカテゴリーをその都度、PHP プログラムで取得する必要があります。

記事やウィジェットには PHP プログラムを書くことができないので、「全記事」人気ランキングのように直接記事中やウィジェットに書くことができません。

解決方法には、次の2通りがあります。

  1. PHPプログラムをショートコード化し、記事やウィジェットにショートコードタグを書く
  2. single.phpなどのテンプレートファイルに、直接 PHP プログラムを記述する

PHP プログラムをショートコード化し、記事にショートコードタグを書く

ショートコードタグ記述個所による表示の相違

タグ記述個所による表示の相違は、

  • 記事ページにタグを記述:「投稿記事」ページにのみカテゴリー別ランキングを表示
  • ヘッダー、フッター、サイドバーにタグを記述:
    カテゴリーのあるページには「カテゴリー別ランキング」、ないページには「全記事のランキング」を自動で切り替えて表示します。具体的には、

    • 「投稿記事」ページ、「カテゴリー」ページは、カテゴリー別ランキングを、
    • 「トップ」ページ、「固定」ページ、「アーカイブ」ページ、「タグ」ページにはカテゴリーがないので、全記事のランキングを表示

になります。

ソースコード(ショートコード版)

以下のコードをfunction.phpに追記します。子テーマがある場合は、子テーマのfunction.phpに追記すると、親テーマのアップグレードに影響されないので管理が楽になります。

パラメータの詳細は、Wordpress「管理画面」の「設定」>「Wordpress Popular Posts」から「パラメータ」タブで確認できます(英文)。
良く使うパラメータをまとめたものが、wppショートコードのパラメータにありますのでこちらをご覧ください。

特に、カテゴリー(cat)のパラメータ設定は、cat=”1,55,-74″ (マイナスIDは除外の意)形式なので、その形式で出力します。

表示がブログ横幅内に1行で収まらないときは、CSS の width、margin-right、font-size で調整するか、表示件数を減らしてご利用ください。

「$title」で表題、「$args」でパラメーターの設定をしています。用途に合わせて適時変更して下さい。

  • 表題($title = ‘今日の人気ランキング TOP 5’)
  • 表示件数最大5件まで(limit=5)
  • 集計期間 1日(range=”daily”)
  • ランキング順 閲覧数(order_by=”views”)
  • 30x30pxのサムネイル付き(thumbnail_width=30 thumbnail_height=30)
  • カテゴリー指定(cat=”$now_id”):これは変更できません
  • 固定ページはランキングしない(post_type=”post”)
  • 閲覧数を表示する(stats_views=1)
///////////////////////////////////////////////////
//「カテゴリー別人気ランキング」ショートコード(myWpp_cat_Ranking)
///////////////////////////////////////////////////
function myWpp_cat_Ranking(){
  if ( is_single() ) {
    //投稿ページでは全カテゴリー取得
    $categories = get_the_category();
    $category_IDs = array();
    $category_names = array();
    foreach($categories as $category):
      array_push( $category_IDs, $category -> cat_ID);
      array_push( $category_names, $category -> cat_name);
    endforeach ;
    $now_id = implode(",", $category_IDs); //cat_IDを「,」で連結
    $now_name = implode(",", $category_names); //cat_nameを「,」で連結
  } elseif ( is_category() ) {
    //カテゴリページではトップカテゴリーのみ取得
    $categories = get_the_category();
    $cat_now = $categories[0];
    $now_id = $cat_now->cat_ID;
    $now_name = $cat_now->cat_name;
  }
  //表題とパラメーターの設定
  $title = '今日の人気ランキング TOP 5';
  if ( $now_id ) { //カテゴリーがあるときは「カテゴリー名」を付加
    $title = '「 '.$now_name.' 」カテゴリー:'.$title;
  }
  $args = '
  limit=5&
  range="daily"&
  order_by="views"&
  thumbnail_width=30&
  thumbnail_height=30&
  cat="'.$now_id.'"&
  post_type="post"&
  stats_views=1';
?>
<style type="text/css">
div.mywpp li {
  display: inline-block;
  vertical-align: top;
  width: 9em;
  margin-right: 5px;
  font-size: 13px;
  line-height: 1em;
}
</style>
<div class="mywpp">
<table><tr>
<th><span><a href="http://wp.kikuchisan.net/wpp-cat-shortcode.html">by ブログ工房</a> </span><?php echo $title; ?></th>
</tr><tr>
<td><?php wpp_get_mostpopular($args); ?></td>
</tr></table>
</div>
<?php
}
add_shortcode('myWpp_cat', 'myWpp_cat_Ranking');

表示サンプル

カテゴリー別人気ランキングを表示したい場所に、ショートコードタグ[myWpp_cat]を記述します。

記事ページに記述した場合の表示サンプルは、このページのトップのものになります。記事中のどの場所にタグ[myWpp_cat]を記述しても、常にページトップに表示されます。

single.phpなどのテンプレートファイルに、直接 PHP プログラムを記述

(参考)ソースコード(PHP版)

header.php、footer.phpや、投稿ページsingle.php、固定ページpage.phpなどのテンプレートファイルに直接記述する場合は、PHP版のコードを使います。

PHP版コードへの変更は、ショートコード版の、最初と最後の関数定義部分、

  • 4行目の「function myWpp_cat_Ranking(){」
  • 55,56,57行目の「<?php」、「}」、「add_shortcode(‘myWpp_cat’, ‘myWpp_cat_Ranking’);」

を取り除いたものになります(必要に応じて先頭に<?phpを付けて下さい)。

PHP版は、自由度が高く好きなページの好きな場所に表示できるメリットはありますが、テーマ内のテンプレートファイルを直接編集するため、テーマをアップグレードすると消えてしまうので、管理の楽なショートコード版がお勧めです。

Simplicityでの設置まとめ

当ブログでも使用させて頂いているテーマ「Simplicity」で、すべてのページにランキングを表示するには次の3ヵ所の設定を行います。

Simplicityには沢山のウィジェットエリアが用意されていて、PHPプログラムの知識がなくても、ウィジェットにショートコードタグを記述することで、初心者でも簡単にランキングを設置することができます。

インデックスリストページ(※)用ウィジェットはSimplicity1.6.5で、固定ページ用ウィジェットはSimplicity1.6.8で実装されています。

  1. 投稿ページ:ウィジェット「投稿本文上」にテキストウィジェットを設置し、そこにショートコードタグ[myWpp_cat]を記述 ⇒ カテゴリー別ランキングを表示

  2. 固定ページ:ウィジェット「固定ページ本文上」にテキストウィジェットを設置し、そこにショートコードタグ[myWpp_cat]を記述 ⇒ 全記事ランキングを表示

  3. インデックスリストページ:ウィジェット「インデックスリストトップ」にテキストウィジェットを設置し、そこにショートコードタグ[myWpp_cat]を記述
     ⇒ カテゴリーページにはカテゴリー別ランキングを、トップ、アーカイブ、タグページには全記事ランキングを表示

(※)インデックスリストページとは、トップページやアーカイブページのように「記事一覧」が表示されるページのことです。

ウィジェットでショートコードを使えるようにするには

ショートコードをウィジェットで動かすためには、下記の 1行(add_filter)を functions.php に追記すればOKです。記述場所は functions.php の中であればどこでも構いません。これで、ウィジェットでショートコードが使えるようになります。

//テキストウィジェットでショートコードを使用する
add_filter('widget_text', 'do_shortcode');

WordPress 関連 おススメ記事

スポンサーリンク