【WordPress】プラグインなしで人気記事を表示する方法

人気記事を表示するプラグインはいくつかありますが、プラグインを使わなくていいならそれに越したことはないので、自力で表示させる方法を紹介しておきます。

記述するコード

とはいっても簡単で、各ファイルに下のコードを順番にコピペしていくだけです。

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);
	}
}
// クローラーのアクセス判別
function is_bot() {
	$ua = $_SERVER['HTTP_USER_AGENT'];
	$bot = array(
		"googlebot",
		"msnbot",
		"yahoo"
	);
	foreach ($bot as $bot) {
		if (stripos($ua, $bot) !== false) { return true; }
	}
	return false;
}

single.phpに以下をコピペ(場所は一番最初の行で大丈夫です)。

<?php // 自分のアクセスとクローラーのアクセスを除外してアクセス数を加算 ?>
<?php if(!is_user_logged_in() && !is_bot()) { set_post_views(get_the_ID()); } ?>

人気記事一覧を表示したい部分に以下をコピペ。

<ul>
<?php get_the_ID();
$args = array(
	'meta_key'=> 'post_views_count',
	'orderby' => 'meta_value_num',
	'order' => 'DESC',
	'posts_per_page' => 5 // 記事表示数を指定
);
$my_query = new WP_Query($args);
while ($my_query->have_posts()) : $my_query->the_post(); $loopcounter++; ?>
	<li>
		<a href="<?php the_permalink(); ?>">
			<div class="rank-count r-count<?php echo $loopcounter; ?>"><?php echo $loopcounter; ?></div>
			<div><?php the_post_thumbnail(); ?></div>
			<p><?php the_title(); ?></p>
		</a>
	</li>
<?php endwhile; wp_reset_postdata(); ?>
</ul>

あとは、各種タグ(ul、a、divなど)にclassを追加してスタイルを整えてください。

これだけで人気記事一覧が表示されますが、詳しい解説が知りたい方は以下をどうぞ!

仕組みの解説

記事に初めてのアクセスがあれば、その記事のカスタムフィールドに「post_views_count」が追加されます。

そして、記事にアクセスがある度に「post_views_count」の値が1加算されるようになっています。

「post_views_count」の値の大小で記事のランク付けをしているわけですね。

なので、この値をいじればランキングを自由に操作できたりもします。