WordPressのコンテンツ内でタイマーセットするショートコード

クライアントから本文中に予約投稿みたいなタイマーを設置できないかと相談がありました。
テンプレート直書きなら簡単なんだけど、エディタ内でとなるとなぁ…。
閃きました!ショートコードを使えば可能だ!
そういうわけで、タイマーセットできるショートコードを作りました。

日時を指定して、その期間だけ表示するショートコード

ググる前に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のコンテンツ内でタイマーセットするショートコード」でした。
めでたし、めでたし。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です