MTS Simple Bookingの有料版 で「ギリギリの予約時間まで」キャンセルできるようにする方法

⚠ 対応プラグインについての重要な注意

※本記事は MTS Simple Bookingの有料版 専用 です。
MTS Simple Booking-Cの無料版 には対応していません。

※本記事は実運用で詰まった方向けの技術メモです。実際の環境やカスタマイズ状況によっては、そのまま適用できない場合があります。

ここから先は環境依存になります。個別条件が絡む場合は、無理に触らず専門対応を検討してください。

1 「予約開始時刻」を基準にキャンセル期限が判定されている

WordPressの予約プラグイン MTS Simple Booking(有料版) では、デフォルトの挙動だと「予約開始時刻」を基準にキャンセル期限が判定されます。

しかし実運用では、

  • 施術や利用時間が 30分・60分枠
  • 実際にキャンセルしたいのは 予約が終わる直前まで

というケースが多いはずです。

この記事では、予約の「開始時間」ではなく「終了時間」を基準にして、ギリギリまでキャンセル可能にする方法を解説します。

2 問題点(デフォルトの考え方)

MTS Simple Booking(有料版) のキャンセル制御は、

  • 予約開始時刻(booking_time)
  • そこから固定ルールで計算

という仕組みになっています。

そのため、

09:00〜09:30 の予約

でも、09:00を過ぎた時点でキャンセル不可と判定されてしまうことがあります。

これは利用者目線だと、かなり不親切です。

3 カスタマイズ方針

今回の方針はシンプルです。

  • キャンセル期限の判定を「予約終了時刻」を基準にする
  • 終了 1分前までキャンセル可能
  • 予約枠の長さが取得できない場合は、30分枠として扱う

つまり、

09:00〜09:30 → 09:29 までキャンセル可能

という、直感的な挙動に変更します。

4 修正するファイルと場所

対象ファイルはこちら。

mts-simple-booking/includes/mtssb-subscription.php

5 変更前のコード


    // 予約日時
    $booking_time = $this->booking['booking_time'];

    // 予約日の1日前の16:00をキャンセル期限とする
    $cancel_deadline = strtotime('-1 day 16:00', $booking_time);

    // 現在時刻
    $now = current_time('timestamp');

    return $cancel_deadline - $now;

この実装では、予約枠の長さ(30分・60分など)が一切考慮されていません。

6 変更後のコード(おすすめ)

以下のコードに書き換えます。


    //-----------------------------
    // ★ 開始時間ではなく終了時間を使う(ここが重要)
    //-----------------------------

    // 開始時刻(UNIX)
    $start = $this->booking['booking_time'];

    // 予約枠の長さ(分)
    // 無ければ 30分枠として扱う
    $duration = isset($this->booking['booking_duration'])
        ? $this->booking['booking_duration']
        : 30;

    // 終了時刻(UNIX)
    $end = $start + ($duration * 60);

    // 現在時刻(WordPressのタイムゾーン)
    $now = current_time('timestamp');

    // 終了1分前までキャンセル可
    return ($end - 60) - $now;

7 このコードのポイント

7.1 ① 終了時間を自前で計算

$end = $start + ($duration * 60);

開始時刻 + 予約枠(分)

「いつ終わるか」を明確にするのが最大のポイント

7.2 ② booking_duration が無い場合も考慮

$duration = isset($this->booking['booking_duration']) ? 
            $this->booking['booking_duration'] : 
            30;

環境や設定によっては booking_duration が無いケースもある

その場合でも壊れないよう、30分をデフォルト値に

実運用を想定した、安全な書き方です。

7.3 ③ 返り値の意味

return ($end - 60) - $now;
  • 正の値 → まだキャンセル可能
  • 0以下 → キャンセル期限切れ

終了1分前までOK という明確なルール

8 動作イメージ

予約時間09:00〜09:30
キャンセル可能な最終時刻09:29

予約時間10:00〜11:00
キャンセル可能な最終時刻10:59

予約時間14:30〜15:00
キャンセル可能な最終時刻14:59

利用者にとって、非常に分かりやすい挙動になります。

9 注意点

  • プラグインアップデートで上書きされます
  • 差分は必ずメモしておく
  • この変更はキャンセル判定ロジックのみ
  • 予約データや管理画面表示には影響しません

10 まとめ

MTS Simple Booking(有料版) は柔軟ですが、「開始時間基準」のままだと実運用とズレる場面が多々あります。

  • 終了時間を基準にする
  • 予約枠の長さを考慮する
  • ギリギリまでキャンセル可能にする

この3点を押さえるだけで、予約システムの使い勝手は大きく向上します。

※プラグイン本体を編集しているため、アップデート時は再対応が必要です。

同じ悩みを持っている方の参考になれば幸いです。

⚠ 対応プラグインについての重要な注意

※本記事は MTS Simple Bookingの有料版 の実装解説です。
MTS Simple Booking-Cの無料版 には対応していません。