投稿一覧を人気順でソートして表示する方法

Cocoonカスタマイズ
この記事は約4分で読めます。
記事内に広告が含まれています。

はじめに

投稿一覧

表1に示す設定をした場合、各投稿のPV数が集計単位ごとに表示されます(図1参照)。
ただし、PV数の多い順に並び替えるなどのソートはできません。

Cocoon設定
設定大項目項目設定値
管理者画面カラム表示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を使用して、投稿一覧を並び替える。
wp_cocoon_accesses
名称説明
post_id投稿ID
dateアクセス日付
countアクセス数
last_ipアクセスしたIPアドレス

ソートを行うためには、クエリにソートキーが必要です。
Cocoonは投稿のカスタムフィールドにアクセス回数を持っていないため、pre_get_postsにカスタムフィールドのキーを設定することはできません。

そのため、人気記事を表示するのと同様に、人気順の投稿IDを取得し、post__inでその順序に基づいて投稿IDを指定します。

注意点

アクセス集計が行われていない投稿は取得できません。
そのため、例えば投稿が50件ある場合に20件しかアクセス集計がされていないと、投稿一覧には20件しか表示されません。
ただし、カラム「アクセス数」以外を選択した場合は、全投稿が再表示されます。

さいごに

今回紹介した方法を利用すれば、投稿一覧をPV順でソートできるようになります。
しかし、GA4(Google Analytics 4)で、各ページのアクセス集計が表示されます。
さらに、プラグイン「Analytics Insights for Google Analytics 4(AIWP)」を使用することで、WordPressのダッシュボード上にGA4の結果を表示できます。
そのため、Cocoonのアクセス集計は人気記事の表示用として捉えるのが適切だと考えます。

タイトルとURLをコピーしました