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

WordPressでプラグインなしで記事のアクセス数を計測し、人気記事ランキングを出力する方法について説明します。以下の手順に従って、カスタムコードを使用してこの機能を実装できます。

アクセス数の計測

データベースのカスタムフィールドを作成

WordPressの投稿にアクセス数を保存するために、カスタムフィールドを使用します。投稿に対してアクセス数を記録するためのメタキー(例: _post_views_count)を作成します。

アクセス数をカウントする関数を追加

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;
        delete_post_meta($post_id, $count_key);
        add_post_meta($post_id, $count_key, '0');
    } else {
        $count++;
        update_post_meta($post_id, $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');

このコードは、投稿ページが読み込まれるたびに_post_views_countメタフィールドを更新します。

人気記事ランキングの表示

人気記事ランキングを表示するために、以下の手順でカスタムクエリを作成します。

人気記事を取得する関数を作成

functions.phpに以下のコードを追加して、アクセス数が多い順に投稿を取得する関数を作成します。

function get_popular_posts($number_of_posts = 5) {
    $args = array(
        'post_type' => 'post',
        'meta_key' => '_post_views_count',
        'orderby' => 'meta_value_num',
        'order' => 'DESC',
        'posts_per_page' => $number_of_posts,
    );
    $popular_posts = new WP_Query($args);
    return $popular_posts;
}

人気記事ランキングを表示する

人気記事を表示したいテンプレートファイル(例: sidebar.phpやhome.php)に、以下のコードを追加します。

$popular_posts = get_popular_posts(5); // ここで表示したい投稿数を指定

if ($popular_posts->have_posts()) :
    echo '<ul>';
    while ($popular_posts->have_posts()) : $popular_posts->the_post();
        echo '<li><a href="' . get_permalink() . '">' . get_the_title() . '</a> (' . get_post_meta(get_the_ID(), '_post_views_count', true) . ' views)</li>';
    endwhile;
    echo '</ul>';
    wp_reset_postdata();
else :
    echo '<p>No popular posts found.</p>';
endif;

まとめ

この手法では、プラグインを使わずにWordPressの投稿に対するアクセス数をカウントし、人気記事ランキングを表示することができます。必要に応じて、コードをカスタマイズして、より具体的な要件に合わせて調整してください。