はじめに

表1に示す設定をした場合、各投稿のPV数が集計単位ごとに表示されます(図1参照)。
ただし、PV数の多い順に並び替えるなどのソートはできません。
設定 | 大項目 | 項目 | 設定値 |
---|---|---|---|
管理者画面 | カラム表示 | PVを表示する | オン |
以下のプラグインは、各集計単位に応じて投稿をソートし、独自画面に表示します。
そのため、プラグインのような独自画面ではなく、投稿一覧にPV数を「全期間」で表示し、並び替えができるようにします。
この記事では、この方法について説明します。
完成イメージ

実装手順
以下のコードをfunctions.phpに追加します。
// 投稿一覧にカラムを追加
add_filter('manage_edit-post_columns', function($columns) {
$columns['access_order'] = 'アクセス数';
return $columns;
});
add_filter('manage_edit-post_sortable_columns', function($columns) {
$columns['access_order'] = 'access_order';
return $columns;
});
// 投稿一覧にデータを表示
add_action('manage_posts_custom_column', function($column_name, $post_id) {
if ($column_name == 'access_order') {
// 投稿IDに基づいてアクセス数を取得し表示
echo get_several_access_count($post_id, 'all');
}
}, 10, 2);
// 投稿一覧の表示条件を変更
add_action('pre_get_posts', function($query) {
if (!is_admin() || !$query->is_main_query()) {
return;
}
// 全期間のランキングデータを取得
$records = get_access_ranking_records('all', 999);
// 取得した投稿IDを設定
$post_ids = [];
foreach ($records as $post) {
$post_ids[] = $post->ID;
}
// ソートが「アクセス数」で要求されている場合
if ($query->get('orderby') === 'access_order') {
// ソート順がDESCなら配列を逆順に変更
if (strtolower($query->get('order')) === 'asc') {
$post_ids = array_reverse($post_ids);
}
// post__inに基づいてクエリを設定
$query->set('post__in', $post_ids);
$query->set('orderby', 'post__in');
}
});
解説
- 表2に示すように、CocoonのPV数はテーブル名
wp_cocoon_accesses
に登録。 - 独自関数
get_access_ranking_records()
を使用して、期間集計された順位に基づいて投稿IDを取得。 - この投稿IDを使用して、投稿一覧を並び替える。
名称 | 説明 |
---|---|
post_id | 投稿ID |
date | アクセス日付 |
count | アクセス数 |
last_ip | アクセスしたIPアドレス |
注意点
アクセス集計が行われていない投稿は取得できません。
そのため、例えば投稿が50件ある場合に20件しかアクセス集計がされていないと、投稿一覧には20件しか表示されません。
ただし、カラム「アクセス数」以外を選択した場合は、全投稿が再表示されます。
さいごに
今回紹介した方法を利用すれば、投稿一覧をPV順でソートできるようになります。
しかし、GA4(Google Analytics 4)で、各ページのアクセス集計が表示されます。
さらに、プラグイン「Analytics Insights for Google Analytics 4(AIWP)」を使用することで、WordPressのダッシュボード上にGA4の結果を表示できます。
そのため、Cocoonのアクセス集計は人気記事の表示用として捉えるのが適切だと考えます。