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

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

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

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

PHP

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

プラグイン

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

Q&A

解決済

1回答

5502閲覧

Wordpressプラグインの改造でくじけています。PHPについて教えてください。

rira

総合スコア5

WordPress

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

PHP

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

プラグイン

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

0グッド

0クリップ

投稿2017/05/19 03:30

編集2017/05/19 03:52

###前提・実現したいこと
WordPressにて、「MTS simple booking C」というプラグインを使用しております。予約システムのプラグインで、こちらで予約ページを作成しています。予約ページは、【月間カレンダー】→【当日の受付時間】→【連絡先入力】というページ遷移になっております。

今回お聞きしたいのは、【当日の受付時間】につきましてです。
クラス名「day-left」と「day-right」があり、day-leftは当日の受付時間を表示(リンクなし)、day-rightは当日の空きを示し、予約の空きがあれば○や△マークが出て連絡先入力画面へ移れるリンクが貼られ、空きなしであれば×が出てリンクが貼られないようになっているかと思います。(これも捉え方が間違っているかもしれません・・・。)美容院や病院の予約サイトのようなイメージです。

【当日の受付時間】ページの空き状況の表示が不要な為、
●1列にして時間の表示のみにしたい
●かつ、時間をクリックして連絡先入力画面に移るようにしたい
と考えております。

しかし、どの部分を変えれば良いのかわからず、行き詰まっております。
以下が該当のコードと考えています。

###該当のソースコード

