MENU

【WordPress】記事別アクセス数をプラグインなしで表示する方法

この記事では、WordPressの投稿管理画面にアクセス数を表示する方法を紹介します。

プラグインを使わずに、少しのコードを追加するだけで、どの投稿が人気かを簡単に把握できるようになります。

初心者の方でもわかりやすく説明しているので、ぜひ挑戦してみてください。

目次から探す

functions.phpに計測するための関数を追加

WordPressの投稿にアクセス数を表示させるためには、まずfunctions.phpに必要な関数を追加します。このファイルはテーマの設定や機能をカスタマイズするための重要な部分です。

記事へのアクセス数を保存する関数

setPostview関数の説明

setPostview関数は、特定の投稿が閲覧されるたびにそのアクセス数をカウントするための関数です。この関数は、投稿のメタデータとしてアクセス数を保存します。具体的には、post_views_countというキーでアクセス数を管理します。初めてアクセスされた場合は0からスタートし、以降はアクセスされるたびにカウントが1増加します。

function setPostview($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);
    }
}

記事へのアクセス数を取得する関数

getPostview関数の説明

getPostview関数は、特定の投稿のアクセス数を取得するための関数です。この関数を使用することで、投稿のメタデータから現在のアクセス数を簡単に取得できます。もしアクセス数がまだ記録されていない場合は、0を返します。

function getPostview($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if ($count == '') {
        return "0 View";
    }
    return $count.' Views';
}

投稿一覧画面にカラムを追加

次に、WordPressの管理画面の投稿一覧にアクセス数を表示するカラムを追加します。

アクセス数カラムの追加

addColumn関数の説明

addColumn関数は、投稿一覧画面に新しいカラムを追加するための関数です。このカラムには「アクセス数」というタイトルが付けられ、各投稿のアクセス数が表示されるようになります。

function addColumn($columns) {
    $columns['post_views'] = 'アクセス数';
    return $columns;
}
add_filter('manage_posts_columns', 'addColumn');

アクセス数の表示

addColumnId関数の説明

addColumnId関数は、先ほど追加した「アクセス数」カラムに実際のアクセス数を表示するための関数です。各投稿のIDを受け取り、その投稿のアクセス数を取得して表示します。

function addColumnId($column_name, $postID) {
    if ($column_name === 'post_views') {
        echo getPostview($postID);
    }
}
add_action('manage_posts_custom_column', 'addColumnId', 10, 2);

投稿管理画面でのソート機能の追加

アクセス数を表示するだけでなく、これを基にソートできるようにするための設定も行います。

ソート可能なカラムの設定

addColumnSort関数の説明

addColumnSort関数は、追加した「アクセス数」カラムをソート可能にするための関数です。この関数を使うことで、管理画面でアクセス数に基づいて投稿を並べ替えることができます。

function addColumnSort($columns) {
    $columns['post_views'] = 'アクセス数';
    return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'addColumnSort');

ソートキーの設定

addSortKey関数の説明

addSortKey関数は、ソートの際に使用するキーを設定します。この場合、post_views_countをキーとして指定し、アクセス数に基づいて投稿を並べ替えられるようにします。

function addSortKey($vars) {
    if (isset($vars['orderby']) && 'アクセス数' == $vars['orderby']) {
        $vars = array_merge($vars, array(
            'meta_key' => 'post_views_count',
            'orderby' => 'meta_value_num'
        ));
    }
    return $vars;
}
add_filter('request', 'addSortKey');

これで、WordPressの投稿にアクセス数を表示させるための機能を追加する準備が整いました。これらの関数をfunctions.phpに追加することで、訪問者の数を効果的に追跡し、管理画面で確認することができます。

完成したコード

以下に、説明を含む全体のコードを示します。これをfunctions.phpに追加することで、WordPressの投稿にアクセス数を表示させ、管理画面で確認およびソートできるようになります。

// 記事へのアクセス数を保存する関数
// 特定の投稿が閲覧されるたびにアクセス数をカウントし、投稿のメタデータとして保存します。
function setPostview($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);
    }
}

// 記事へのアクセス数を取得する関数
// 特定の投稿のアクセス数を取得し、まだ記録されていない場合は0を返します。
function getPostview($postID) {
    $count_key = 'post_views_count';
    $count = get_post_meta($postID, $count_key, true);
    if ($count == '') {
        return "0 View";
    }
    return $count.' Views';
}

// 投稿一覧画面にカラムを追加
// 投稿一覧画面に「アクセス数」というタイトルのカラムを追加します。
function addColumn($columns) {
    $columns['post_views'] = 'アクセス数';
    return $columns;
}
add_filter('manage_posts_columns', 'addColumn');

