MTS Simple Bookingは、WordPressで予約システムを構築できる便利なプラグインです。しかし、標準機能では予約受付締切を「◯日前」という日単位でしか設定できず、「前日の18時まで」といった時間単位での細かい制御ができません。
今回は、実際のクライアント案件で「前日18時を過ぎたら翌日の予約を受け付けない」という要望に対応したカスタマイズ方法をご紹介します。
問題の背景
MTS Simple Bookingの標準機能では:
- 予約受付開始の設定は「◯日前」という日単位のみ
- 「1日前」を選択すると、実際は「前日の0時」から受付開始
- つまり、前日の0時を過ぎれば、何時でも翌日の予約が可能
カスタマイズの実装
1. カスタマイズファイルの作成
以下の内容で mtssb-booking-custom-accepting.php を作成します:
<?php
/**
* MTS Simple Booking カスタマイズ - 前日18時締切対応
*
* このファイルをテーマのfunctions.phpか、
* カスタムプラグインとして読み込んでください。
*/
// 設定画面に「前日18時」の選択肢を追加
add_filter('mtssb_settings_get_booking_margin', 'custom_booking_margin_options');
function custom_booking_margin_options($options) {
// 既存の選択肢の先頭に「前日18時まで」を追加
// -1を使用して特別な値として識別
$custom_options = array(
'-1' => '前日18時まで',
);
return array_merge($custom_options, $options);
}
// プラグイン本体のstart_time計算を直接フックで上書き
add_action('plugins_loaded', 'override_booking_form_calculation', 20);
function override_booking_form_calculation() {
// 予約フォームのインスタンス化時にstart_timeを調整
add_action('init', function() {
$controls = get_option('mts_simple_booking_controls');
// -1(前日18時)が選択されている場合の特別処理
if (isset($controls['start_accepting']) && $controls['start_accepting'] == '-1') {
// フィルターを使ってstart_time計算を上書き
add_filter('option_mts_simple_booking_controls',
'modify_booking_controls_for_18pm_deadline');
}
}, 5);
}
/**
* コントロール値を動的に修正して18時締切を実現
*/
function modify_booking_controls_for_18pm_deadline($controls) {
if (isset($controls['start_accepting']) && $controls['start_accepting'] == '-1') {
$current_time = current_time('timestamp');
$today_18 = mktime(18, 0, 0, date('n'), date('j'), date('Y'));
// 現在時刻に応じて動的に分数を計算
if ($current_time >= $today_18) {
// 18時過ぎ:明後日から予約可能(2日 = 2880分)
$controls['start_accepting'] = 2880;
} else {
// 18時前:明日から予約可能(1日 = 1440分)
$controls['start_accepting'] = 1440;
}
}
return $controls;
}
/**
* 管理画面での表示調整
*/
add_action('admin_footer', 'custom_booking_admin_script');
function custom_booking_admin_script() {
$screen = get_current_screen();
if ($screen && $screen->id === 'simple-booking_page_simple-booking-settings') {
?>
<script>
jQuery(document).ready(function($) {
// start_accepting の選択肢が変更されたときの処理
$('#start_accepting').on('change', function() {
if ($(this).val() === '-1') {
// 説明文を追加
if (!$('#previous_18_notice').length) {
$(this).after('<p id="previous_18_notice" style="color: #0073aa; margin-top: 5px;">※ 前日の18時を過ぎると翌日の予約ができなくなります。</p>');
}
} else {
$('#previous_18_notice').remove();
}
}).trigger('change');
});
</script>
<?php
}
}
2. ファイルの設置と読み込み
方法A: プラグインディレクトリに配置
/wp-content/plugins/mts-simple-booking-c/mtssb-booking-custom-accepting.php
方法B: テーマのfunctions.phpで読み込み
// 予約受付締切を「前日18時」までにする
$root_path = $_SERVER['DOCUMENT_ROOT'];
require_once($root_path . "/サイトパス/wp-content/plugins/mts-simple-booking-c/mtssb-booking-custom-accepting.php");
3. 管理画面での設定
- WordPress管理画面にログイン
- 「MTS予約システム」→「各種設定」→「予約パラメータ」
- 「予約受付開始」で「前日18時まで」を選択
- 「変更を保存」をクリック

動作の仕組み
タイムラインでの動作例
【17:59の場合】
- 翌日の予約:○ 受付可能
- 翌々日の予約:○ 受付可能
【18:01の場合】
- 翌日の予約:× 受付不可
- 翌々日の予約:○ 受付可能
技術的なポイント
-
数値型の値を使用
- プラグインが数値を期待するため、
-1という特殊な数値を使用 - 文字列を使うと保存時に不具合が発生
- プラグインが数値を期待するため、
-
動的な値の変換
-1が選択された場合、現在時刻に応じて自動的に適切な分数に変換- 18時前:1440分(1日)
- 18時以降:2880分(2日)
-
フィルターフックの活用
option_mts_simple_booking_controlsフィルターで値を動的に調整- プラグイン本体のコードを直接修正せずに実装
カスタマイズの応用
締切時間を変更する場合
17時締切にしたい場合:
$today_18 = mktime(17, 0, 0, date('n'), date('j'), date('Y'));
19時締切にしたい場合:
$today_18 = mktime(19, 0, 0, date('n'), date('j'), date('Y'));
複数の締切時間オプションを追加
function custom_booking_margin_options($options) {
$custom_options = array(
'-1' => '前日18時まで',
'-2' => '前日17時まで',
'-3' => '前日19時まで',
);
return array_merge($custom_options, $options);
}
トラブルシューティング
よくあるエラーと対処法
-
ファイルが読み込めない場合
Failed opening required '/path/to/file'- 絶対パスを使用して読み込む
- ファイルのパーミッションを確認(644または読み取り可能)
-
選択肢が保存されない場合
- キャッシュプラグインを一時的に無効化
- データベースの
mts_simple_booking_controlsオプションを確認
-
時間がずれる場合
- WordPressのタイムゾーン設定を確認
current_time('timestamp')を使用してWordPressのタイムゾーンに合わせる
まとめ
MTS Simple Bookingの標準機能では実現できない「前日◯時締切」という細かい制御を、プラグインのフィルターフックを活用することで実装できました。
このカスタマイズにより:
- 予約受付の締切時間を時間単位で制御可能
- プラグイン本体を改変せずに機能追加
- 管理画面から簡単に設定変更可能
同様の要望がある場合は、このコードをベースにカスタマイズしていただければ幸いです。
注意事項
- プラグインのアップデート時は動作確認を行ってください
- 本番環境に適用する前に、必ずテスト環境で動作確認を行ってください
- カスタマイズによる不具合については、自己責任でお願いします