はじめに

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

実装手順
以下のコードをfunctions.phpに追加します。
// 一覧にフィルターボタンを追加
add_action('restrict_manage_posts', function () {
global $typenow;
// テーマ独自アクセス集計以外の場合
if (get_admin_panel_pv_type() != THEME_NAME) {
return;
}
if ($typenow !== 'post') {
return;
}
$current = $_GET['pv_range'] ?? '';
$pv_options = [
'' => '人気記事',
'1' => '本日',
'7' => '今週',
'30' => '今月',
'all' => '全期間',
];
?>
<select name="pv_range">
<?php foreach ($pv_options as $value => $label): ?>
<option value="<?= esc_attr($value); ?>" <?php selected($current, (string) $value); ?>>
<?= esc_html($label); ?>
</option>
<?php endforeach; ?>
</select>
<?php
});
// 投稿クエリの取得条件を変更
add_action('pre_get_posts', function ($query) {
global $pagenow;
if (!is_admin() || !$query->is_main_query()) {
return;
}
// テーマ独自アクセス集計以外の場合
if (get_admin_panel_pv_type() != THEME_NAME) {
return;
}
if ($query->get('post_type') !== 'post' || empty($_GET['pv_range'])) {
return;
}
// 指定期間のPVランキングデータを取得
$days = ($_GET['pv_range'] === 'all') ? 'all' : (int) $_GET['pv_range'];
$records = get_access_ranking_records($days, -1, 'post');
$popular_ids = [];
if (!empty($records)) {
$popular_ids = array_map('intval', wp_list_pluck($records, 'ID'));
}
// 公開済みの全投稿IDを取得
$published_ids = get_posts([
'post_type' => 'post',
'post_status' => 'publish',
'posts_per_page' => -1,
'fields' => 'ids',
'no_found_rows' => true,
'orderby' => 'date',
'order' => 'DESC',
]);
// 人気記事をマージ
$remaining_ids = array_diff($published_ids, $popular_ids); // 人気記事以外
$merged_ids = array_merge($popular_ids, $remaining_ids); // 人気記事+人気記事以外
// クエリに適用
if (!empty($merged_ids)) {
$query->set('post__in', $merged_ids);
$query->set('orderby', 'post__in');
$query->set('post_status', 'publish');
}
});
解説
- 表1に示すように、CocoonのPV数はテーブル名
wp_cocoon_accessesに登録。 - 独自関数
get_access_ranking_records()を使用して、期間集計された順位に基づいて投稿IDを取得。 - この投稿IDを使用して、投稿一覧を並び替える。
| 名称 | 説明 |
|---|---|
| post_id | 投稿ID |
| date | アクセス日付 |
| count | アクセス数 |
| last_ip | アクセスしたIPアドレス |
さいごに
今回紹介した方法を利用すれば、投稿一覧をPV順でソートできるようになります。
しかし、GA4(Google Analytics 4)で、各ページのアクセス集計が表示されます。
さらに、プラグイン「Analytics Insights for Google Analytics 4(AIWP)」を使用することで、WordPressのダッシュボード上にGA4の結果を表示できます。
そのため、Cocoonのアクセス集計は人気記事の表示用として捉えるのが適切だと考えます。

