カテゴリーごとに人気記事を表示する方法1

カテゴリー毎に人気記事を表示させたいとき「Wordpress Popular Posts」プラグインのテンプレートタグを利用することで実現できます。

その方法について、「カテゴリー階層をどのくらい使うのか」、「親子の階層がないカテゴリーの構造なのか」、「親カテゴリーだけ表示したいのか」などサイト運営者の表示したい意図やサイト構造によりコードがいくつか考えられ変わってくると思います。

そこで今回は、2階層のカテゴリーまでで、記事の属する親カテゴリー毎に人気記事を表示する方法について書きます。もっと深い階層のカテゴリーを扱うときは別のコードが必要になります。

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

表示している記事のカテゴリー情報を得るのにget_the_category()を使いますが、get_the_categoryは記事の属するカテゴリー情報を取得しますけれど、カテゴリーの親子順で取得できませんので親子判定を別途しながらという方法も考えられますが、判定しない方法で実現します。

まず、get_the_categoryを使い記事のカテゴリー情報を取得します。引数($post->ID)はなくても大丈夫だと思いますが、一応記述します。

$cat_now = get_the_category($post->ID);

親カテゴリーがどうかを判定をしていきます。cat_now[0]->parentで親カテゴリーがあれば0(ゼロ)以外を返えします。0以外であれば親カテゴリーということになり表示するカテゴリーになるので、次のコードで親カテゴリーを代入します。

if( $cat_now[0]->parent != 0 ) :
	$cat_parent = $cat_now[0]->parent;

次も同じように記事の属するのが親カテゴリーか判定して、そうであれば代入します。

elseif( $cat_now[1]->parent != 0 ) :
  $cat_parent = $cat_now[1]->parent;

上のコードは一例ですので、他にも色々判定の方法があると思いますので、自分なりにコードを改造して試してみると良いと思います。

他にもカテゴリー用の変数に代入するコードとしては、直接カテゴリーIDを代入する下のコードも考えられます。

else:
  $cat_parent = $cat_now[0]->cat_ID;

また、ページでカテゴリーを表示したいときは、直接カテゴリーIDを指定する方法もあります。

elseif( is_page( ページID ) ) :
       $cat_parent = '3,5,13';

最後に人気記事を表示するためにwpp_get_mostpopularタグを使用してカテゴリーなどの表示設定をします。

wpp_get_mostpopular("range=weekly&limit=15&stats_comments=0&cat=$cat_parent");

私が使用しているコードと違うので検証していないんですけれど、ページに表示するなど無い単純な2階層程度のカテゴリーで人気記事を表示するなら下のようなコードが考えられると思います。下のコードも長いのでif~elseだけの単純なコードでもいいと思います。

$cat_now = get_the_category($post->ID);

if( $cat_now[0]->parent != 0 ) :
  $cat_parent = $cat_now[0]->parent;
elseif( $cat_now[1]->parent != 0 ) :
  $cat_parent = $cat_now[1]->parent;
else:
  $cat_parent = $cat_now[0]->cat_ID;
endif;

wpp_get_mostpopular("range=weekly&limit=10&stats_comments=0&cat=$cat_parent");

人気記事をサイドバーに表示するには、直接テンプレートに書き込む他に、PHPが使えるプラグインを使用します。例えば「PHP Code Widget」プラグインを使うとウィジェットにPHPが使える「PHP Code」ができるので、そこにコードを書くと表示することができます。

コメントを残す

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