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の有料版 には対応していません。

