質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

Q&A

解決済

2回答

4547閲覧

WordPressプラグイン「EventManager」の予約選択方法をラジオボタンにカスタマイズしたい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

プラグイン

プラグイン(plug-in)は、ソフトウェアアプリケーションの機能拡張の為に開発された、一組のソフトウェアコンポーネントのことを指します。

0グッド

0クリップ

投稿2016/08/25 18:16

編集2016/11/12 17:02

###前提・実現したいこと
現在WordPressプラグイン「EventManager」を利用した予約サイトを作っています。
プラグイン公式サイト:http://wp-events-plugin.com/

通常の仕様として、作成した予約枠は、SELECTタグを使って出力されていますが、
製作中のサイトの運用方法を考えると、ラジオボタンでの出力が望ましく、
カスタマイズを試みています。

HTMLを変更する事で、ラジオボタンとして表示させる事は出来ましたが、
システム的に理想の挙動を実装できません。

プログラムの知識が乏しく、そもそも実装が不可能であるのかも判断ができません。

何卒ご教授くださいますようお願いいたします。

###発生している問題・エラーメッセージ

INPUTタグ内のNAME属性にプラグインでの予約状況を変更するための数値が出力されます。
その為、ラジオボタンがグループ化せず、意図する機能が実装できません。

この出力内容を変更すれば、グループ化しますが、
そうすると、予約状況の変更ができない状況です。

システムで出力しているソースが下記になります。

<table class="em-tickets" cellspacing="0" cellpadding="0"> <tr> <th class="em-bookings-ticket-table-type">チケットの種類</th> <th class="em-bookings-ticket-table-spaces">定員</th> </tr> <tr class="em-ticket" id="em-ticket-1"> <td class="em-bookings-ticket-table-type">第1部</td> <td class="em-bookings-ticket-table-spaces"><input type="radio" name="em_tickets[1][spaces]" class="em-ticket-select" id="em-ticket-spaces-1" value="1"></td> </tr> <tr class="em-ticket" id="em-ticket-2"> <td class="em-bookings-ticket-table-type">第2部</td> <td class="em-bookings-ticket-table-spaces"><input type="radio" name="em_tickets[2][spaces]" class="em-ticket-select" id="em-ticket-spaces-2" value="1"></td> </tr> <tr class="em-ticket" id="em-ticket-3"> <td class="em-bookings-ticket-table-type">第3部</td> <td class="em-bookings-ticket-table-spaces"><input type="radio" name="em_tickets[3][spaces]" class="em-ticket-select" id="em-ticket-spaces-3" value="1"></td> </tr> </table>

###該当箇所と思しきソースコード [em-ticket.php]

function get_spaces_options($zero_value = true, $default_value = 0){ $available_spaces = $this->get_available_spaces(); if( $this->is_available() ) { $min_spaces = $this->get_spaces_minimum(); if( $default_value > 0 ){ $default_value = $min_spaces > $default_value ? $min_spaces:$default_value; }else{ $default_value = $this->is_required() ? $min_spaces:0; } ob_start(); ?> <input type="radio" name="em_tickets[<?php echo $this->ticket_id ?>][spaces]" class="em-ticket-select" id="em-ticket-spaces-<?php echo $this->ticket_id ?>" value="1"> <?php return apply_filters('em_ticket_get_spaces_options', ob_get_clean(), $zero_value, $default_value, $this); }else{ return false; } }

###該当箇所と思しきソースコード [em-booking.php]

