【WordPress】特定の日付まで表示する方法|ショートコードで期限後に自動非表示

【WPテク】特定の日付まで表示する方法|ショートコードで簡単に制御

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を直接編集する場合は注意

もちろん、子テーマの 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だ自動化だと言う前に、こういう小さな手抜きこそ実用的だったりする。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です