先日、Facebookで「ある期間だけ表示する囲み型ショートコード」をシェアしたとき、イラストレーターのぬっきぃさんから「オープンしたら、オープンして◯◯日です!を表示するようにしたら、消さなくてもいいし、ワクワクも積み重なっていくのではないかと」というご意見をいただきました。
なるほどね~!ということで!早速作ってみました。
早速作れてしまいました…
以前作った 日付を与えるとその日までの日数を返すショートコード ryus_xmoredays をコピーして、名前を ryus_xdayslater に置き換え、コメントを書き換え、
$days = ($theDay - $today) /86400;
を
$days = ($today - $theDay) /86400;
に書き換えたら、アッサリとできてしまいました(^_^;。
しかし、ほとんど同じコードのfunctionが2つあるのはメンテナンス的によろしくない
ほとんど同じコードのfunctionが2つというのはメンテナンス的によろしくないし、自分の好みではありません(^_^;。ということで2つを1つのfunctionにまとめてみました。
// ○○まであと何日を返す function ryus_xmoredays($atts) { /* 引数を展開する */ extract( shortcode_atts( array( 'date' => '', ), $atts ) ); return _ryus_days_count($date, 'more'); } add_shortcode('ryus_xmoredays', 'ryus_xmoredays'); // ○○から何日経過したかを返す function ryus_xdayslater($atts) { /* 引数を展開する */ extract( shortcode_atts( array( 'date' => '', ), $atts ) ); return _ryus_days_count($date, 'later'); } add_shortcode('ryus_xdayslater', 'ryus_xdayslater'); function _ryus_days_count($date, $moreOrLater) { $dateArray = _dateExplode($date); if(count($dateArray) != 3){ return ''; } if(checkdate ( $dateArray[1] , $dateArray[2] , $dateArray[0] )){ // 日付として妥当だったら $today=mktime(0,0,0,date("m"),date("d"),date("Y")); $theDay=mktime(0,0,0,$dateArray[1],$dateArray[2],$dateArray[0]); if ($moreOrLater == 'later'){ $days = ($today - $theDay) /86400; } elseif ($moreOrLater == 'more'){ $days = ($theDay - $today) /86400; } else { return ''; } return $days; } return ''; } function _dateCheck($dateArray) { if(count($dateArray) != 3) { return false; } else { if(checkdate ( intval($dateArray[1]) , intval($dateArray[2]) , intval($dateArray[0]) )){ return true; } else { return false; } } } function _dateExplode($date) { $dateArray = array(); if($date != ''){ if(strpos($date, '/') !== false){ $dateArray = explode("/", $date); } else { $dateArray = explode("-", $date); } } if(count($dateArray) == 3){ $dateArray[1] = substr('0'.$dateArray[1], -2); $dateArray[2] = substr('0'.$dateArray[2], -2); } return $dateArray; }
ショートコードは、ryus_xmoredaysとryus_xdayslaterに分けてありますがある日までもしくはある日からの指定した日付とmoreなのかlaterなのかを _ryus_days_count というfunctionに与えて計算するというものになりました。_ryus_days_countではmoreなのかlaterなのかで計算部分を切り分けてるだけで他の動きは一緒なので、これでだいぶスッキリしました。
ある日まであと何日か、ある日から何日経過したかとある期間だけ表示するショートコードを組み合わせてみる
ある日まであと何日か、ある日から何日経過したかとある期間だけ表示するショートコードを組み合わせてみます。
たとえば、コワーキングスペース八王子 8Beat でしたら、11月1日にオープンなので、
[ryus_during to="2014-10-31"] <div style="background-color:#f3e631;color:#333;padding:5px;"> コワーキングスペース八王子 8beat <br />オープンまで、あと <span style="font-size:20px;font-weight:bold">[ryus_xmoredays date=2014-11-1] </span>日! </div> [/ryus_during] [ryus_during from="2014-11-1"] <div style="background-color:#f3e631;color:#333;padding:5px;"> コワーキングスペース八王子 8beat <br />オープンから<span style="font-size:20px;font-weight:bold">[ryus_xdayslater date=2014-11-1] </span>日が経過しました! </div> [/ryus_during]
こんな風に書いておきます。これで表示はオープンまではあと何日、オープンからは○日が経過しました!となるはずです。今現在は、
と表示されています。経過日数を見てみたいので1ヶ月早くオープンしたことに
[ryus_during to="2014-9-30"] <div style="background-color:#f3e631;color:#333;padding:5px;"> コワーキングスペース八王子 8beat <br />オープンまで、あと <span style="font-size:20px;font-weight:bold">[ryus_xmoredays date=2014-10-1] </span>日! </div> [/ryus_during] [ryus_during from="2014-10-1"] <div style="background-color:#f3e631;color:#333;padding:5px;"> コワーキングスペース八王子 8beat <br />オープンから<span style="font-size:20px;font-weight:bold">[ryus_xdayslater date=2014-10-1] </span>日が経過しました! </div> [/ryus_during]
して、表示してみると、
こんな感じに経過日数に切り替わったのが分かります。
実際のショートコードをこの投稿にに書いておくので、日々日数が変わっていく様が見えると思います(^^)/
[ryus_during to=”2014-10-31″]
オープンまで、あと [ryus_xmoredays date=2014-11-1] 日!
[/ryus_during]
[ryus_during from=”2014-11-1″]
オープンから[ryus_xdayslater date=2014-11-1] 日が経過しました!
[/ryus_during]
まとめ:使い方
使い方ですが、しかし、ほとんど同じコードのfunctionが2つあるのはメンテナンス的によろしくない の項で書いてあるコードをお使いの子テーマのfunctions.phpにコピーして、あとはショートコードをここに書いてあるものを参考にして使ってみてください。ある期間だけ表示するショートコードは、「ある期間だけ表示する囲み型ショートコード」にあるコードをコピーしてください。
そして ぬっきぃさん blogのヒントありがとうございました(^^)/
コメント