指定期間中だけ内容を表示するキャンペーンショートコードの実装方法

世の中には、期間を指定したキャンペーンが結構あります。

例えばこんなの。

  • Amazonのセール
  • 楽天セール
  • サーバーの値下げ期間
  • 自作コンテンツの期間限定公開

等々、「時期を区切ってセール」なんてケースが結構あるかと思います。

例えば、2019年のAmazonサイバーマンデーのセール期間ならこんな感じ。

開催期間:2019年12月6日(金)9:00 ~ 12月9日(月)23:59まで

これまでは、こういった期間限定のセール情報を書いたときは、終了後は削除する必要があったりしました。

ただ、セール終了時となる「夜中の12時近くにスタンバっていて削除する」なんてのも非常に面倒くさいです。

そんなわけで、

セールとかキャンペーン期間中のみ表示できる機能があれば…

なんてことが、時々あるのでショートコードで実装してみました。

スポンサーリンク
レクタングル(大)広告

キャンペーンショートコードの実装方法

今回は、campaignというショートコードを実装して、それに対してオプションで期間を指定することで、期間中だけ内容が表示されるショートコードを実装するカスタマイズ方法を紹介します。

といってもやることといったらコレだけです。

  1. functions.phpにPHPコードをコピペ

基本的にコピペだけで実装できます。シンプルな機能なので、自由にカスタマイズして拡張機能を付けることも出来るかと思います。

functions.phpにPHPコードをコピペ

以下をテーマ(子テーマ)のfunctions.phpに追記する形でコピペします。

//キャンペーン(指定期間中のみ表示)
add_shortcode('campaign', 'campaign_shortcode');
if ( !function_exists( 'campaign_shortcode' ) ):
function campaign_shortcode( $atts, $content = null ) {
  extract( shortcode_atts( array(
    'from' => null, //いつから(開始日時)
    'to' => null, //いつまで(終了日時)
    'class' => null, //拡張クラス
  ), $atts, 'campaign' ) );
  
  //内容がない場合は何も表示しない
  if (!$content) return null;
  //現在の日時を取得
  $now = date_i18n('U');

  //いつから(開始日時)
  $from_time = strtotime($from);
  if (!$from_time) {
    $from_time = strtotime('-1 day');
  };

  //いつまで(終了日時)
  $to_time = strtotime($to);
  if (!$to_time) {
    $to_time = strtotime('+1 day');
  };

  //拡張クラス
  if ($class) {
    $class = ' '.$class;
  }

  $tag = null;
  if (($from_time < $now) && ($to_time > $now)) {
    $tag = '<div class="campaign'.esc_attr($class).'">'.
      // date_i18n('開始日時:Y年m月d日 H時i分s秒', $from_time).'<br>'.
      // date_i18n('終了日時:Y年m月d日 H時i分s秒', $to_time).'<br>'.
      $content.
    '</div>';
  }

  return $tag;
}

利用方法

使い方は、単に「日時指定オプション」に対して日時を指定するだけです。

fromオプションには、開始日時を指定します。

toオプションには、終了日時を指定します。

サンプルコード

例えば、冒頭のAmazonサイバーマンデーのセール期間を指定するなら

開催期間:2019年12月6日(金)9:00 ~ 12月9日(月)23:59まで

こんな感じになります。

[campaign from="2019-12-06 00:09:00" to="2019-12-09 23:59:59"]
Amazonサイバーマンデー開催中!
[/campaign]

クリスマス関連イベントの中止を伝えるならこんな感じ。

[campaign from="2020-12-24 00:00:00" to="2020-12-25 23:59:59"]
クリスマス中止のお知らせ
今年のクリスマスは中止になりました。
[/campaign]

もう既に始まっているキャンペーンの場合は、toオプションのみを指定して、終了期間のみを指定することもできます。

[campaign to="2099-12-31 23:59:59"]
終了日時のみを指定したキャンペーン内容を表示(サーバーのクーポンキャンペーンとか)
「〇〇日までドメイン料金無料!」みたいな
[/campaign]

開始日時だけが分かっていて終了日時が未定のキャンペーンは、fromオプションのみを利用して、以下のように指定します。

[campaign from="2019-5-01"]
終了日時が未定のキャンペーン内容を表示(新しいサービスが始まる場合とか)
このサンプルは令和が始まった時刻。
[/campaign]
時間を指定しなかった場合は、00:00:00が指定されます。

まとめ

こんな感じで「表示する期間を限定できるコンテンツ」を本文内に仕込むことができます(※ショートコードが実行される場所なら本文以外でも利用できます)。

これにより、

キャンペーン期間中のみ書きたいことがあるんだけど開始時刻と終了時刻に編集するのが面倒くさいんだよなぁ…

なんて場合は、多少楽になるかと思います。

また、キャンペーンが終わった際の終了メッセージを別に書くことで、終了宣言の手間も省くことができるかと思います。

このショートコードを利用する場合、WordPress上で「ページキャッシュプラグイン」を利用している場合は、キャッシュが削除されないと表示内容は変更されないのでご注意ください。

WordPressテーマのCocoonSimplicityの最新版を利用している場合は、既に実装済みですのでカスタマイズは不要です。