Events Managerで独自プレースホルダーを追加する

約1年前社会人サークルの方からパーティー管理用サイトの開発依頼がありました。実現方法を模索した結果、Events Manager(イベントマネージャ)プラグインを改良すれば何とかなりそうだという判断で進めましたが、予想以上に苦労することに。有料のPro版もありますがパーティー管理の助けにはならなさそうなので無料版で挑みました。このプラグインの特徴は以下の通りです。

  • イベント管理用の各種プレースホルダーが準備されている
  • 各種プレースホルダーをイベントリスト、イベントページのフォームに記載することで様式を柔軟に変更できる
  • 必要に応じイベント属性を追加できる

これらはコードを改変することなく実現できる便利なカスタム機能です。プレースホルダーとは予約変数みたいなもので、例えば#_ATTENDEESLISTには予約完了した人のリストが格納されています。しかし、元々このプラグインで想定されているユースケースは映画館のチケット販売のように定員が決まっていてそれを大人・小人・シニア券などの券種で売りさばくものです。一方、パーティー管理では、男女別に定員を設定して残り席を把握する必要があります。では、まず出来上がったパーティー案内ページをご覧ください。

パーティー案内ページ 右側中央部の応募状況が男女別に表示されています。具体的には、席数のキャパシティに対して残りが3席以上のとき”受付中”、残り2席のとき”残り2名”、その後キャパシティの数十%増(パーティー毎に設定)までは”残り1名”、それを超すと”受付終了”と表示されます。これを実現すには、まず、WordPress管理画面 > イベント > 設定 > フォーマッティング > イベント でEvents Managerのイベントページのフォーマットを記述します。 Events Managerのイベントフォーマット設定 イベントページのフォーマット記述 ”単一のイベントページフォーマット”の箇所が
  • 男性:#_MALESPACESLEFT
  • 女性:#_FEMALESPACESLEFT
となっています。この#_MALESPACESLEFT(男性応募状況)と#_FEMALESPACESLEFT(女性応募状況)が今回追加した独自プレースホルダーです。当然ですが独自プレースホルダーはここに追加しただけでは動作しません。値を格納する処理コードを追記するのですが、その箇所はプレースホルダーの性質に依って変わります。大まかには以下の3つに分類されます。
  • イベント関連: /plugins/events-manager/classes/em-event.php
  • 場所関連: /plugins/events-manager/classes/em-location.php
  • チケット関連: /plugins/events-manager/classes/em-ticket.php
今回はイベント関連なのでem-event.phpのfunction output($format, $target=”html”)内で1700行辺りに以下のコードを追加します。これは#_MALESPACESLEFT(男性応募状況)のコードですので女性用も同様に記述します。
  case '#_MALESPACESLEFT':
    //This doesn't consider reserved (i.e. pending) bookings as 'booked'
    $booked = 0;
    $max = 0;
    foreach( $this->get_tickets()->tickets as $EM_Ticket ){
      if( $EM_Ticket->is_displayable() ) {
        if( wp_kses_data($EM_Ticket->ticket_name) == '男性'){
          $booked = $EM_Ticket->get_booked_spaces();
          $max = $EM_Ticket->ticket_spaces;
        }
      }
    }
    global $EM_Event;
    $replace = "受付終了";
    if ($max > $booked) {
      $cap = $EM_Event->attributes['men_capacity'];
      $left = ($cap>$booked) ? $cap-$booked : 1;
      if ($left>2) {
        $replace = "受付中";
      } else {
        $replace = "残り".$left."名";
      }						
    }
    break;

このように独自プレースホルダーを自在に操ることができれば無料版のEvents Managerを改良して多様なイベント管理ができそうです。


コメントを残す

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

ブログに戻る