約1年前社会人サークルの方からパーティー管理用サイトの開発依頼がありました。実現方法を模索した結果、Events Manager(イベントマネージャ)プラグインを改良すれば何とかなりそうだという判断で進めましたが、予想以上に苦労することに。有料のPro版もありますがパーティー管理の助けにはならなさそうなので無料版で挑みました。このプラグインの特徴は以下の通りです。
- イベント管理用の各種プレースホルダーが準備されている
- 各種プレースホルダーをイベントリスト、イベントページのフォームに記載することで様式を柔軟に変更できる
- 必要に応じイベント属性を追加できる
これらはコードを改変することなく実現できる便利なカスタム機能です。プレースホルダーとは予約変数みたいなもので、例えば#_ATTENDEESLISTには予約完了した人のリストが格納されています。しかし、元々このプラグインで想定されているユースケースは映画館のチケット販売のように定員が決まっていてそれを大人・小人・シニア券などの券種で売りさばくものです。一方、パーティー管理では、男女別に定員を設定して残り席を把握する必要があります。では、まず出来上がったパーティー案内ページをご覧ください。
右側中央部の応募状況が男女別に表示されています。具体的には、席数のキャパシティに対して残りが3席以上のとき”受付中”、残り2席のとき”残り2名”、その後キャパシティの数十%増(パーティー毎に設定)までは”残り1名”、それを超すと”受付終了”と表示されます。これを実現すには、まず、WordPress管理画面 > イベント > 設定 > フォーマッティング > イベント でEvents Managerのイベントページのフォーマットを記述します。 ”単一のイベントページフォーマット”の箇所が- 男性:#_MALESPACESLEFT
- 女性:#_FEMALESPACESLEFT
- イベント関連: /plugins/events-manager/classes/em-event.php
- 場所関連: /plugins/events-manager/classes/em-location.php
- チケット関連: /plugins/events-manager/classes/em-ticket.php
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を改良して多様なイベント管理ができそうです。