MTS Simple-Bookingプラグインにオリジナルのフォーム入力項目を追加する方法

2020年7月26日【予約システム】MTS Simple-Booking

MTS SImple Booking 予約 カスタマイズ フォーム

MTS Simple-Bookingは、予約カレンダーでスケジュールを管理しながら、お客様情報を入力してもらって予約を受け付けることができるプラグインです。

デフォルトでは住所、電話番号、メールアドレスなどの基本情報は入力してもらえるのですが、年齢、性別や希望するサービスの内容などの項目を入力してもらうことができません。

プラグイン全体をいじるカスタマイズになるので、プラグインのコアファイルを書き換えるという異例の方法を取ります。

プラグインの更新があった際には、自分がカスタマイズした部分との互換性があるかどうかを確認して、カスタマイズ部分にも変更があった場合には更新されたファイルでまたカスタマイズしなおさなければなりません。

※MTS Simple Bookingはファイルをインストールして使うプラグインであり、WordPressの管理画面では更新できないので、うっかり更新してしまうということはありえません。

非推奨の方法なので、カスタマイズはご自身の責任の元行い、管理やメンテナンスが可能な方のみ参考にしてください。

導入&基本の設定方法はコチラ

カスタマイズの準備

FTPソフトで自分のサイトのWordPressにアクセスし、plugins>mts-simple-booking-cを開きます。

カスタマイズするファイル

  • mtssb-simple-booking-admin.php
  • mtssb-booking-form.php
  • mtssb-booking.php
  • mtssb-calender-admin.php
  • mtssb-mail.php
  • mtssb-settings-admin.php

これらをインストールしたら、カスタマイズのためにコピーを作成して編集し、編集したものをアップロードします。

カスタマイズ部分①予約の新規追加

mtssb-booking-admin.phpの270行目に予約情報入力フォーム postboxがあります。

「予約情報入力フォーム」で検索をかければすぐに見つかります。

自分のサイトのプラグインファイルで場所を探して、増やす項目部分のコピペと書き換えを行ってください。

※下記コードは説明用です。コピペ用ではありません。

	<div class="postbox">
		<h3><?php _e('Client Information', $this->domain) ?></h3>
		<div class="inside">
			<table class="form-table" style="width: 100%">
        <!-- ここから -->
				<tr>
					<th>
						<label for="booking-★company">◆<?php _e('Company', $this->domain) ?>◆</label>
					</th>
					<td>
						<input id="booking-★company" class="mts-fat" type="text" name="booking[client][★company]" value="<?php echo esc_attr($client['★company']) ?>" />
					</td>
				</tr>
        <!-- ここまで -->
				<tr>
					<th>
						<label for="booking-name"><?php _e('Name') ?></label>
					</th>
					<td>
						<input id="booking-name" class="mts-fat" type="text" name="booking[client][name]" value="<?php echo esc_attr($client['name']) ?>" />
					</td>
				</tr>

<ここから>~<ここまで>で囲んだ部分をコピーして、任意の順番で自分が追加したい項目を作ります。

★部分のcompanyを自分が追加したい項目名で書き換えましょう。

◆~◆の部分は、表示されるラベル部分です。PHPは翻訳のために使われているだけなので削除し、単純にラベルの文字を入力します。

例)

				<tr>
					<th>
						<label for="booking-name">追加する項目</label>
					</th>
					<td>
						<input id="booking-yoursubject" class="mts-fat" type="text" name="booking[client][yoursubject]" value="<?php echo esc_attr($client['yoursubject']) ?>" />
					</td>
				</tr>

カスタマイズ部分②予約データを登録

次に、MTS Simple Bookingのシステムにデータを登録する部分に項目を追加します。

カスタマイズ部分2-1

