WordPressの人気記事(ランキング)をプラグインなしで表示する方法

WordPressでプラグインを使わずに人気順(閲覧回数の多い順)に記事を一覧表示する方法の備忘録です。

閲覧回数を記録する

functions.php

記事の閲覧回数を計測するための「post_views_count」を新規にカスタムフィールドに追加します。functions.phpに以下のコードを追記します。

//記事の閲覧回数を計測
function set_post_views($postID) {
  $count_key = 'post_views_count';
  $count = get_post_meta($postID, $count_key, true);
  if($count==''){
      $count = 0;
      delete_post_meta($postID, $count_key);
      add_post_meta($postID, $count_key, '0');
  }else{
    $count++;
    update_post_meta($postID, $count_key, $count);
  }
}

single.php

投稿ページがアクセスがカウントされるようにsingle.phpに以下のコードを追記します。

<?php if( !is_user_logged_in() ) { set_post_views( get_the_ID() ); } ?>

「!is_user_logged_in()」で、ログイン中以外のアクセスがカウントされるように設定しています。

これで、投稿ページのカスタムフィールドに「post_views_count」が追加されました。
記事が閲覧される度に、カウントの数値が増えていきます。

カスタムフィールドが表示されない場合は、こちらの記事をご参照ください。
WordPressでカスタムフィールドを設定する方法

記事一覧を表示する

記事の情報を取得してWP_Queryを使い、閲覧回数の多い順で一覧表示します。
記事の一覧を表示させたい箇所に以下のコードを追記します。
サンプルでは、記事のタイトルのみ、一覧の表示件数を5件で設定しています。

<?php
  $args = array(
    'meta_key' => 'post_views_count', //閲覧回数
    'orderby' => 'meta_value_num',
    'order' => 'DESC',
    'posts_per_page' => 5 //表示件数
  );

  // WP_Queryによるループで記事一覧を表示
  $query = new WP_Query($args);
  if ($query->have_posts()) :
    while ($query->have_posts()) :
      $query->the_post();
?>
<p>
  <?php the_title(); ?>
</p>
<?php
    endwhile;
  endif;
  wp_reset_postdata();
?> 

表示する内容は、<p>タグのエリアに記入します。

functions.phpの編集が必要ですが、プラグインが重い時などは、便利な方法です。