「新着情報」で過去○日以内の記事だけに絞り込んで表示する方法

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

はじめに

WordPressで運営しているサイトにおいて、「お知らせ」など「過去○日以内の記事だけに絞り込み、期間を過ぎた古い情報は表示しない」という運用がります。

そこで、「新着情報」で指定した日数以内の投稿のみ自動抽出し表示するようにします。

この記事では、この方法について説明します。

使用方法

actionオプションを追加し、表示期間を指定します。

[info_list action="days:3"]

実装手順

以下のコードをfunctions.phpに追加します。

add_filter('get_info_list_args', function ($args) {
  if (empty($args['action'])) {
    return $args;
  }

  $parts = explode(':', $args['action'], 2);

  if (!isset($parts[0], $parts[1]) || $parts[0] !== 'days') {
    return $args;
  }

  $days = absint($parts[1]);

  if ($days <= 0) {
    return $args;
  }

  // 予約投稿(future)と公開済み(publish)を対象
  $args['post_status'] = ['publish', 'future'];

  // 現在の日付を取得
  $today = current_time('Y-m-d');

  // 今日を起点として、指定された日数前の日付を算出
  $after_date = date('Y-m-d', strtotime("-{$days} days", strtotime($today)));

  // 日付による絞り込みを設定
  $args['date_query'] = [
    [
      'after'     => $after_date, // 指定日以降の投稿を対象にする
      'inclusive' => true,        // 指定した当日も含める
      'column'    => 'post_date', // 判定基準にするカラム(投稿日)
    ],
  ];

  return $args;
});

補足

「今日(2026年8月16日)」を基準とした場合の、指定パラメータごとの表示対象範囲を表1に示します。

表示対象範囲
指定パラメータ期間の考え方8月16日の表示
days:0今日+過去0日分8月16日の投稿のみ
days:1今日+過去1日分8月15日〜8月16日の投稿

応用:予約投稿を活用した事前通知

さらに応用として、以下のコードを追加することで、通常の公開済み記事だけでなく予約投稿の記事もリストに表示可能となります。

$args['post_status'] = ['publish', 'future'];

例えば、「来週からキャンペーンを開始します」といったお知らせを事前に通知し、その予約投稿が公開予定日を過ぎたあとも数日間はリストに残し、期間を過ぎたタイミングで自動的に非表示にするといった運用が可能です。

ただし、予約投稿のままだと個別ページにアクセスした際に404エラーになってしまいます。

そこで、投稿を保存時にステータスを強制的にpublishに書き換える処理などと組み合わせて、公開状態を適切にコントロールする必要があります。

さいごに

今回紹介した方法を使えば、「新着情報」の掲載期間を日数単位で自動コントロールできるようになります。
古い情報が自動で非表示になり、サイト内を常にフレッシュでスッキリとした状態に保つことができますので、ぜひサイト運営に取り入れてみてください。

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