WordPress投稿で「〇月〇日まで表示」を実現する方法
Amazonや楽天などの商品紹介ブログを作っていると、「9月30日まで割引!」「キャンペーンは今月末まで」のように、特定の日付までだけ表示したい文章ってありますよね?
期限が過ぎるたびに記事を開いて手作業で消すのは、地味に面倒です。しかも消し忘れると、「もう終わっているセール」がいつまでも表示されることになります。
WordPressなら、ショートコードを1つ作っておけば、指定日の終了と同時に自動で非表示にできます。
🎯 今回のゴール
- 9月30日までは「🎉 9/30まで限定!全品半額セール開催中 🎉」と表示
- 10月1日になると自動で非表示
- 投稿ごとに日付を自由に指定できる
- WordPressのタイムゾーン設定に合わせて判定する
💡 ショートコードの使い方
記事内に、次のように書きます。
[show_until date="2026-09-30"]
🎉 9/30まで限定!全品半額セール開催中 🎉
[/show_until]
この場合、2026年9月30日の23時59分59秒までは表示され、10月1日になると自動的に消えます。
つまり、date="" に指定するのは「消える日」ではなく、最後に表示したい日です。
🛠 おすすめは「Code Snippets」で追加
以前は functions.php に直接コードを書く方法が定番でしたが、テーマファイルを直接編集すると、記述ミスやテーマ更新時のトラブルにつながることがあります。
そのため、今回はCode Snippetsなどのコードスニペット系プラグインを使う方法をおすすめします。
WordPress管理画面から「スニペット → 新規追加」を開き、以下のPHPコードを登録して有効化します。
function gedolab_show_until_shortcode( $atts, $content = null ) {
$atts = shortcode_atts(
array(
'date' => '',
),
$atts,
'show_until'
);
$date = trim( $atts['date'] );
if ( '' === $date ) {
return '';
}
// WordPressで設定されているタイムゾーンを使用
$until = DateTimeImmutable::createFromFormat(
'!Y-m-d',
$date,
wp_timezone()
);
// 日付の形式が不正なら何も表示しない
if ( false === $until || $until->format( 'Y-m-d' ) !== $date ) {
return '';
}
// 指定日の23:59:59まで表示
$until = $until->setTime( 23, 59, 59 );
// WordPressサイト設定の現在時刻
$now = current_datetime();
if ( $now <= $until ) {
return do_shortcode( $content ?? '' );
}
return '';
}
add_shortcode( 'show_until', 'gedolab_show_until_shortcode' );
これで [show_until] ショートコードが使えるようになります。
もちろん、子テーマの functions.php に追加することもできます。ただしPHPの記述ミスがあると、サイトや管理画面が正常に表示されなくなる場合があります。
- 編集前にバックアップを取る
- 親テーマではなく子テーマを使う
- できればCode Snippetsなどを使う
特別な理由がなければ、初心者にはCode Snippets方式の方が扱いやすいでしょう。
📦 実際に使ってみよう
例えば、9月30日まで表示したい文章なら以下のようにします。
[show_until date="2026-09-30"]
🎉 9/30まで限定!全品半額セール開催中 🎉
[/show_until]
9月30日までは表示され、10月1日になるとショートコード内の文章だけが自動的に消えます。
翌月に別のキャンペーンを行うなら、日付を書き換えるだけです。
⏰ WordPressのタイムゾーンも確認しておこう
今回のコードは、パソコンやサーバー側の時刻ではなく、WordPressの「設定 → 一般 → タイムゾーン」で設定されている時刻を基準に判定します。
日本向けサイトなら、タイムゾーンが「東京」またはUTC+9相当になっているか確認しておくと安心です。
WordPress公式の current_datetime() は、サイトに設定されたタイムゾーンを利用して現在日時を取得する関数です。
⚠️ キャッシュを使っているサイトでは注意
ここは意外と重要です。
ページキャッシュやCDNを利用している場合、期限を過ぎてもキャッシュされた古いページが一時的に表示されることがあります。
絶対に期限を過ぎた表示を残したくないセール告知などでは、キャッシュの有効時間を確認したり、終了時にキャッシュを削除したりする必要があります。
ショートコードが壊れているのではなく、古いHTMLがキャッシュから配信されている場合がある、ということです。
🌀 応用:「特定の日から表示」も作れる
逆に「9月20日になったら表示を開始したい」という場合は、同じ考え方で [show_from] を作ることもできます。
例えば、
[show_from date="2026-09-20"]
🎉 本日からキャンペーン開始!
[/show_from]
という形です。
「〇日から表示」と「〇日まで表示」を組み合わせれば、期間限定のお知らせをかなり自動化できます。
コレは地味だけど、かなり便利
派手な機能ではありません。でも、セール終了日のたびにWordPressへログインして文章を消す作業は、記事数が増えるほど面倒になります。
しかも人間は忘れます。
「期限が来たら機械に勝手に消してもらう」。
こういう小さな自動化こそ、WordPressを長く運営すると効いてきます。
【編集者が思うこと】
最初は「期限が来たら自分で消せばいいじゃん」と思う。でも記事が10本、50本、100本になったら、その“自分でやる”が一番信用できない。忘れる仕事は、最初からWordPressにやらせる。AIだ自動化だと言う前に、こういう小さな手抜きこそ実用的だったりする。