* $daytime unix time * $params ショートコードパラメータ */ private function _daily_schedule($daytime, $params) { // スケジュールキー名 $key_name = MTS_Simple_Booking::SCHEDULE_NAME . date_i18n('Ym', $daytime); // 対象日付の予約カウントデータを読込む $this->reserved = $this->get_reserved_day_count($daytime); ob_start(); ?> <?php foreach ($this->articles as $article_id => &$article) : $this->schedule[$article_id] = get_post_meta($article_id, $key_name, true); // 予約クローズなら何も表示しない if (!$this->schedule[$article_id][date('d', $daytime)]['open']) continue; ?><div class="day-calendar"> <?php echo apply_filters('mtssb_day_title', "<h3>{$article['name']}</h3>", $article['name']) ?> <?php echo apply_filters('mtssb_day_caption', '<p>' . date(__('F j, Y', $this->domain), $daytime) . ' (' . __(date('D', $daytime)) . ')' . '</p>', $daytime) ?> <table> <tr> <th class="day-left"><?php echo apply_filters('mtssb_daily_time_title', __('Time', $this->domain)) ?></th> <th class="day-right"><?php echo apply_filters('mtssb_daily_booking_title', __('Booking', $this->domain)) ?></th> </tr> <?php foreach ($article['timetable'] as $time) : ?> <tr> <th class="day-left"><?php echo apply_filters('mtssb_time_header', date('H:i', $time), $time) ?></th> <td class="day-right"><?php $this->_reservation_of_the_article($article_id, $article, $daytime + $time, $this->schedule[$article_id][date_i18n('d', $daytime)]) ?></td> </tr><?php endforeach; ?> </table> </div><?php endforeach; ?> <?php echo apply_filters('mtssb_daily_message_after', '', $params['type']) ?> <?php return ob_get_clean(); } /** * 予約の詳細表示 * */ protected function _reservation_of_the_article($article_id, &$article, $thetime, $schedule) { global $mts_simple_booking; // 予約ページのURL $form_link = $mts_simple_booking->get_permalink_by_slug(MTS_Simple_Booking::PAGE_BOOKING_FORM); $rsvd_number = $rsvd_count = 0; // 予約受付開始時刻の確認 $mark = 'disable'; if ($this->today_time != $this->start_day_time || $this->start_time < $thetime) { if (isset($this->reserved[$thetime][$article_id])) { $rsvd_number = $this->reserved[$thetime][$article_id]['number']; $rsvd_count = $this->reserved[$thetime][$article_id]['count']; } if ($article['restriction'] == 'capacity') { $capacity = $article['capacity'] + intval($schedule['delta']); $capacity_rate = ($capacity - $rsvd_number) * 100 / ($capacity ? $capacity : 1); //echo sprintf("%d/%d人 残:%d%\n", $rsvd_number, $capacity, $capacity_rate); } else { $quantity = $article['quantity'] + intval($schedule['delta']); $quantity_rate = ($quantity - $rsvd_count) * 100 / ($quantity ? $quantity : 1); //echo sprintf("%d/%d件 残:%d%\n", $rsvd_count, $article['quantity'] + intval($schedule['delta']), $quantity_rate); } if ($article['restriction'] == 'capacity') { if ($this->controls['vacant_rate'] < $capacity_rate) { $mark = 'vacant'; } else if ($capacity_rate <= 0) { $mark = 'full'; } else { $mark = 'low'; } // 席数(人数)残数 $disp_number = $capacity - $rsvd_number; } else { if ($this->controls['vacant_rate'] < $quantity_rate) { $mark = 'vacant'; } else if ($quantity_rate <= 0) { $mark = 'full'; } else { $mark = 'low'; } // 予約件数残数 $disp_number = $quantity - $rsvd_count; } } // リンク表示(記号または残数) echo "<div class=\"calendar-mark $mark" . (empty($class) ? '' : " $class") . '">'; if ($mark == 'vacant' || $mark == 'low') { if (((1440 <= $this->controls['start_accepting'] && $this->start_day_time <= $thetime) || $this->start_time < $thetime) && $this->controls['available']) { echo '<a class="booking-timelink" href="' . esc_url(add_query_arg(array('aid' => $article_id, 'utm' => $thetime), $form_link)) . '">'; echo $this->_daily_mark($disp_number, $mark) . '</a>'; } else { echo $this->_daily_mark($disp_number, $mark); } } else if ($mark == 'full') { echo $this->controls['full_mark']; } else { echo $this->controls['disable']; } echo '</div>'; } /** * 予約当日の時間割マーク表示 * */ protected function _daily_mark($number, $mark) { $output = empty($this->controls[$mark . '_mark']) ? $number : $this->controls[$mark . '_mark']; return apply_filters('mtssb_daily_mark', $output, $number); } }

###試したこと
ソースをベタ貼りしてしまい申し訳ありません。
時間割マーク表示の部分を削除して、リンクを貼らせる部分をday-leftの部分に移動させる?など考えて、何度も読み返し試そうとしましたが、試す→ページが表示されなくなるのを繰り返しています。PHP初心者なもので調べてもさっぱり分からなく、こちらのサイトにたどり着きました。

長文失礼いたしました。
どなたかお分かりでいらっしゃれば教えて頂ければと存じます。
よろしくお願い申し上げます。

###補足情報(言語/FW/ツール等のバージョンなど)
PHP5.6

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

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

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

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

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

kei344

2017/05/19 03:31

質問文のコードはコードブロックで囲んでいただけませんか? ```(バッククオート3つ)で囲み、前後に改行をいれるか、コードを選択して「<code>」ボタンを押すとコードブロックになります。
rira

2017/05/19 04:00

大変失礼いたしました。コードブロックで囲みました。
rira

2017/05/19 04:00

すみません、私は学生です。
harashow1701

2017/05/19 05:01 編集

php初心者なのにプラグインの改造をいきなり行う理由って、何かあるんですか? 普通に考えたら、まずはphpを勉強するという手順を先に踏むのが適切な流れだと思いますが。
rira

2017/05/19 05:17

サイトを作る必要があり作っています。初心者ですがこれ以外の部分は色々とこのプラグインの改造に成功しています。勉強していますがそれだけでは十分に理解できないので、サイトを任されているのをいい機会に実際にやったり人に聞いたりして学んでいます。分からず本当に困っていたので質問してまでです。勉強して分からないから質問している方がほとんどだと思うのですが、こちらのサイトで質問するときは経緯などを説明する必要があるのでしょうか。
harashow1701

2017/05/19 05:20

今の質問内容からですと、何も分からない人が丸投げしてるようにしか見えないんですよね。何を試して、その結果、何が出来て、何が出来なかったのかなど、そういった情報もないので。
harashow1701

2017/05/19 05:22 編集

低評価ボタンを押すと、やって欲しいことの丸投げみたいな理由が選べると思うんですけど、こちらの質問内容は情報不足から、その理由で低評価を押されかねない内容になってます。
harashow1701

2017/05/19 05:33 編集

「どの部分を変えれば良いのかわからず、行き詰まっております。 PHP初心者なので調べてもさっぱり。」と私には何も分かりませんという状況が書かれてるだけなので、この場合の適切な回答はPHPを勉強しましょうになると思います。
rira

2017/05/19 06:05 編集

ヒントだけでも頂ければとそのページは読んで投稿したつもりですが、ご迷惑をお掛けしたようで申し訳ありませんでした。調べて該当すると思うソースを消したり移動させたりしてやってみたのですが、変えた内容と結果を全て記録していたわけではないのでここでは質問できないようです。自分なりに考えていたんですが、1人でも不快に思う方がいれば申し訳ないので、削除依頼します(追記:ご回答頂いたので取り消します)。
harashow1701

2017/05/19 05:36

不快には感じてないので大丈夫ですが、小さく課題を分解して、質問を小分けにされた方が宜しいかと思いますよ。回答もつきやすくなると思いますし。
rira

2017/05/19 06:04

アドバイスありがとうございます。次回より気をつけたいと思います。
guest

回答1

0

ベストアンサー

まず、プラグインをカスタマイズすることはお勧めしません。なぜならアップデート(更新)が難しくなるからです。プラグインのアップデートの際に上書きされてしまうので、毎回コードを書き換えすることになり、メンテナンス性が落ちます。また、本体のアップデートにより、プラグインが使用している関数の置き換え/廃止などが起こる事もあります。(ちなみにどちらも更新しないのはもってのほかです)
※ このプラグインは公式プラグインディレクトリにて公開されていないため、そもそも自動アップデートが使用できないので、お勧めできませんが。

プラグインの中には一部の動作(表示)にフックをかける機構を設けていることもあり、通常はそこでカスタマイズするのですが、お使いのプラグインは書かれている部分についてそういう設計にはなっていません。


「真っ白になる」についてはデバッグモードにすればエラーが出るはずです。

【WordPress初心者におすすめ!デバッグモードの使い方 | Mignon Style】
http://mignonstyle.com/debug-mode/


「どの部分を変えたら良いのかわからない」というのは「表示部分を書いているコードを書き換えればよい」と回答することになります。学生さんとのことなので具体的には書きませんが _reservation_of_the_article 関数に引数をつけられるようにすればたぶん出来るだろうな、という予想だけ書いておきます。

投稿2017/05/19 05:38

kei344

総合スコア69364

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

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

rira

2017/05/19 06:02

ありがとうございます!使用するプラグインについても考えてみたいと思います。デバッグモードの使い方にもありがとうございました。 分かりやすく助かりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問