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

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

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

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

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

1 カレンダー表示を自動的に「○」から「-」へ切り替える

この記事では、WordPress プラグイン MTS Simple Booking-C(無料版) において、当日の予約受付がすべて終了した時点で、カレンダー表示を自動的に「○」から「-」へ切り替えるカスタマイズ方法を解説します。

「当日の予約枠がすべて終了しているのに、カレンダーでは○のまま表示されてしまう」といった問題を解消したい方向けの、実運用レベルの対応です。

2 変更後の動作イメージ

  • 当日・最終受付前:カレンダーは「○」表示
  • 当日・最終受付終了後:カレンダーは自動で「-」表示
  • 翌日以降:通常通り「○」表示

3 対応の概要

今回のカスタマイズでは、以下の考え方で制御します。

  • 「今日かどうか」を最優先で判定
  • 当日の場合は、時間枠(timetable)から最終受付時刻を算出
  • 現在時刻が最終受付を過ぎていれば「-」に切り替え

4 対応ファイル

  • mtssb-front.php(プラグイン本体)

5 前提知識(重要)

MTS Simple Booking-C(無料版)timetable は、無料版・有料版ともに「秒」単位で管理されています。管理画面では時刻表示のため分単位に見えますが、内部的には 0:00 からの経過秒として扱われています。

timetable の値は Unix time ではありませんが、日付($thetime)に加算する「秒オフセット」として扱われています。

6 実装するロジック

カレンダー1日分に複数の予約枠(article)が存在する場合でも、その日の中で最も遅い受付終了時刻を基準に判定します。

7 実装コード

mtssb-front.php のカレンダー判定部分に、以下のコードを追加(または差し替え)します。

7.1 次のコードをコメントに


//if ((empty($this->controls['output_margin']) && $thetime < $this->start_day_time) || $thetime < $this->today_time || $this->max_time <= $thetime || !$schedule) {
    

7.2 追加するコード

上記でコメントにしたコードの下に追加


// 初期値(必須)
$mark = 'disable';

// 今日かどうかを判定
$is_today = (date_i18n('Ymd', $thetime) === date_i18n('Ymd', current_time('timestamp')));

/**
 * ① 今日の場合:最終受付時刻で判定
 */
if ($is_today) {

    $latestAcceptTime = 0;

    foreach ($this->articles as $article) {

        if (empty($article['timetable'])) {
            continue;
        }

        // timetable は「秒」なので変換しない
        $times = $article['timetable'];

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

        // 枠の長さ(差分から自動算出)
        sort($times);
        $slotLength = (count($times) >= 2)
            ? $times[1] - $times[0]
            : 1800; // デフォルト30分

        // この article の最終受付終了時刻
        $articleLastAccept = $thetime + $lastStart + $slotLength;

        // その日の中で最も遅い受付終了時刻を取得
        $latestAcceptTime = max($latestAcceptTime, $articleLastAccept);
    }

    // 現在時刻と比較
    $mark = (current_time('timestamp') >= $latestAcceptTime)
        ? 'disable'
        : 'vacant';
}

/**
 * ② 過去日
 */
elseif ($thetime < $this->today_time) {
    $mark = 'disable';
}

/**
 * ③ 未来日で予約不可条件に該当
 */
elseif (
    (empty($this->controls['output_margin']) && $thetime < $this->start_day_time)
    || $this->max_time <= $thetime
    || !$schedule
) {
    $mark = 'disable';
}

/**
 * ④ 未来日で予約可能
 */
else {
    $mark = 'vacant';
}
    

8 この実装で解決できること

  • 当日すべての時間枠が終了したら、自動で「-」表示になる
  • 時間割を変更しても、コードの修正が不要
  • 複数 article(複数予約枠)にも対応
  • PHP Warning(未定義変数)が発生しない

9 注意点

  • プラグイン本体を編集しているため、アップデート時は再対応が必要です
  • timetable を分単位だと誤解して変換しないよう注意してください
  • 本番環境では、必ず事前にバックアップを取ってから作業してください
  • 有料版では一部ロジックが近い形で実装されていますが、無料版では未対応のため本対応が必要です

10 完成イメージ

予約表デモサイト

10.1 当日・受付終了前

最終受付時刻前のため「○」表示

10.2 当日・受付終了後

最終受付時刻を過ぎると自動で「-」表示

11 まとめ

MTS Simple Booking-C(無料版) はシンプルで扱いやすい反面、「当日終了後の表示制御」は標準では考慮されていません。

今回のように時刻ベースで判定するカスタマイズを行うことで、ユーザーに誤解を与えない、実運用に強い予約カレンダーになります。

小さな改修ですが、予約トラブル防止の効果は非常に高い改善です。

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

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