[WordPress] WordPress Popular Posts プラグインの人気記事表示をタグ付けデータで絞り込む方法

人気記事を表示したい時によく WordPress Popular Posts プラグインを利用させてもらっています。

オプションも豊富に用意されており、特定カテゴリーで人気記事表示をしたい場合にはデフォルトオプションで絞り込みができます。しかし、絞り込みたいのがタグだった場合はデフォルトオプションでできる方法が見当たりませんでした…。

どうやってタグで絞り込んで表示しようかと、プラグインファイルを眺めていたら人気記事のデータを取ってくるクエリを書き換えることができるフィルターフックを発見しました!

wpp_query_posts フィルターフックを使って特定タグの記事に絞り込んで表示する

クエリを書き換えるには wpp_query_posts フィルターフックを使用します。

以下のコードを functions.php 又は テンプレートファイルに記入します。

function result_query( $result ) {
  global $wpdb;
  // ↓ 絞り込みたいタグID
  $term_id = 157;
  $now = current_time('mysql');
  // ↓ 集計期間
  $interval = '1 MONTH';
  // ↓ 表示件数
  $limit = 5;

  $query = "SELECT p.ID AS 'id', p.post_title AS 'title', p.post_date AS 'date', p.post_author AS 'uid', SUM(v.pageviews) AS 'pageviews' FROM wp_popularpostssummary v LEFT JOIN wp_posts p ON v.postid = p.ID WHERE 1 = 1 AND p.post_type = 'post' AND p.ID IN ( SELECT object_id FROM wp_term_relationships AS r JOIN wp_term_taxonomy AS x ON x.term_taxonomy_id = r.term_taxonomy_id WHERE x.taxonomy = 'post_tag' AND x.term_id IN( $term_id ) ) AND v.last_viewed > DATE_SUB( '{$now}', INTERVAL {$interval} ) AND p.post_password = '' AND p.post_status = 'publish' GROUP BY v.postid ORDER BY pageviews DESC LIMIT $limit;";
  
  $result = $wpdb->get_results( $query );
  return $result;
}
add_filter( 'wpp_query_posts', 'result_query' );

$term_id

$term_id には絞り込みたいタグ ID を記入します。
タグの ID は「管理画面 > 投稿 > タグ」の画面で絞り込みたいタグ名のすぐ下にある「編集」ボタンをクリックしたタグ編集画面のURL欄で確認できます。以下画像のtag_ID=◯◯ となっている数字の部分がタグIDです。

$interval

$interval には、ページビューの集計期間を設定します。
集計期間が1日だった場合は “1 DAY” 、一週間なら “1 WEEK” 、一ヶ月なら “1 MONTH” とします。

クエリを書き換えるには wpp_query_posts フィルターフックを使用します。

以下のコードを functions.php 又は テンプレートファイルに記入します。

$limit

$limit には人気記事として表示する件数を記入して下さい。

これでタグに絞り込んだ人気記事が表示できます。

wpp_query_posts フィルターフックを使って特定タグの記事に絞り込んで表示する

$limit には人気記事として表示する件数を記入して下さい。
これでタグに絞り込んだ人気記事が表示できます。
プラグインを直接書き換えてしまうとアップデートもできなくなってしまい、不都合が多いのでフィルターフックを用意してくださっていて大変助かりました!

関連記事

[WordPress] WordPress Popular Posts プラグインでの表示を自由にカスタマイズしたい時に便利なフックとその使い方

コメントを残す

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