投稿や固定ページの一部分だけに指定日時に表示して指定日時に非表示にするといった公開期間を設けたいってときに使えるショートコードを作ってみました。
目次
function.phpに記述
以下をテンプレートディレクトリ内のfunction.phpに追記します。
function shortcode_timelimit($atts, $content = null) {
extract(shortcode_atts(array(
'start' => null,
'end' => null,
), $atts));
$starttime = strtotime($start);
$endtime = strtotime($end);
if ($starttime == null && $endtime == null) {
return $content;
} elseif ($starttime == null) {
if(date_i18n("U") < $endtime) {
return $content;
}
} elseif ($endtime == null) {
if(date_i18n("U") > $starttime) {
return $content;
}
} else {
if(date_i18n("U") > $starttime && date_i18n("U") < $endtime) {
return $content;
}
}
}
add_shortcode('timelimit', 'shortcode_timelimit');現在日時と入力した日時を比較しているだけでたいして難しくはないですが、WordPressでは時間を取得する際にdate_i18n()を使わないと世界標準時を取得してしまいます。最初はそれに気づかずdate()を使っていたのでしばらく迷いました。
WordPressの記事や固定ページ内に記述
[timelimit start="2025-10-31 12:00:00" end="2025-11-01 00:00:00"]
表示する内容
[/timelimit]startは表示を開始する日時、endは表示を終了する日時を入力します。
startのみ、endのみでも動作します。
テンプレートに記述する場合
テンプレートに記述したり、WordPressを使っていない場合には普通にPHPを使います。
WordPress以外で使う場合はdate_i18nをdateに変えてください。
開始日時のみ設定する場合
<?php $starttime = strtotime("2025-10-01 00:00:00"); // 表示開始日時
if(date_i18n("U") > $starttime) : ?>
<!----------------↓ここに表示するHTMLを記述--------------->
こんにちは
<!------------------------ここまで----------------------->
<?php endif; ?>終了日時のみ設定する場合
<?php $starttime = strtotime("2025-10-01 00:00:00"); // 表示開始日時
if(date_i18n("U") > $starttime) : ?>
<!----------------↓ここに表示するHTMLを記述--------------->
こんにちは
<!------------------------ここまで----------------------->
<?php endif; ?>開始・終了日時両方を設定する場合
<?php $starttime = strtotime("2025-10-01 00:00:00"); // 表示開始日時
$endtime = strtotime("2025-12-01 00:00:00"); // 表示終了日時
if(date_i18n("U") > $starttime && date_i18n("U") < $endtime) : ?>
<!----------------↓ここに表示するHTMLを記述--------------->
こんにちは
<!------------------------ここまで----------------------->
<?php endif; ?>どんなときに使う?
例えば、イベント開催の事前告知を投稿した後で、指定した日時から予約フォームへのリンクを掲載したいときとか。
[timelimit end="2026-01-01 00:00:00"]
2026年1月1日より予約受付開始!
[/timelimit]
[timelimit start="2026-01-01 00:00:00"]
<a href=""https://***">予約はこちらから</a>
[/timelimit]こんな感じで、endを2026/01/01 00:00:00に設定し、さらにstartを2026/01/01 00:00:00とすることでその時間の前後で表示内容を変えられます。