【WordPress Popular Posts】カテゴリー・タグ別のランキングを表示

WordPressのプラグイン『WordPress Popular Posts』は記事のランキング(人気記事一覧)を表示することができるプラグインです。
『WordPress Popular Posts』を使用していると、カテゴリー、タグ別の記事ランキングを表示したい場合があるかもしれません。
今回は、そのような場合に使える、条件によってカテゴリー、タグ別の記事ランキングを表示する例となります。
条件によってカテゴリー、タグ別の記事ランキングを表示する例
今回の例では、カテゴリー、タグ別の記事ランキングを表示させる条件は、以下となります。
- 投稿ページでは、そのページが属しているカテゴリーの記事ランキングを表示
- カテゴリー、タグのアーカイブページでは、そのページが属しているカテゴリー、タグの記事ランキングを表示
上記以外のページでは、サイト全体の記事ランキングを表示します。以下がソースコードの例となり、記事ランキングを表示したい箇所に記述します。
<?php
if ( function_exists( 'wpp_get_mostpopular' ) ) {
// カテゴリー、又はタグ名を格納する変数を定義
$term_name = NULL;
// 投稿ページの場合
if( is_single() ){
$cat = get_the_category();
$term_id = $cat[0]->term_id;
$term_name = $cat[0]->name;
// カテゴリー別の記事ランキングを表示するためのパラメータを指定
$term_arg = array(
// カテゴリーidを指定
'cat' => $term_id,
);
// アーカイブページの場合
}elseif( is_category() || is_tag() ){
$obj = get_queried_object();
$taxonomy = $obj->taxonomy;
$term_id = $obj->term_id;
$term_name = $obj->name;
// カテゴリーまたは、タグ別の記事ランキングを表示するためのパラメータを指定
$term_arg = array(
// タクソノミーを指定
'taxonomy' => $taxonomy,
// タームidを指定
'term_id' => $term_id,
);
}
// 共通するパラメータを指定
$arg = array (
// 記事を表示する最大件数
'limit' => 3,
// 集計期間。 daily, weekly, monthly, all のいずれかを指定
'range' => 'weekly',
// ソート順の対象。 views(閲覧数), comments(コメント数), avg(1日の平均)のいずれかを指定
'order_by' => 'views',
// ポストタイプを指定。post, page, などを指定
'post_type' => 'post',
);
// カテゴリー、又はタグ名を取得した場合
if( $term_name ){
// カテゴリー、又はタグ別の記事ランキング表示するためのパラメータを結合
$arg = array_merge( $term_arg, $arg);
echo "<h2>" . esc_html( $term_name ) . "のアクセスランキング</h2>";
}else{
echo "<h2>アクセスランキング</h2>";
}
wpp_get_mostpopular( $arg );
}
?>
『WordPress Popular Posts』では、記事ランキングを出力する際に、HTMLを自由にカスタマイズすることも出来ます。詳しくは、以下のリンク先を参考にしてみてください。
ソースコードの説明
上記ソースコードのポイントとなる箇所を以下に説明します。
『WordPress Popular Posts』の記事ランキングを表示するには、wpp_get_mostpopular関数を使用します。その際に、取得したいランキングを関数のパラメータで指定します。
今回の例では、条件によって、カテゴリー又はタグ別の記事ランキングを表示させるので、その条件にあうwpp_get_mostpopular関数のパラメータを指定しています。
なお、wpp_get_mostpopular関数のパラメータの詳細は、WordPress管理画面から、プラグイン『WordPress Popular Posts』の設定画面で確認できます。
カテゴリー、タグ別の記事ランキングを表示するために必要な情報を取得、指定
例のソースコード3行目からの箇所
// カテゴリー、又はタグ名を格納する変数を定義
$term_name = NULL;
// 投稿ページの場合
if( is_single()){
$cat = get_the_category();
$term_id = $cat[0]->term_id;
$term_name = $cat[0]->name;
// カテゴリー別の記事ランキングを表示するためのパラメータを指定
$term_arg = array(
// カテゴリーidを指定
'cat' => $term_id,
);
// アーカイブページの場合
}elseif( is_category() || is_tag()){
$obj = get_queried_object();
$taxonomy = $obj->taxonomy;
$term_id = $obj->term_id;
$term_name = $obj->name;
// カテゴリーまたは、タグ別の記事ランキングを表示するためのパラメータを指定
$term_arg = array(
// タクソノミーを指定
'taxonomy' => $taxonomy,
// タームidを指定
'term_id' => $term_id,
);
}
上記ソースコードの箇所では、まず、カテゴリー又はタグ別ランキングの出力の判断に使用するため、カテゴリー又はタグ名を格納する変数($term_name)を定義します。
次に、カテゴリー又はタグ別の記事ランキングを表示するためのwpp_get_mostpopular関数のパラメータを、それぞれ、関数を使い取得します。
取得する関数は、投稿ページの場合にはget_the_category関数、カテゴリー又はタグアーカイブページの場合には、get_queried_object関数を使用しています。
get_queried_object関数の詳細については、以下のリンク先を参考にしてみてください。
共通するパラメータを指定
例のソースコード30行目からの箇所
// 共通するパラメータを指定
$arg = array (
// 記事を表示する最大件数
'limit' => 3,
// 集計期間。 daily, weekly, monthly, all のいずれかを指定
'range' => 'weekly',
// ソート順の対象。 views(閲覧数), comments(コメント数), avg(1日の平均)のいずれかを指定
'order_by' => 'views',
// ポストタイプを指定。post, page, などを指定
'post_type' => 'post',
);
上記ソースコードの箇所では、すべての記事ランキングに共通するwpp_get_mostpopular関数のパラメータを指定しています。
条件によりパラメータと出力するHTMLを変更
例のソースコード42行目からの箇所
// カテゴリー、又はタグ名を取得した場合
if( $term_name ){
// カテゴリー、又はタグ別の記事ランキング表示するためのパラメータを結合
$arg = array_merge( $term_arg, $arg);
echo "<h2>" .$term_name. "のアクセスランキング</h2>";
}else{
echo "<h2>アクセスランキング</h2>";
}
上記ソースコードの箇所では、カテゴリー又はタグ別の記事ランキングを表示する場合と、全体の記事ランキングを出力する場合の条件分岐となり、条件分岐の判断は、$term_name(カテゴリー、又はタグ名)に値が格納されているかで判断しています。
$term_nameに値が格納されている場合は、カテゴリー又はタグ別の記事ランキングのパラメータと共通のパラメータの配列をarray_merge関数で結合します。
そして、$term_nameに格納してあるカテゴリー又はタグ名は、h2要素の内容の一部として出力しています。
また、配列を結合するarray_merge関数については、以下のリンク先を参考にしてみてください。