【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関数については、以下のリンク先を参考にしてみてください。

参考サイトなど

コメント投稿またはTwitterで返信

コメントは、以下の項目(*は必須項目)を入力し「コメントを送信」ボタンから送信お願いします。メールアドレスは公開されることはありません。
Twitterで返信する場合はこちらから。

また、コメントは承認制となります。