// アクセス数の表示
// 追加した「アクセス数」カラムに実際のアクセス数を表示します。
function addColumnId($column_name, $postID) {
    if ($column_name === 'post_views') {
        echo getPostview($postID);
    }
}
add_action('manage_posts_custom_column', 'addColumnId', 10, 2);

// 投稿管理画面でのソート機能の追加
// 追加した「アクセス数」カラムをソート可能にします。
function addColumnSort($columns) {
    $columns['post_views'] = 'アクセス数';
    return $columns;
}
add_filter('manage_edit-post_sortable_columns', 'addColumnSort');

// ソートキーの設定
// ソートの際に使用するキーを設定し、アクセス数に基づいて投稿を並べ替えられるようにします。
function addSortKey($vars) {
    if (isset($vars['orderby']) && 'アクセス数' == $vars['orderby']) {
        $vars = array_merge($vars, array(
            'meta_key' => 'post_views_count',
            'orderby' => 'meta_value_num'
        ));
    }
    return $vars;
}
add_filter('request', 'addSortKey');

functions.phpに計測するための関数を追加

次に、実際に投稿が表示された際にアクセス数をカウントするためのコードをfunctions.phpに追加します。これにより、投稿が表示されるたびに自動的にアクセス数が更新されます。

投稿表示時にアクセス数をカウントするコードの追加

アクセス数カウントを呼び出すフックの設定

WordPressでは、特定の投稿が表示される際にフックを利用してアクセス数をカウントすることができます。以下に、必要なコードを示します。

// アクセス数をカウントする関数の定義
function count_post_views($postID) {
    if (!is_single()) return;
    if (empty($postID)) {
        global $post;
        $postID = $post->ID;
    }
    setPostview($postID);
}

// フックの設定
function track_post_views($post_id) {
    if (!is_single()) return;
    if (empty($post_id)) {
        global $post;
        $post_id = $post->ID;
    }
    count_post_views($post_id);
}
add_action('wp_head', 'track_post_views');

このコードは、投稿が表示されるたびにwp_headアクションフックを利用してtrack_post_views関数を呼び出します。この関数はcount_post_viewsを実行し、投稿のアクセス数をカウントします。

確認作業

実装が完了したら、実際に管理画面での表示を確認します。

投稿管理画面での確認

アクセス数カラムの表示確認

管理画面の投稿一覧にアクセスし、「アクセス数」カラムが正しく表示されているか確認します。

各投稿のアクセス数が表示されていれば成功です。

ソート機能の動作確認

次に、アクセス数カラムをクリックして、投稿がアクセス数に基づいて正しくソートされるか確認します。

これにより、最も人気のある投稿を簡単に見つけることができます。

追加要素

さらに、より正確なアクセス数を取得するための設定を追加することも可能です。

ログインユーザーのカウント除外

ログインしているユーザーのアクセスをカウントしないようにする設定を追加することで、より正確なデータを得ることができます。

// count_post_views関数を変更
function count_post_views($postID) {
    if (!is_single() || is_user_logged_in()) return;
    if (empty($postID)) {
        global $post;
        $postID = $post->ID;
    }
    setPostview($postID);
}

ボットの除外

ボットによるアクセスを除外することで、実際のユーザーによるアクセス数をより正確に把握できます。これには、特定の条件を満たすアクセスをカウントしないように設定します。

// 追加する関数
function is_bot() {
    $user_agent = $_SERVER['HTTP_USER_AGENT'];
    $bots = array(
        'Googlebot', 'Bingbot', 'Slurp', 'DuckDuckBot', 'Baiduspider', 'YandexBot',
        'Sogou', 'Exabot', 'facebot', 'ia_archiver'
    );
    
    foreach ($bots as $bot) {
        if (stripos($user_agent, $bot) !== false) {
            return true;
        }
    }
    return false;
}

// count_post_views関数をさらに変更
function count_post_views($postID) {
    if (!is_single() || is_user_logged_in() || is_bot()) return;
    if (empty($postID)) {
        global $post;
        $postID = $post->ID;
    }
    setPostview($postID);
}

まとめ

これで、WordPressの投稿にアクセス数を表示し、ログインユーザーやボットのアクセスを除外して投稿が表示されるたびに自動的にアクセス数が更新されるようになります。

これらのコードをfunctions.phpに追加することで、訪問者の数を効果的に追跡し、管理画面で確認することができます。

目次から探す