WordPressで人気記事ランキングを表示する際、プラグインに頼らずに実装したい場面があります。この記事では、カスタムフィールドを使ってアクセス数を記録し、その情報をもとに人気記事ランキングを表示する方法を解説します。
アクセス数を記録する仕組みを作る
投稿ページが表示されるたびにアクセス数をカウントし、投稿のカスタムフィールドに保存します。
アクセス数を保存する関数
まず、テーマの functions.php
に以下のコードを追加します。
function set_post_views($post_id) {
$count_key = '_post_views_count';
$count = get_post_meta($post_id, $count_key, true);
if ($count === '') {
$count = 0;
add_post_meta($post_id, $count_key, '1');
} else {
$count++;
update_post_meta($post_id, $count_key, $count);
}
}
表示時にカウント処理を実行
投稿ページが読み込まれたときに、上記関数を実行する処理も追加します。
function track_post_views() {
if (is_single()) {
global $post;
if ($post) {
set_post_views($post->ID);
}
}
}
add_action('wp_head', 'track_post_views');
人気記事を取得する関数を作成
アクセス数の多い順に投稿を取得するための関数を定義します。
function get_popular_posts($limit = 5) {
$args = array(
'post_type' => 'post',
'posts_per_page' => $limit,
'meta_key' => '_post_views_count',
'orderby' => 'meta_value_num',
'order' => 'DESC',
'ignore_sticky_posts' => true,
);
return new WP_Query($args);
}
人気記事をテンプレートに表示
表示したいテンプレートファイル(例:sidebar.php
)に以下のコードを記述します。
<?php
$popular_posts = get_popular_posts(5);
if ($popular_posts->have_posts()) {
echo '<ul class="popular-posts">';
while ($popular_posts->have_posts()) {
$popular_posts->the_post();
$views = get_post_meta(get_the_ID(), '_post_views_count', true);
echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a>(' . intval($views) . ' views)</li>';
}
echo '</ul>';
wp_reset_postdata();
} else {
echo '<p>人気記事が見つかりませんでした。</p>';
}
?>
まとめ
プラグインを使わずにアクセス数を記録し、WordPress上で人気記事ランキングを表示する方法を紹介しました。シンプルな構成ながら、自由なカスタマイズやパフォーマンス面でもメリットがあります。必要に応じて、期間を限定したランキングやカテゴリ別ランキングへの応用も可能です。