Luxeritasのショートコードを活用して記事の一部分を期間限定で表示する方法
ブログで紹介した商品、期間限定キャンペーンで安くなってるから、その文言付け加えておこう! でも対象期間が過ぎた後に消すの忘れそうだなぁ…
そんな私と同じような忘れっぽい方におすすめの方法があります。
WordPressではショートコードという機能を用いて、一定期間を過ぎたら自動的に非表示に出来るんです。
上記のサイトで紹介されている通りに設定すれば誰でも簡単に出来ちゃうのですが、WordPressのテーマ「Luxeritas(ルクセリタス)」を使っている人はもっと簡単に便利にできる方法があるんです!
記事の一部分を設定した日時が過ぎたら自動的に非表示にする方法
Luxeritas独自機能のショートコードは、登録しておけばエディタ画面にてボタン一発で呼び出せる便利機能。
functions.phpがずらずら長くならず、登録したショートコードが一覧で確認できるのもメリット。
設定方法を以下で解説します。
- STEP1
- STEP2
- STEP3以下のソースコードをContentsにコピペします。
// 期間と期間過ぎた後のテキスト(デフォ)を設定 extract( shortcode_atts( array( 'term' => 0, 'after' => '' ), $args ) ); if( wp_date('YmdHi') >= $term ) { // あえて別の国のタイムゾーンにしたい場合は↓こっち // if( wp_date( 'YmdHi', null, new DateTimeZone( 'Europe/Paris' ) ) >= $term ) { // 指定した日時過ぎた(表示しない) $contents = $after; }
元々はもう少し長いコードだったのですが、Luxeritas作者のるなさんからアドバイスいただき上記のスッキリとしたコードになりました! ありがとうございます!(元々のコードはコメント欄に残してあります)
- STEP4
- STEP5ショートコードの使用方法です。
エディタで該当のショートコードを選ぶと、こんな感じで挿入されます。
[AutoHide term='yyyymmdd0000'][/AutoHide]
使い方は下記の通り。
[AutoHide term='yyyymmdd0000']ここに期間限定で表示したい内容を入れます。[/AutoHide]
yyyymmddの箇所をお好きな年月日に修正します。
2021年4月30日いっぱいで表示をやめたい場合は、20210501。
少しややこしいですが、0時0分に非表示になるので、日付は表示したい期限の翌日を設定します。
期間が決まっている情報を自動的に非表示するメリット
- 一度設定すれば以降は忘れても安心
- 対象期間が決まった情報をそのまま載せ続けることがなくなる
- つまり、ブログの信頼度がアップ!
というわけで、アフィリエイトやイベントページ等、期間がある情報をブログに載せている方はぜひ活用してみてください。
ディスカッション
コメント一覧
1. term のデフォルト値は空文字よりも 0 の方が良い
2. ショートコードの中でさらにショートコードを使うなら必要だけど、今回の場合、do_shortcode と shortcode_unautop はいらないと思う
3. date() 関数だと 9 時間ずれることあるけど、wp_date() 関数なら、WordPress 本体で設定されてるタイムゾーンになるので、wp_date() を使うべき(WordPress 内では date() 関数ではなく wp_date() を使うように推奨されてる)
↓ なので、こうなりました。
——
function( $args, $contents ) {
// 期間と期間過ぎた後のテキスト(デフォ)を設定
extract( shortcode_atts( array(
'term' => 0,
'after' => ''
), $args ) );
if( wp_date('YmdHi') >= $term ) {
// あえて別の国のタイムゾーンにしたい場合は↓こっち
// if( wp_date( 'YmdHi', null, new DateTimeZone( 'Europe/Paris' ) ) >= $term ) {
// 指定した日時過ぎた(表示しない)
$contents = $after;
}
retrun $contents;
}
——
あと、これは Luxeritas 側での不具合ですが、引数はダブルクォート(")じゃなくてシングルクォート(')じゃないとダメぽいですね。
ダブルクォートだと、投稿画面でショートコードボタン押して呼び出した時に WordPress の変換処理で勝手にダブルプライム(″)に変換されちゃうみたい。
なので、、、
——
AutoHide term='yyyymmdd0000'
——
↑ この方が確実。
この不具合に関しては、次のバージョンで直しますが、古いバージョン使ってる人もいるんで、シングルクォートの方が間違いないです。
同じ動作なのにこんなにもスッキリとしたコードになるとは…さすがるなさん。ありがとうございます。
ちょっと今日はもう時間が取れないので、記事は後日修正しますね。
↓ 元々のコード
//data関数だけだと9時間のズレが生じる場合があるので
date_default_timezone_set('Asia/Tokyo');
// 現在時間を取得(年月日時分を取得)
$now = date('YmdHi');
// 期間と期間過ぎた後のテキスト(デフォ)を設定
extract(shortcode_atts(array(
'term' => '',
'after' => ''
), $args));
if($now < $term){
// 指定日時過ぎてない(表示する)
$contents = do_shortcode( shortcode_unautop( $contents ) );
}else{
// 指定した日時過ぎた(表示しない)
$contents = $after;
}