web関連

特定の日時過ぎたら表示を変えるphpのショートコード化

特定の日時過ぎたら表示を変えるphpのショートコード化

wordpressの記事の中で特定の日時を過ぎたら表示を非表示にするコードを使いたかったのでショートコ―ド化してみた
簡単なテキスト等を隠すことを想定

書き方

phpコード

functions.phpに記述します

function dnoneFunc( $atts, $content = null ) {
  //data関数だけだと9時間のズレが生じる場合があるので
  date_default_timezone_set('Asia/Tokyo');
  // 現在時間を取得(年月日時分を取得)
  $now = date('YmdHi');
  // 期間と期間過ぎた後のテキスト(デフォ)を設定
  extract(shortcode_atts(array(
    'term' => '',
    'after' => '期間が終了しました。'
  ), $atts));

  if($now < $term){
    // 指定日時過ぎてない(表示する)
    return $content;
  }else{
    // 指定した日時過ぎた(表示しない)
    return '<div style="display:none;">' . $content . '</div>' . $after;
  }
}
add_shortcode('display_none', 'dnoneFunc');

「term」は期間、「after」は期間終了した時に表示するテキスト入れてます。
期間終了したらショートコ―ドで囲った部分を<div style="display:none;">で囲んで非表示する。

ショートコ―ド

使い方「term」で年月日時分(必須)まで指定できるようにしています。
「after」はショートコ―ドで特に指定がなければデフォのテキスト、指定があれば指定したテキストが期間終了したら表示されます。

[display_none term="201810101200" after="このキャンペーンは終了しました。"]テキストが入ります。[/display_none]
ちょっと長いけどこれ以上短くする方法が思いつかない(勉強不足)

phpファイル内で使う場合

<?php echo do_shortcode('[display_none term="201810101200" after="このキャンペーンは終了しました。"]' . 'テキストが入ります。' . '[/display_none]'); ?>
長いけどphpファイル内で使うならショートコ―ド化する必要ないしね
過去に期間指定して表示変えるphp作ってるからよければどぞ

ウィジェットで使う場合

functions.phpに以下のコードを書く

add_filter('widget_text', 'do_shortcode');
一応メモ、ウィジェットのテキストエリアでショートコ―ド使えるようになるやつ

参考

▼WordPressのショートコードの引数の使い方
https://whitebear-seo.com/wordpress-shortcode-parameter/

▼囲み型ショートコードの作成
http://www.webdesignleaves.com/wp/wordpress/88/

用件として、土日に期間終了する系の案件結構あるからそこで使おうと思って作った。