WordPressで記事やページの一部に公開期限を設定するショートコード

WordPressで記事を書くときに公開日時を未来に設定すれば予約投稿ができます。また、Post Expiratorのようなプラグインを使えば公開終了する日時を設定することもできます。
しかし、これはあくまで記事単位なので、記事の一部分だけに指定日時に表示して指定日時に非表示にするといった公開期間を設けたいってときに使えるショートコードを作ってみました。

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="2017-10-31 12:00:00" end="2017-11-01 00:00:00"]
表示する内容
[/timelimit]

※[]は全角なので半角[]に変更してください。
startは表示を開始する日時、endは表示を終了する日時を入力します。
startのみ、endのみでも動作します。

テンプレートに記述する場合

テンプレートに記述したり、WordPressを使っていない場合には普通にPHPを使います。
WordPress以外で使う場合はdate_i18nをdateに変えてください。

開始日時のみ設定する場合

<?php $starttime = strtotime("2017-10-01 00:00:00"); // 表示開始日時
if(date_i18n("U") > $starttime) : ?>
<!----------------↓ここに表示するHTMLを記述--------------->

こんにちは

<!------------------------ここまで----------------------->
<?php endif; ?>

終了日時のみ設定する場合

<?php $endtime = strtotime("2017-12-01 00:00:00"); // 表示終了日時
if(date_i18n("U") < $endtime) : ?>
<!----------------↓ここに表示するHTMLを記述--------------->

こんにちは

<!------------------------ここまで----------------------->
<?php endif; ?>

開始・終了日時両方を設定する場合

<?php $starttime = strtotime("2017-10-01 00:00:00"); // 表示開始日時
$endtime = strtotime("2017-12-01 00:00:00"); // 表示終了日時
if(date_i18n("U") > $starttime && date_i18n("U") < $endtime) : ?>
<!----------------↓ここに表示するHTMLを記述--------------->

こんにちは

<!------------------------ここまで----------------------->
<?php endif; ?>

コメントを残す

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

CAPTCHA