クライアントから本文中に予約投稿みたいなタイマーを設置できないかと相談がありました。
テンプレート直書きなら簡単なんだけど、エディタ内でとなるとなぁ…。
閃きました!ショートコードを使えば可能だ!
そういうわけで、タイマーセットできるショートコードを作りました。
日時を指定して、その期間だけ表示するショートコード
ググる前にchatGPTに聞いてみました。
「日時を指定して、その期間だけ表示するショートコード」
あっという間にコードを教えてくれました。本当に便利な世の中になりましたね。
// ショートコードの定義
function my_shortcode( $atts, $content = null ) {
// $atts に渡された引数から値を取得
$my_param = shortcode_atts( array(
'start_datetime' => '',
'end_datetime' => '',
), $atts );
// 日付を取得
$current_datetime = current_time( 'Y-m-d H:i:s' );
// 表示期間内であればコンテンツを返す
if ( $current_datetime >= $my_param['start_datetime'] && $current_datetime <= $my_param['end_datetime'] ) {
return $content;
} else {
return '';
}
}
add_shortcode( 'my_shortcode', 'my_shortcode' );
これをfunctions.phpにコピペします。
パターンを検証してみる
エディタには下記のように記述します。
[my_shortcode start_datetime="2023-04-29 00:00:00" end_datetime="2023-05-31 24:00:00"] GW期間中に表示されるコンテンツ [/my_shortcode]
[my_shortcode start_datetime="" end_datetime="2023-05-31 24:00:00"] GW期間終了まで表示されるコンテンツ [/my_shortcode]
[my_shortcode start_datetime="2023-04-29 00:00:00" end_datetime=""] GW期間開始から表示されるコンテンツ [/my_shortcode]
バグ発見!
終了日時(end_datetime)が指定されていないと動作しません。これは困りました。
100年後、1000年後の日時を指定してしまえば動くのですが…。
自分が運用するのであれば、問題ないのですが、他人様に使ってもらうとなると、なんか不完全な感じが否めないよな…。
そこで、コードを修正することにしました。
// ショートコードの定義
function my_shortcode( $atts, $content = null ) {
// $atts に渡された引数から値を取得
$my_param = shortcode_atts( array(
'start_datetime' => '',
'end_datetime' => '',
), $atts );
// 日付を取得
$current_datetime = current_time( 'Y-m-d H:i:s' );
// 終了日時の指定がなかったら
if( empty( $my_param['end_datetime'] ) ){
// 表示期間内であればコンテンツを返す
if ( $current_datetime >= $my_param['start_datetime'] ) {
return $content;
} else {
return '';
}
}esle{
// 表示期間内であればコンテンツを返す
if ( $current_datetime >= $my_param['start_datetime'] && $current_datetime <= $my_param['end_datetime'] ) {
return $content;
} else {
return '';
}
}
}
add_shortcode( 'my_shortcode', 'my_shortcode' );
これで、問題なく動作しました。
[my_shortcode end_datetime="2023-05-31 24:00:00"] 終了日時だけ指定したコンテンツ [/my_shortcode]
[my_shortcode start_datetime="2023-04-29 00:00:00"] 開始日時だけ指定したコンテンツ [/my_shortcode]
片方だけの指定でも問題なく動作します。
以上「WordPressのコンテンツ内でタイマーセットするショートコード」でした。
めでたし、めでたし。