【125naroom】人気ランキングを「週間・月間・全期間」で見られるようにしました

人気ランキング、いつも同じ記事が上にいませんか?
これまでは「累計」だけだったんです。週間と月間でも見られるようにしました

125naroomの人気の記事ランキングを作り直しました。これまでは「今までの合計アクセス数」で並べていたので、昔から読まれている記事がずっと上位に居座っていました。今回から、週間・月間・全期間の3つで切り替えて見られます。

何が変わったか

  • ランキングページに「週間」「月間」「全期間」のタブが付きました。最初に開くのは「月間」です。
  • 表示件数は上位30件です。
  • 記事ページの下と右カラムにある「人気記事」も月間の人気になりました。今月よく読まれている記事が並びます。

タブは普通のリンクなので、JavaScriptがなくても切り替わります。

しばらくは「累計」で埋まります

週間・月間のデータは、この仕組みを入れた日(2026年9月24日)から溜まり始めました。なので、週間は7日後、月間は30日後に本来の姿になります。それまでは、足りない分を累計のランキングで埋めて、30件が常に並ぶようにしています。

しくみ(ちょっとだけ技術の話)

姉妹サイトの「デザインのこと」で先に作った方式を、125naroom用に移しました。3つの層に分けています。

1. 記録 記事を開くたびに、記事ごとのカスタムフィールドに「その日の閲覧数」を足します。直近31日分だけ持って、古い日は書き込みのたびに捨てます。ログイン中の人とボットは数えません。

// array( '20260924' => 12, '20260925' => 8, ... ) の形で持つ
$daily[ $today ] = isset( $daily[ $today ] ) ? (int) $daily[ $today ] + 1 : 1;
update_post_meta( $post_id, 'd125_views_daily', $daily );

2. 集計 毎日午前4時に、週間(7日)・月間(30日)・全期間の上位30件の記事IDを作って、まとめて1か所に保存します。

3. 表示 ページを開いたときは、保存してあるIDを読むだけです。並べ替えの計算は表示のたびにはやりません。

new WP_Query( array(
  'post__in'  => $ids,        // 保存済みの記事ID
  'orderby'   => 'post__in',  // その順番のまま
  'post_type' => 'web',
) );

保存済みのIDがまだ無いときは、これまでと同じ累計のクエリに自動で戻るので、万一集計が止まってもランキングが空になることはありません。

速くなった?

正直に言うと、125naroomでは速さの差はほとんどありません。計ってみたら、旧方式も新方式も1ミリ秒以下でした。記事が約190本と少ないので、並べ替えの負担が小さかったのです。記事が約2,000件ある「デザインのこと」では、ランキングの表示が速くなりました。今回の一番の狙いは速さではなく、「今読まれている記事」が見えるようになることです。

さいごに

これから、125naroomの最適化や改良、作ったサイトのことも、この「125naroom」のタグで書いていきます。まずは週間ランキングに、どんな記事が上がってくるか楽しみです。

今週の人気、ちょっと楽しみですねー
日が経つほど、本来の姿になっていきますよー

デザコトauthor

あ、いいな、と思うWebデザインを紹介しています。デザインの参考に。やさしいデザインが多いです。Webデザインギャラリー『デザインのこと - Web design gallery』を運営しています。