はじめに
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に書き換える処理などと組み合わせて、公開状態を適切にコントロールする必要があります。
さいごに
今回紹介した方法を使えば、「新着情報」の掲載期間を日数単位で自動コントロールできるようになります。
古い情報が自動で非表示になり、サイト内を常にフレッシュでスッキリとした状態に保つことができますので、ぜひサイト運営に取り入れてみてください。