mtssb-booking.phpで「switch」と検索し、470行目から始まる部分に項目を追加します。

			switch ($keyname) {
				case 'yoursubject' : //これを追加
				case 'company' :
				case 'email' :
				case 'postcode' :

1行追加するだけです。

カスタマイズ部分2-2

次に同じファイルで「新しい予約」を検索し、そのあとの559行目から始まる部分に項目を追加します。


	/**
	 * 新しい予約
	 *
	 */
	public function new_booking($daytime=0, $article_id=0) {

		$new = array(
			'booking_id' => 0,
			'booking_time' => $daytime == 0 ? mktime(0, 0, 0, date_i18n('n'), date_i18n('j'), date_i18n('Y')) : $daytime,
			'article_id' => $article_id,
			'user_id' => 0,
			'number' => 0,
			'confirmed' => 0,
			'parent_id' => 0,
			'options' => null,
			'client' => array(
				//★この中に追加する
				'yoursubject' => '', //これを追加
				'company' => '',
				'name' => '',
				'furigana' => '',
				'birthday' => null,
				'gender' => '',
				'email' => '',
				'postcode' => '',
				'address1' => '',
				'address2' => '',
				'tel' => '',
				'adult' => 1,
				'child' => 0,
				'baby' => 0,
				'car' => 0,
			),
			'note' => '',
		);

		return $new;
	}

カスタマイズ部分③予約カレンダー:指定日:予約詳細

mtssb-calender-admin.phpで「booking-detail」と検索し、テーブルに項目を追加します。

		<table class="form-table booking-detail">
			<tr>
				<th>◆<?php _e('Article Name', $this->domain) ?>◆</th>
				<td><?php echo $article['★name'] ?></td>
			</tr>
      <!-- ここから -->
			<tr>
				<th>自分の追加する項目名</th>
				<td><?php echo $article['yoursubject'] ?></td>
			</tr>
      <!-- ここまで -->
			<tr>
				<th><?php _e('Date Time', $this->domain) ?></th>
				<td><?php echo $datestr . date(' H:i', $this->booking['booking_time']) ?></td>
			</tr>

前と同様、<ここから>~<ここまで>をコピペして、◆~◆部分は削除して日本語で項目名を、★部分は半角英語の項目名に書き換えます。

このときついでに要らない項目をコメントアウトしておくと邪魔な表示がなくなって良いです。

			<!-- <tr>
				<th><?php _e('Number', $this->domain) ?></th>
				<td><?php foreach ($count as $key => $val) {
						echo '<div class="number-person">' . __(ucwords($key), $this->domain) . '<br />'
						 . $this->booking['client'][$key] . '</div>';
					 } ?></td>
				</td>
			</tr> -->

ちなみにコメントアウトは「Ctrl+/」のショートカットで出来ます。

カスタマイズ部分④予約メールの本文出力

mtssb-mail.phpの「予約メールの本文生成」を検索して、131行目辺りから始まる部分にコードを追加します。


	/**
	 * 予約メールの本文生成
	 *
	 */
	private function _booking_content($booking, $template) {
		global $mts_simple_booking;

		$controls = $mts_simple_booking->oBooking_form->getControls();
		$article = $mts_simple_booking->oBooking_form->getArticle();
		$client = &$booking['client'];

		$body = apply_filters('booking_form_number_title', '[ご予約]', 'mail') . "\n"
		 . "{$article['name']}\n"
		 . apply_filters('booking_form_date_title', '日時:') . apply_filters('booking_form_date', date('Y年n月j日 H:i', $booking['booking_time']), $booking['booking_time']) ."\n"
		 . apply_filters('booking_form_date_number', '人数:')//★この下に追加する場合「;」を消す
		 //ここに追加する場合
		 . apply_filters('booking_form_yoursubject', '相談目的') . ":{$client['yoursubject']}\n"
		 . apply_filters('booking_form_yoursubject2', '相談目的') . ":{$client['yoursubject22']}\n";//追加した後「;」で閉じる

		foreach ($controls['count'] as $key => $val) {
			if (0 < $client[$key]) {
				$body .= apply_filters('booking_form_count_label', __(ucwords($key), $this->domain)) . " $client[$key]" . ($key == 'car' ? '台' : '名') . ', ';
			}
		}
		if (substr($body, -2) == ', ') {
			$body = substr($body, 0, -2);
		}
		$body .= "\n";

		// 連絡先
		$column = $template['column'];
		$body .= "\n" . apply_filters('booking_form_client_title', '[連絡先]', 'mail') . "\n";
		if (0 < $column['company']) {
			$body .= apply_filters('booking_form_company', '会社名') . ":{$client['company']}\n";
		}
		if (0 < $column['name']) {
			$body .= apply_filters('booking_form_name', '名前') . ":{$client['name']}\n";
		}
		if (0 < $column['furigana']) {
			$body .= apply_filters('booking_form_furigana', 'フリガナ') . ":{$client['furigana']}\n";
		}
		if (0 < $column['email']) {
			$body .= apply_filters('booking_form_email', 'E-Mail') . ":{$client['email']}\n";
		}
		if (0 < $column['postcode']) {
			$body .= apply_filters('booking_form_postcode', '郵便番号') . ":{$client['postcode']}\n";
		}
		if (0 < $column['address']) {
			$body .= apply_filters('booking_form_address', '住所') . ":{$client['address1']}";
			if (!empty($client['address2'])) {
				$body .= " {$client['address2']}";
			}
			$body .= "\n";
		}
		if (0 < $column['tel']) {
			$body .= apply_filters('booking_form_tel', '電話番号') . ":{$client['tel']}\n";
		}
		//◆ここに追加する場合
		if (0 < $column['yoursubject']) {
			$body .= apply_filters('booking_form_yoursubject', '追加する項目') . ":{$client['yoursubject']}\n";
		}
		//ここまでで1項目

		// 連絡事項
		if (!empty($booking['note'])) {
			$body .= "\n" . apply_filters('booking_form_message_title', '[連絡事項]', 'mail') . "\n";
			$body .= $this->_form_message($booking['note']);
		}

		//▲初心者はここに追加がおすすめです。
		if (!empty($booking['yoursubject'])) {
			$body .= "\n" . '[追加する項目]' . "\n";
			$body .= $this->_form_message($booking['yoursubject']);
		}	
		//ここまでで1項目

		$body .= "\n\n";

		return $body;
	}

$bodyの中に追加した順番にメールの本文が出力されます。

★の所に追加すると、メールの[ご予約]という見出しの予約情報の下に追加されます。

★の所に追加する場合、echoするときのように「.」で繋げて出力部分を記述している形です。

◆の所に追加すると、[連絡先]の見出しの下の連絡先情報の下に追加されます。

◆の所に追加する場合、「$body .= 追加する内容; 」の形で追加していきます。

自分で見出しを追加したい場合は、区切る部分でこの記述を追加すれば見出しに出来ます。

$body .= "\n" . [自分の見出し] . "\n";

改行コードは「\n」ですね。

ここの仕組みがわかる方なら、メールの出力を自由にカスタマイズできます。

▲仕組みがよくわからない方、面倒くさい方は一番下の初心者向け追加方法を利用して追加しましょう。

カスタマイズ部分⑤設定:予約メール:入力項目設定

mtssb-settings-admin.phpの「不要」で検索すると見つかる部分にコードを追加します。

			'reserve' => array(
				'column' => array(		// 0:不要 1:必須 2:任意
					'yoursubject' => 1, //これを追加
					'company' => 1,
					'name' => 1,
					'furigana' => 2,
					'email' => 1,
					'postcode' => 2,
					'address' => 2,
					'tel' => 1,
				),

設定画面のところです。番号はあとで設定画面から変えるので適当でOK

カスタマイズ部分⑥フォームのカスタマイズ

いよいよ、mtssb-booking-form.phpのカスタマイズです。例えば「client-tel」と入力すると、電話番号入力部分のコードが発見できるので、任意の場所に自分の項目のフォーム項目を追加しましょう。

フォーム部分は488行目から、入力部分は「booking_client-fieldset」で見つかる514行目からあります。

		<?php if (0 < $this->clcols['address']) : ?><tr>
			<th><label for="client-address1"><?php echo apply_filters('booking_form_address', '住所'); echo $this->clcols['address'] == 1 ? $this->_require_message() : '' ?></label></th>
			<td>
				<input id="client-address1" class="content-text fat" type="text" name="booking[client][address1]" value="<?php echo esc_html($client['address1']) ?>" maxlength="100" /><br />
				<input id="client-address2" class="content-text fat" type="text" name="booking[client][address2]" value="<?php echo esc_html($client['address2']) ?>" maxlength="100" />
			<?php if (isset($this->errmsg['address'])) : ?><div class="error-message"><?php echo $this->errmsg['address'] ?></div><?php endif; ?></td>
		</tr><?php endif; ?>
		<!-- ここから -->
		<?php if (0 < $this->clcols['tel']) : ?><tr>
			<th><label for="client-tel"><?php echo apply_filters('booking_form_tel', '電話番号'); echo $this->clcols['tel'] == 1 ? $this->_require_message() : '' ?></label></th>
			<td>
				<input id="client-tel" class="content-text medium" type="text" name="booking[client][tel]" value="<?php echo esc_html($client['tel']) ?>" maxlength="20" />
			<?php if (isset($this->errmsg['tel'])) : ?><div class="error-message"><?php echo $this->errmsg['tel'] ?></div><?php endif; ?></td>
		</tr><?php endif; ?>
<!-- ここまでをコピペ -->
		<!-- ここから -->
		<?php if (0 < $this->clcols['★tel']) : ?><tr>
			<th><label for="client-★tel"><?php echo apply_filters('booking_form_★tel', '★電話番号'); echo $this->clcols['★tel'] == 1 ? $this->_require_message() : '' ?></label></th>
			<td>
				<input id="client-★tel" class="content-text medium" type="text" name="booking[client][★tel]" value="<?php echo esc_html($client['★tel']) ?>" maxlength="20" />
			<?php if (isset($this->errmsg['★tel'])) : ?><div class="error-message"><?php echo $this->errmsg['★tel'] ?></div><?php endif; ?></td>
		</tr><?php endif; ?>
<!-- ここまでをコピペ -->
	</table>
	</fieldset>

フォーム項目の塊を見つけたら、コピペして★部分をすべて書き換えます。

		<!-- ここから -->
		<?php if (0 < $this->clcols['yoursubject']) : ?><tr>
			<th><label for="client-yoursubject"><?php echo apply_filters('booking_form_yoursubject', '追加する項目'); echo $this->clcols['yoursubject'] == 1 ? $this->_require_message() : '' ?></label></th>
			<td>
				<input id="client-yoursubject" class="content-text medium" type="text" name="booking[client][yoursubject]" value="<?php echo esc_html($client['yoursubject']) ?>" maxlength="20" />
			<?php if (isset($this->errmsg['yoursubject'])) : ?><div class="error-message"><?php echo $this->errmsg['yoursubject'] ?></div><?php endif; ?></td>
		</tr><?php endif; ?>
<!-- ここまでをコピペ -->

こんな感じ。

この部分はただのフォームなので、エラーチェックやrequire_message、name属性やidなどをきちんと他項目と同じように設定していれば、HTMLの構造自体はいくらでも変えてOKです。

例えばドロップダウンにするならこんな感じ

		<?php if (0 < $this->clcols['sex']) : ?>
			<label><?php echo apply_filters('booking_form_sex', '性別'); echo $this->clcols['sex'] == 1 ? $this->_require_message() : '' ?></label>
				<select name="booking[client][sex]" class="content-dropdown midium" id="client-sex" aria-required="true" aria-invalid="false">
					<option value="">---</option>
					<option value="男性" <?php selected( $client['sex'], '男性' ); ?>>男性</option>
					<option value="女性" <?php selected( $client['sex'], '女性' ); ?>>女性</option>
					<option value="その他" <?php selected( $client['sex'], 'その他' ); ?>>その他</option></select>
			<?php if (isset($this->errmsg['sex'])) : ?><div class="error-message"><?php echo $this->errmsg['sex'] ?></div><?php endif; ?>
		<?php endif; ?>

カスタマイズ部分⑦確認画面のカスタマイズ

次に同じファイルの2個目の「client-tel」のところ、660行目から始まる予約確認フォームに自分の項目を追加します


		<?php if (0 < $this->clcols['address']) : ?><tr>
			<th><?php echo apply_filters('booking_form_address', '住所') ?></th>
			<td>
				<?php echo esc_html($client['address1']) . '<br />' . esc_html($client['address2']) ?>
				<input type="hidden" name="booking[client][address1]" value="<?php echo esc_html($client['address1']) ?>" />
				<input type="hidden" name="booking[client][address2]" value="<?php echo esc_html($client['address2']) ?>" />
			</td>
		</tr><?php endif; ?>
		<!-- ここから -->
		<?php if (0 < $this->clcols['★tel']) : ?><tr>
			<th><?php echo apply_filters('booking_form_★tel', '★電話番号') ?></th>
			<td>
				<?php echo esc_html($client['★tel']) ?>
				<input type="hidden" name="booking[client][★tel]" value="<?php echo esc_html($client['★tel']) ?>" />
			</td>
		</tr><?php endif; ?>
		<!-- ここまでをコピペ -->

こちらも同様、コピペして★部分を書き換えればOKです。