WordPressで人気記事ランキングをプラグインなしで作る

こんにちは、株式会社Pentagonでコーダーをしているさおりです。

目次

この記事の内容

WordPressでよく読まれている記事をランキングでプラグインなしで表示する方法を表示する方法です。

WordPress Popular Posts」などのプラグインを使うとさくっと記事のランキングを表示させることができますが、デザインの調整で思った通りにならなかったりします。

この方法のメリットとしては、デザインを自分の好きな通りにしたり、表示項目を自由に決めることができます!

実装方法

functions.phpに記述

下記のコードを functions.php に記述します。

function update_custom_meta_views()
{
  global $post;
  if ('publish' === get_post_status($post) && is_single()) {
    $views = intval(get_post_meta($post->ID, '_custom_meta_views', true));
    update_post_meta($post->ID, '_custom_meta_views', ($views + 1));
  }
}
add_action('wp_head', 'update_custom_meta_views');

function add_column_custom_meta_views($columns)
{
  $columns['views'] = 'Views';
  return $columns;
}
add_filter('manage_posts_columns', 'add_column_custom_meta_views');

function add_column_custom_meta_views_content($column_name, $post_id)
{
  $views = intval(get_post_meta($post_id, '_custom_meta_views', true));
  echo $views;
}
add_action('manage_posts_custom_column', 'add_column_custom_meta_views_content', 10, 2);

function sortable_column_custom_meta_views($columns)
{
  $columns['views'] = 'Views';
  return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'sortable_column_custom_meta_views');

function custom_orderby_custom_meta_views($vars)
{
  if (isset($vars['orderby']) && 'Views' == $vars['orderby']) {
    $vars = array_merge($vars, array(
      'meta_key' => '_custom_meta_views',
      'orderby' => 'meta_value_num'
    ));
  }
  return $vars;
}
add_filter('request', 'custom_orderby_custom_meta_views');

ランキングを表示させる

ランキング記事を表示させたい箇所のphpファイルに下記を追記します。

<?php
$args = array(
    'post_type' => 'post',
    'post_status' => 'publish',
    'posts_per_page' => 5,
    'orderby' => 'meta_value_num',
    'meta_key' => '_custom_meta_views',
    'order' => 'DESC'
);
$the_query = new WP_Query($args);
if ($the_query->have_posts()) :
while ($the_query->have_posts()) : $the_query->the_post();  ?>
<article>
    <a href="<?php the_permalink(); ?>">
    <h3><?php the_title(); ?></h3>
    </a>
</article>
<?php
endwhile;
endif;
wp_reset_postdata();

まとめ

人気記事ランキングのプラグインも便利ですが、この方法も参考になれば幸いです!

採用情報はこちら
目次