[php・wp]年末年始休業のお知らせを時限式にして設置する

設置はともかく年始の削除が忘れちゃったり後手になったりでめんどくさい。

これの必要性とか

「新着情報」とかがあればそっちに書けばいいんだけど、WEBサイトの更新を重要視していなければ、むしろそれは無いほうがいいよねっていう。あるのに使ってないのは評価が下がる。

で、そういうものじゃなく設置する期間限定表示のお知らせは、社内で設置しろって言われても言われたその時点での掲載じゃなかったり、終わったはいいもののゴタゴタの中で削除するのを忘れてましたとか、もうほんとにめんどくさい。

時限式のギミックはjsとかphpとかで簡単に作れるのでやってしまったほうがいいと思う。

PHPでやる

「年末から三賀日まで休みってのを12月から休みが終わるまで告知したい」となるとこうする。

<?php 
$startTime = date('2020-12-01 00:00');
$endTime = date('2021-01-03 23:59');
$nowTime = date('Y-m-d H:i');
if($nowTime >= $startTime && $nowTime < $endTime):
?>
~お知らせ内容~
<?php endif; ?>

簡単。

JSでやる?

探せばモデルケースはいくつかでてくる。

真似てやってしまえばいいのだけど、非表示にしてもphpと違ってソースに残っちゃうから格好が悪い。まあそこだけ。

phpで組めるならphpでやるのがいいと思う。
WPだったらカスタムフィールドで入力フォーム作れるしね。

WPでカスタムフィールド(AdvancedCustomFields)を使って作る場合

index.phpとかhome.phpでトップページを表示させている場合、
CFを使えるようにするために固定ページで作成する。
合わせて、「is_home」だけでcss読み込みとかifとかを組んでた場合は効かなくなるので「is_front_page()」を足しておく。

で、ACFをこんな感じで組む。

トップページ用の固定ページに適用させる。

そしたら固定ページの中身にお知らせ部分を突っ込む。

<?php if(get_field('notice_active')): ?>
    <?php if(get_field('notice_period')): ?>
        <?php
        $noticeStartTime = get_field( 'notice_start_date' ) . ' ' . get_field( 'notice_start_time' );
        $noticeEndTime = get_field( 'notice_end_date' ) . ' ' . get_field( 'notice_end_time' );
        $startTime = date( $noticeStartTime );
        $endTime = date( $noticeEndTime );
        $nowTime = date( 'Y-m-d H:i' );
        if ( $nowTime >= $startTime && $nowTime < $endTime ):
        ?>
    <?php endif; ?>
        <h1><?php the_field('notice_title'); ?></h1>
        <p><?php the_field('notice_detail'); ?></p>
    <?php if(get_field('notice_period')): ?>
        <?php endif; ?>
    <?php endif; ?>
<?php endif; ?>

上記のやつを差し替えたってのと、ついでだから時限式の有効無効切り替えもできるようにした。即時表示ができるようになったから使い勝手上がったかも。

文面のフォーマットは日付以外使いまわしだから夏季休暇とかのテンプレートを仕込めたらもっと便利だよなって思うんだけど、それなら新着情報足せばいいじゃんってなるし、うーん。

追記:20210105

phpで設置した場合、表示は問題なくできた。
カスタムフィールドで置換しても動作した。
だけど期間が過ぎても表示されっぱなしだったので不完全だった。

jsは期間が過ぎたら非表示になってたので問題なかった。

コメント

タイトルとURLをコピーしました