function get_post( $override_availability = false ){ $this->tickets_bookings = new EM_Tickets_Bookings($this->booking_id); do_action('em_booking_get_post_pre',$this); $result = array(); $this->event_id = $_REQUEST['event_id']; if( isset($_REQUEST['em_tickets']) && is_array($_REQUEST['em_tickets']) && ($_REQUEST['em_tickets'] || $override_availability) ){ foreach( $_REQUEST['em_tickets'] as $ticket_id => $values){ //make sure ticket exists if( !empty($values['spaces']) || $override_availability ){ $args = array('ticket_id'=>$ticket_id, 'ticket_booking_spaces'=>$values['spaces'], 'booking_id'=>$this->booking_id); if($this->get_event()->get_bookings()->ticket_exists($ticket_id)){ $EM_Ticket_Booking = new EM_Ticket_Booking($args); $EM_Ticket_Booking->booking = $this; if( !$this->tickets_bookings->add( $EM_Ticket_Booking, $override_availability ) ){ $this->add_error($this->tickets_bookings->get_errors()); } }else{ $this->errors[]=__('You are trying to book a non-existent ticket for this event.','events-manager'); } } } $this->booking_comment = (!empty($_REQUEST['booking_comment'])) ? wp_kses_data(stripslashes($_REQUEST['booking_comment'])):''; //allow editing of tax rate if( !empty($this->booking_id) && $this->can_manage() ){ $this->booking_tax_rate = (!empty($_REQUEST['booking_tax_rate']) && is_numeric($_REQUEST['booking_tax_rate'])) ? $_REQUEST['booking_tax_rate']:$this->booking_tax_rate; } //recalculate spaces/price $this->get_spaces(true); $this->calculate_price(); //get person $this->get_person(); //re-run compatiblity keys function $this->compat_keys(); //depricating in 6.0 } return apply_filters('em_booking_get_post',count($this->errors) == 0,$this); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

まず、プラグインを直接書き換えるのはやめたほうが良いです。(そのためにフィルターフックと言う機構が用意されています)

理由は単純で、アップデートが出来なくなるからです。プラグインアップデートのたびに稼働中のサイトを止めてプラグインを書き換えるつもりが有るのならがんばってくださいと言うしかないですが、メンテナンスコストがあまりにも高いのでお勧めできません。

たとえば、書かれている関数 get_spaces_options には em_ticket_get_spaces_options と言うフィルターがあり、出力される前のHTMLを書き換えることが可能です。

PHP

1function my_em_ticket_get_spaces_options( $html, $zero_value, $default_value, $obj ) { 2 $res_html = ''; 3 $ticket_id = $obj->ticket_id; 4 5 /* 略 */ 6 7 return $res_html; // 8} 9add_filter( 'em_ticket_get_spaces_options', 'my_em_ticket_get_spaces_options', 10, 4 );

投稿2016/08/27 08:33

kei344

総合スコア69364

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/28 07:09

kei344様 いつもご指導くださりありがとうございます! まずは、そのフィルターフックを使ってカスタム出来るように作業を行ってみます。 そこで質問なのですが、フィルターフックを利用する際は、 テーマ内のfunction.phpに書き込めば良いのですよね???
kei344

2016/08/28 07:33

> テーマ内のfunction.phpに書き込めば良いのですよね? 基本的にそのようにします。テーマに関係なく複数サイトで使用する場合はまとめてプラグイン化する事もあります。 フックの引数の意味などは丁寧に説明しているサイトがいくつもあるので探してみてください。
退会済みユーザー

退会済みユーザー

2016/08/28 07:51

ありがとうございます! いつもの事ですが、もっと勉強します。。。 今後共、ご指導をお願いします。
kei344

2016/08/28 08:00

がんばってください!
退会済みユーザー

退会済みユーザー

2016/10/02 07:49

kei344様 ようやくですが、続きの作業をはじめました。 ひとまずテスト環境のテーマ内「function.php」に頂いたソースを貼り付け、 「/* 略 */」の部分には、「em-booking.php」のソースを抜粋して挿入しましたが、 システムの吐き出し部分にエラーが出てしまいます。 本件のカスタマイズは必須なのですが、 このままではいつ終われるかわかりません。 本件のカスタム作業を、仕事として依頼できないものでしょうか。。。
kei344

2016/10/03 08:00

> 本件のカスタム作業を、仕事として依頼できないものでしょうか 依頼頂けるのはとても光栄なのですが、teratail 上での依頼はこちらの都合で受けることが出来ません。 WordPressに強い制作会社様などへ依頼されるのが手早いと思います。お役に立てず申し訳ありません。
退会済みユーザー

退会済みユーザー

2016/10/04 06:33

承知いたしました。 ムリな事を言いまして申し訳有りませんでした。 今後共、ご指導のほどお願い致します。
guest

0

グループ化をするためにはラジオボタンのnameの値は揃えて、値はvalueに入れて下さい。

PHP

1<input type="radio" name="em_tickets" class="em-ticket-select" id="em-ticket-spaces-<?php echo $this->ticket_id ?>" value="<?php echo $this->ticket_id ?>">

検証はしていませんが、こんな感じになるのではないでしょうか。

投稿2016/08/26 02:14

bananacoffee

総合スコア260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/26 03:11

bananacoffee様 ご指導ありがとうございます。 value属性に値を入れることは試みたのですが、 それだと予約状況の変更が動作しませんでした。 今のところ確認できたのは、 予約状況を変更するために送信するべき情報として、 name属性に出力されている 「em_tickets」この文字列 「 [?] 」上記文字列に続く予約枠を作成した際に振られる、チケットIDの数字 「 [space] 」この文字列 この3点セットと、 value属性に出力される予約希望数を意味する数値です。 自分なりにも、value属性から必要情報を送信できれば、 解決すると想像していたのですが、現状ではname属性からの送信に限って反応するシステムになっているようなのです。
bananacoffee

2016/08/26 05:52 編集

なるほど・・・プラグインの仕様がそうだとするとちょっと面倒ですねぇ。。。 プラグイン側にラジオボタンの仕様がないのであれば、 ちょっと面倒ですがjavascriptで上から操作してしまったほうが早いかもしれません。 1. フォーム側はセレクトボックスでvisibility:hidden;などで枠外に設置しておく 2. 手なりでラジオボタンを設置。(nameは揃え、valueに1,2,3としておく) 3. javascript(jQuery)でラジオボタンの変更を検知して、対応するセレクトボックスにを選択状態にする。 という仕組みを作れれば行けそうですが・・・その辺りの作り方は分かりますでしょうか。 追記: 元のセレクトボックスの状態のデモをお見せいただければ、解説出来るかもしれません。
退会済みユーザー

退会済みユーザー

2016/11/12 17:04 編集

bananacoffee様 ご返信をありがとうございます! お恥ずかしながら、すでに知識の枠を超えております。。。 自身で何かの仕組みを作るスキルが無いのが現状です。 元データのデモを用意致しました。 本件質問時のDEMOページを書き換えていますので、 見比べることが出来ませんが、ご了承くださいませ。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問