MTS Simple Bookingの有料版 で最終予約時間が終わったら「○」から「-」表示に自動切替する方法

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

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

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

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

1 この記事で解決できること

WordPressの予約プラグイン MTS Simple Booking(有料版) を使用していると、次のような問題に遭遇することがあります。

  • 当日の最終予約時間が過ぎているのに、カレンダーが「○(予約可能)」のまま表示されてしまう

本記事では、当日の最終予約枠がすべて終了した時点で、カレンダー表示を自動的に切り替える方法を解説します。

2 実現したい動作

当日分の予約枠がすべて終了したら、自動で次のように変更します。

○(予約可能) → -(受付終了)

  • 管理画面での手動操作は不要
  • 実際の受付状況と表示がズレない
  • 利用者にとって直感的に分かるUI

3 修正対象ファイル

/wp-content/plugins/mts-simple-booking/mtssb-front.php

4 追加する場所

以下の既存コードがあります。


if (empty($schedule['open']) || $thetime < $this->calendar->todayTime) {
    $mark = 'disable';
} elseif (!$timetableDay && !$this->controls['output_margin']) {
    $mark = 'disable';
}

↑ この直下(日付判定より後・出力処理より前)に、次のコードを追加します。

5 追加するコード

// 最終予約時間以降は「○」から「-」に変更
// === 当日の最終受付時刻チェック ===

if (date_i18n('Ymd', $thetime) === date_i18n('Ymd', current_time('timestamp'))) {

    // 当日のタイムテーブル(秒単位)
    $times = $this->article['timetable'];

    // 最終枠の開始秒
    $lastStart = max($times);

    // 枠の長さを自動算出(次の枠との差分)
    sort($times);

    $slotLength = 1800; // デフォルト30分

    if (count($times) >= 2) {
        $slotLength = $times[1] - $times[0];
    }

    // 最終受付時刻(開始 + 枠長)
    $lastAcceptTime = $thetime + $lastStart + $slotLength;

    // 現在時刻が最終受付時刻を過ぎていれば無効化
    if (current_time('timestamp') >= $lastAcceptTime) {
        $mark = 'disable';
    }
}

6 コードの仕組みを解説

6.1 ① 当日かどうかを判定

if (date_i18n('Ymd', $thetime) === date_i18n('Ymd', current_time('timestamp')))
  • $thetime:その日の 00:00 の UNIX タイム
  • current_time('timestamp'):WordPress基準の現在時刻

「今日だけ」処理を行うための条件です。

6.2 ② タイムテーブルから最終枠を取得

$times = $this->article['timetable'];
$lastStart = max($times);

timetable には、開始時刻が秒で格納されています。

例:

  • 09:00 → 32400
  • 09:30 → 34200

max() を使うことで、当日の最終予約枠の開始時刻を取得します。

6.3 ③ 枠の長さを自動判定

$slotLength = 1800; // デフォルト30分

if (count($times) >= 2) {
    $slotLength = $times[1] - $times[0];
}
  • 30分・60分など、サイトごとの設定差に対応
  • 最初の2枠の差分から 1枠の長さを自動算出
  • データ不足時は安全に 30分

6.4 ④ 最終受付時刻を計算

$lastAcceptTime = $thetime + $lastStart + $slotLength;

計算内容は以下の通りです。

  • 当日 00:00
  • + 最終枠の開始秒
  • + 枠の長さ

「この時刻を過ぎたら受付終了」という明確な基準点を作ります。

6.5 ⑤ 受付終了なら「-」表示に変更

if (current_time('timestamp') >= $lastAcceptTime) {
    $mark = 'disable';
}

disable にすることで、カレンダー表示が 「-(受付終了)」 に切り替わります。

利用者にとって「もう予約できない」ことが直感的に分かるUIになります。

7 このカスタマイズのメリット

  • 管理者が毎日手動で操作する必要なし
  • 当日予約の誤操作・クレーム防止
  • 実際の受付状況と表示がズレない
  • MTS Simple Booking(有料版)の仕様を壊さない安全な実装

8 注意点

  • 本実装は 等間隔のタイムテーブル を前提としています
  • 不等間隔の場合は、最終枠の終了時刻を個別に算出してください
  • プラグイン本体を編集しているためアップデート時は再対応が必要です

9 まとめ

MTS Simple Booking(有料版)は柔軟ですが、「当日の最終受付後の表示制御」は標準では少し物足りません。

今回のように、

  • タイムテーブル
  • 枠の長さ
  • WordPressの時刻管理

を正しく扱うことで、実運用に耐える予約カレンダー表示に改善できます。

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

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

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