WordPressでブログサイトを作成するときトップページには大抵、新着順に記事が表示されます。しかし新着順と同時に人気記事順(表示回数)に表示したいケースもあるでしょう。プラグインを使う方法もありますが今回はプラグインを使わないで表示させる方法を紹介します。
目次
function.phphへの記述
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 track_post_views($post_id) {
if (!is_single()) return;
if (empty($post_id)) {
global $post;
$post_id = $post->ID;
}
set_post_views($post_id);
}
add_action('wp_head', 'track_post_views');
上記記述で投稿が閲覧されるたびにアクセス数を記録する関数を functions.php
に追加します。
// アクセス数表示の除去
function posts_column_views($defaults) {
$defaults['post_views'] = __('Views');
return $defaults;
}
add_filter('manage_posts_columns', 'posts_column_views');
function posts_custom_column_views($column_name, $id) {
if ($column_name === 'post_views') {
echo get_post_meta($id, 'post_views_count', true);
}
}
add_action('manage_posts_custom_column', 'posts_custom_column_views', 10, 2);
次に、アクセス数を表示しないようにするためのフィルターフックを追加します。
front-page.phpへの記述
<h2>人気の投稿</h2>
<ul>
<?php
$popular_posts = new WP_Query(array(
'posts_per_page' => 10,
'meta_key' => 'post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC'
));
if ($popular_posts->have_posts()) :
while ($popular_posts->have_posts()) : $popular_posts->the_post();
?>
<li><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
<?php
endwhile;
else :
echo '<p>No popular posts found.</p>';
endif;
wp_reset_postdata();
?>
</ul>