「WordPress Popular Posts」でランキングを好きなように表示させるシンプルなやり方

WordPressで、記事の閲覧数ランキングを表示させるときに便利なプラグイン「WordPress Popular Posts(以下WPP)」。

そのままウィジェットに突っ込めばランキング表示できるし、設定もいろいろできるしすごく良いですよね。

ところが、表示の仕方をカスタマイズしたり、もっと好きな場所に好きなように表示させたいとなった場合、何やら関数を作ったりフックを使ったりしなきゃいけないようで初心者にはちょっとつらい。

というわけで、初心者向けに超シンプルにフルカスタマイズできる方法をご紹介します。




実装

考え方は至ってシンプル。

①ランク順に「記事ID」を取得
②記事IDをもとに、WP_Queryで普通にまわす

めっちゃ簡単にできそうでしょ!?

できます。
やっていきましょう。

記事IDを取得

<?php
if ( function_exists( 'wpp_get_mostpopular' ) ){
  $wpp_option = array( // 表示オプションの設定
    'range' => 'weekly',
    'post_type' => 'post',
    'order_by' => 'views',
    'limit' => 5
  );
  $wpp_query = new WPP_Query( $wpp_option );
  $wpp_query_ids = array_map(
    function( $wppost ){
      return (int)$wppost->id;
    }, $wpp_query->get_posts()
  );
}

こんな感じです。

$wpp_optionでは、表示オプションを配列にしてやります。

WPPで使えるオプションは、「設定→WordPress Popular Posts→パラメーター」から確認できます。

これで、”$wpp_query_ids”に、1~5位までの記事のIDが配列で格納されました。

あとは、この配列を使って、WP_Queryで記事を表示させます。

 

普通にループ

おなじみのやつですが、“orderby => post__in”の部分がポイント。

<?php
$wp_query = new WP_Query();
$param = array(
  'posts_per_page' => '5',
  'post_type' => 'post',
  'post__in' => $wpp_query_ids, // ここで記事IDの配列を使う
  'orderby' => 'post__in' // 配列に入ってる順番に表示
);
$wp_query->query($param);
if($wp_query->have_posts()):
  while($wp_query->have_posts()) : $wp_query->the_post();
?>
<p><a href="<?php the_permalink();"><?php the_title(); ?></a></p>
<?php
  endwhile;
endif; wp_reset_query();
?>

 

ランクとか、閲覧数も表示させたい!

WPPを仕様通り表示させると、簡単に閲覧数やランクを表示させることができますが、今回はIDだけ拾ってあとは普通のループに任せちゃってるので、表示させられないじゃん…

しかしご安心ください。いけます。

閲覧数の表示

wpp_get_views()という関数を使います。

ループ内で以下のように書けば、閲覧数を表示させることができます。

<?php echo wpp_get_views($post->ID, 'weekly'); ?>

上の例と合わせるなら、こんな感じ

<?php
$wp_query = new WP_Query();
$param = array(
  'posts_per_page' => '5',
  'post_type' => 'post',
  'post__in' => $wpp_query_ids, // ここで記事IDの配列を使う
  'orderby' => 'post__in' // 配列に入ってる順番に表示
);
$wp_query->query($param);
if($wp_query->have_posts()):
  while($wp_query->have_posts()) : $wp_query->the_post();
?>
<p><a href="<?php the_permalink();"><?php the_title(); ?></a>(閲覧数:<?php echo wpp_get_views($post->ID, 'weekly'); ?>)</p>
<?php
  endwhile;
endif; wp_reset_query();
?>

ランクの表示

こっちはプログラミングでやっちゃいましょう。

基礎中の基礎、「変数$iをループごとに1ずつ増やして表示させる」だけですね。

<?php
$wp_query = new WP_Query();
$param = array(
  'posts_per_page' => '5',
  'post_type' => 'post',
  'post__in' => $wpp_query_ids, // ここで記事IDの配列を使う
  'orderby' => 'post__in' // 配列に入ってる順番に表示
);
$wp_query->query($param);
if($wp_query->have_posts()):
  $i = 1; // 変数"$i"を定義
  while($wp_query->have_posts()) : $wp_query->the_post();
?>
<p><?php echo $i; ?>位</p>
<p><a href="<?php the_permalink();"><?php the_title(); ?></a>(閲覧数:<?php echo wpp_get_views($post->ID, 'weekly'); ?>)</p>
<?php
  endwhile;
  $i++; // $iを1増やす
endif; wp_reset_query();
?>

 

おわり

こんな感じで、難しく考えなくても、シンプルにランキングが実装できます。
クライアントワークでも使えますね!

僕は頭がよろしくないので、いつも難しいコードとか読むと発狂しそうになるんですが、だいたいは「IDさえゲットできればなんとかなる」と思っていて、とにかくまずはIDを取得することを考えるようにしています。

 

ではでは、エクセレントなランキング表示を!

コメント

コメントを残す

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