wordpressで弁当の予約販売。「MTS Simple Booking C」カスタマイズ

「MTS Simple Booking C」をインストールして初期設定のままだと、人数の予約になっている。

これを今回は弁当の予約に変更してみる。

実際のサンプル予約画面はこちら

1.商品の追加。mtssb-settings-admin.phpの変更

mtssb-settings-admin.phpの512行目あたりにある 設定オプションデータの初期値に弁当A、弁当B、弁当Cを追加。
それぞれ、「bento_a」「bento_b」「bento_c」とした。

'reserve' => array(
      'column' => array(		// 0:不要 1:必須 2:任意
        'bento_a' => 2,
        'bento_b' => 2,
        'bento_c' => 2,
        'company' => 1,
        'name' => 1,
        'furigana' => 2,
        'email' => 1,
        'postcode' => 2,
        'address' => 2,

0:不要 1:必須 2:任意については、管理画面から変更ができるのでここではなんでも良い。

これを記載すると、WP管理画面の「予約システム」から「各種設定」、「予約メール」タブを見ると「bento_a」「bento_b」「bento_c」が追加されている事が確認できる。
「不要」以外を選択することで、予約フォームに「弁当」が表示さるが、この時点ではまだ表示されない。

2.予約フォームの変更

次に、「mtssb-booking-form.php」を開き、予約フォームの入力画面に「弁当_A」「弁当_B」「弁当_C」を追加する。ここでは519行目あたりにある予約フォームの「会社名」(company)の行をコピーして「弁当」にに変更していく。

<table>
    <?php if (0 < $this->clcols['company']) : ?><tr>
      <th><label for="client-company"><?php echo apply_filters('booking_form_company', '会社名'); echo $this->clcols['company'] == 1 ? $this->_require_message() : '' ?></label></th>
      <td>
        <input id="client-company" class="content-text medium" type="text" name="booking[client][company]" value="<?php echo esc_html($client['company']) ?>" maxlength="100" />
      <?php if (isset($this->errmsg['company'])) : ?><div class="error-message"><?php echo $this->errmsg['company'] ?></div><?php endif; ?></td>
    </tr><?php endif; ?>

上のコード、519行目のphp ifから524行目のphp endifまでをコピーして、下のコード511行目のtrとtableの間に挿入する。

<tr>
      <th><label for="client-adult">人数</label></th>
      <td>
        <?php foreach ($this->controls['count'] as $key => $val) : ?><div class="input-number"<?php echo $val != 1 ? ' style="display:none"' : '' ?>><?php
          $title = apply_filters('booking_form_count_label', __(ucwords($key), $this->domain));
         	if ($title != '') { echo "<label for=\"client-{$key}\">$title</label><br />"; }
        ?>
          <input id="client-<?php echo $key ?>" type="text" class="content-text small right" name="booking[client][<?php echo $key ?>]" value="<?php echo esc_html($client[$key]) ?>" maxlength="5" /> 
        </div><?php endforeach; ?>
        <?php if (isset($this->errmsg['count'])) : ?><div class="error-message"><?php echo $this->errmsg['count'] ?></div><?php endif; ?>
      </td>
    </tr>
  </table>
  </fieldset>

追加するコードは以下の通りに書き換えた

<?php if (0 < $this->clcols['bento_b']) : ?><tr class="is-bento" style="display: none;">
      <th><label for="client-bento_b"><?php echo apply_filters('booking_form_bento_b', '弁当B<span> 550円(税込)</span>'); echo $this->clcols['bento_b'] == 1 ? $this->_require_message() : '' ?></label></th>
      <td>
        <input id="client-bento_b" class="content-text small" type="number" name="booking[client][bento_b]" value="<?php echo esc_html($client['bento_b']) ?>" min="0" max="10" placeholder="0" />
      <?php if (isset($this->errmsg['bento_b'])) : ?><div class="error-message"><?php echo $this->errmsg['bento_b'] ?></div><?php endif; ?></td>
    </tr><?php endif; ?>

 

会社名のコードの「company」を、mtssb-settings-admin.phpで定義した「bento_a」に置き換え「booking_form_company', '会社名'」の「会社名」を「弁当A」に置き換えた。
さらに「type="text"」を「type="number"」に「maxlength="100"」を「min="0" max="10" placeholder="0"」に変更している。

そして「tr」にスタイルシートを記載。ここではクラス名を「is-bento」として弁当予約販売ページ、すなわち予約品目が「弁当」のページだけに表示する設定にした。

CSSの「is-bento」を有効にするために、488行目のform methodの次の行に追加のCSSを記載する。

<form method="post" action="<?php echo $url ?>">


  <fieldset id="booking-reservation-fieldset">
  <legend><?php echo apply_filters('booking_form_number_title', 'ご予約') ?></legend>
  <?php echo apply_filters('booking_form_number_message', '') ?>
  <table>
    <tr>
      <th>予約</th>

 

追記したCSSは以下の通り。

<?php 
  if($_GET["aid"] == 2699 || $this->article_id == 2699)     echo '<style>.is-num{position:fixed;left:-100%;}.is-bento{display:table-row !important;}.is-bento th{font-size:14px;}.is-bento span{line-height:1;padding-bottom:10px;font-size:12px;display:block !important;}</style>';
  ?>

 

「2699」は予約品目の弁当のIDになる。

人数をis-numと定義して、人数のクラスを追加した。

 

<tr class="is-num">
     <th><label for="client-adult">人数</label></th>

 

弁当をis-bentoと定義することで弁当のページで人数を非表示にできる。これで予約品目ごとの表示とした。

ここまでできると画面上で商品が表示される。

3.予約入力確認フォームの変更

同じファイル「mtssb-booking-form.php」のずっと下の行に

/**
* 予約入力確認フォームの表示
**/

という項目がある。そこで予約フォーム「予約確認」ボタンを押した次の画面「予約フォーム・入力確認」画面の編集を行う。

入力画面の作業と同じように「会社名」のコードをコピーして文字を置き換える。
挿入する場所は、予約人数の「/tr」の後ろ

コードは以下の通り。

<?php if (0 < $this->clcols['bnto_a']) : ?><tr class="is-bnto" style="display: none;">
   <th><?php echo apply_filters('booking_form_bnto_a', '弁当A<span>1個 450円(税込)</span>') ?></th>
   <td>
     <?php echo esc_html($client['bnto_a']) ?>
     <input type="hidden" name="booking[client][bnto_a]" value="<?php echo esc_html($client['bnto_a']) ?>" />
   </td>
 </tr><?php endif; ?>

 

「company」を「bento_a」、「会社名」を「弁当A」とし、trのクラスを「is-bento」とした。
同じように弁当Bと弁当Cも追加。

そしてform methodの次の行に以下のCSSを追加

<?php 
  if($this->article_id == 2699)     echo '<style>.is-num{position:fixed;left:-100%;}.is-bento{display:table-row !important;}.is-maki th{font-size:14px;}.is-bento span{line-height:1;padding-bottom:10px;font-size:12px;display:block !important;}</style>';
  
  ?>

 

4.mtssb-booking.phpの編集

「mtssb-booking.php」を開き商品を登録する。

ひとつめは、463行目付近の//クライアントデータのswitch keynameの部分にbento_a~cを追加する。

switch ($keyname) {
        case 'bento_a' :
        case 'bento_b' :
        case 'bento_c' :
        case 'company' :
        case 'email' :
        case 'postcode' :
        case 'address1' :
        case 'address2' :

 

同じく550行目付近の//新しい予約のところのclientに商品を登録する。

'parent_id' => 0,
      'options' => null,
      'client' => array(
          'bento_a' => '',
        'bento_b' => '',
        'bento_c' => '',
        'company' => '',
        'name' => '',
        'furigana' => '',
        'birthday' => null,
        'gender' => '',
        'email' => '',

 

5.予約確認メール、mtssb-mail.phpの編集

「mtssb-mail.php」を開き120行目あたりの/*** 予約メールの本文生成に商品名を追加する。

$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', '人数:') . "\n";
      
       //$body .= $booking;

     if($client['bento_a'] ||
     	$client['bento_b'] ||
      $client['bento_c']){

      if($client['bento_a'])	$body .= apply_filters('booking_form_bento_a', '弁当A:') . $client['bento_a'] . "\n";
      if($client['bento_b'])  $body .= apply_filters('booking_form_bento_b', '弁当B:') . $client['bento_b'] . "\n";
      if($client['bento_c'])  $body .= apply_filters('booking_form_bento_c', '弁当C:') . $client['bento_c'] . "\n";
     }else
    
    
    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' ? '台' : '名') . ', ';

 

弁当のみの予約なら人数は消去できるが、今回はレストランの予約と併用なので、人数に後ろに「. "\n"; 」を追記した。

6.管理画面予約リストの追加。mtssb-list-admin.phpを編集

まずは、260行目付近の/**リストカラム情報を追加
numberとarticle_idの間に追加する商品を記載する。

/**
   * リストカラム情報
   *
   */
  public function get_columns() {
    return array(
      'booking_id' => __('ID', $this->domain),
      'booking_time' => __('Booking Date', $this->domain),
      'name' => __('Name'),
      'number' => __('Number', $this->domain),
      'bento_a'      => __('弁当A', $this->domain),
      'bento_b'      => __('弁当B', $this->domain),
      'bento_c'      => __('弁当C', $this->domain),
      'article_id' => __('Article Name', $this->domain),
      'confirmed' => __('Confirmed', $this->domain),
      'created' => __('Date'),
    );
  }

このようになる。

次に290行目付近の* カラムデータのデフォルト表示にも商品を追加
以下のコードを「case number」と「case created」の間に挿入する。

case 'bento_a' :
				return $item['client']['bento_a'];
			case 'bento_b' :
				return $item['client']['bento_b'];
			case 'bento_c' :
				return $item['client']['bento_c'];

 

これによって予約リストの画面に商品が表示された。

7.管理画面予約カレンダーの編集

次は、カレンダー画面に表示させるために「mtssb-calendar-admin.php」を編集する。
mtssb-calendar-admin.phpの下のほう、521行目あたりのNumberの/trの後ろに次のコードを挿入

<tr>
        <th><?php _e('弁当A', $this->domain) ?></th>
        <td><?php echo esc_html($this->booking['client']['bento_a']) ?></td>
      </tr>

これを弁当A~Cの3つ分のコードを挿入した。

これで管理画面の予約システム、予約カレンダー指定日予約詳細の画面に商品が表示された。

これで全てのカスタムが完了。同じ弁当の商品数は増減できる。そして予約品目が異なる場合はCSSの「is-bento」のように切り分けが可能になるので他にも応用が可能である。

お電話でのお問い合わせ 090-3990-0645

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください