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

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

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

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

PHP

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

Q&A

解決済

2回答

3816閲覧

WordPressのオリジナルテーマでお問い合わせフォームに入力した値を確認画面に反映させたい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

PHP

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

0グッド

0クリップ

投稿2020/02/26 01:13

編集2020/02/26 01:16

WordPressでお問い合わせフォームの確認画面を作成したいです。

お問い合わせフォームで送信ボタンをクリック→確認画面へ遷移→確認画面で送信ボタンをクリック→メール送信、という流れにしたいのですが、確認画面への遷移が上手くいきません。

WordPressの固定ページには確認画面のページを登録しており、プレビューで問題なく表示されます。
また、お問い合わせ画面で送信ボタンに<a></a>でリンクを貼れば問題なく確認画面へ遷移しますが、当たり前ですがお問い合わせフォームに入力した値の表示は出ていません。

現状のソース

お問い合わせフォーム(page-contact.php)

PHP

1<form action="../wp-content/themes/HomePage/page-contact_verification.php" method="post"> 2 3<div class="contact_form"> 4 <div class="contact_form_left"> 5 <p>氏名</p> 6 <input class="ef" type="text" name="name" id="name"> 7 <p>会社名</p> 8 <input class="ef" type="text" name="company" id="company"> 9 <p>メールアドレス</p> 10 <input class="ef" type="text" name="mail" id="mail"> 11 <p>電話番号</p> 12 <input class="ef" type="text" name="tell" id="tell"> 13 </div> 14 <div class="contact_form_right"> 15 <p>お問い合わせ内容</p> 16 <textarea class="ef word" type="text" name="message" id="message" required></textarea> 17<!-- 応募ボタン --> 18 <div class="apply_button"> 19 <button class="mailForm__submit" type="submit" id="apply">送信</button> 20 </div> 21 </div> 22</div> 23</form>

確認画面(page-contact_verification.php)

PHP

1<form class="mailForm" action="../wp-content/themes/HomePage/page-contact_complete.php" method="post"> 2<div class="form"> 3<!-- 問い合わせ欄 --> 4 <h3>入力内容確認</h3> 5 <p>以下の内容で送信します。</p> 6 <p>よろしければ「送信」ボタンを押してください。</p> 7 <table> 8 <tr> 9 <td class="form_title">氏名</td> 10 <td><?php echo($_POST["name"]); ?></td> 11 </tr> 12 <tr> 13 <td class="form_title">会社名</td> 14 <td><?php echo($_POST["company"]); ?></td> 15 </tr> 16 <tr> 17 <td class="form_title">メールアドレス</td> 18 <td><?php echo($_POST["mail"]); ?></td> 19 </tr> 20 <tr> 21 <td class="form_title">電話番号</td> 22 <td><?php echo($_POST["tell"]); ?></td> 23 </tr> 24 <tr> 25 <td class="form_title">メッセージ本文</td> 26 <td><?php echo($_POST["message"]); ?></td> 27 </tr> 28 </table> 29 <!-- 応募ボタン --> 30 <div class="apply_button"> 31 <a href="<?php echo home_url( 'contact' ); ?>"> 32 <button type="submit" id="return">修正する</button> 33 </a> 34 35 <div class="apply_button"> 36 <input type="hidden" id="token" name="token" value="1234567" /> 37 <button class="mailForm__submit" type="submit" id="apply">送信</button> 38 </div> 39 </div> 40</div> 41</form>

page-contact_complete.phpはメール送信用のファイルです。
page-contact_verification.phpは直接確認画面を表示して送信をクリックすればpage-contact_complete.phpが動きます。
この状態でお問い合わせフォームより送信ボタンを押すと下記のエラーが出ます。

「Fatal error: Uncaught Error: Call to undefined function get_header() in /home/cbpz5aqnchh/cbpz5aqnchh.wp.xdomain.jp/public_html/wp-content/themes/HomePage/page-contact_verification.php:4 Stack trace: #0 {main} thrown in /home/cbpz5aqnchh/cbpz5aqnchh.wp.xdomain.jp/public_html/wp-content/themes/HomePage/page-contact_verification.php on line 4」

page-contact.phpとpage-contact_verification.phpは同じ階層にあります。
themesの中にオリジナルテーマのフォルダを作成し、そこにフォルダ分けせずにすべて入れています。

どうすればお問い合わせフォームに入力した値が確認画面に反映され、且つ問題なくページが表示されるのでしょうか?
お手数ですがどなたかご教授頂けますと幸いです。

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

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

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

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

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

CHERRY

2020/02/26 01:50

WordPress のプラグインは、使わずに実装されているということでしょうか? ファイル名が、WordPress 固定ページのカスタムテンプレートファイル名と重なると思いますが、固定ページとして表示しているということでしょうか?
退会済みユーザー

退会済みユーザー

2020/02/26 01:55

WordPress のプラグインは使用せずに実装したいです。 申し訳ありません、知識不足で「固定ページのカスタムテンプレートファイル名と重なる」がよくわからないのですが、ファイルは固定ページとして表示しており、URLスラッグは使用していません。
guest

回答2

0

ベストアンサー

XSS脆弱性

URLパラメータによって任意のタグ・スクリプト・属性値の出力を行えてしまう脆弱性
事象 ユーザー情報の漏洩、アカウントのクラックなど
対策 $_POST,$_GETなどの値は無害化して出力

CSRF脆弱性

正規の手順を踏まない外部からのリクエストを受け入れてしまう脆弱性
事象 外部サイトユーザーの意図しないサービス操作、アカウントのクラックなど
対策 nonceを使う

テーマのファイルを直接呼び出してもWordPressの関数は利用できません
エラーメッセージはそこに起因するものでしょう

wp_nonceしかりWordPressでフォーム作るときは
WordPressの用意している仕組みを利用しましょう

メール送信についてもwp_mailを使えば
一応それなりにメールヘッダインジェクション対策はされます
そこでも結局ユーザー入力を無批判に利用して
ヘッダ文字列を組み上げてるようでは意味がないですが

投稿2020/02/26 05:15

KazuhiroHatano

総合スコア7819

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

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

退会済みユーザー

退会済みユーザー

2020/02/26 08:52

丁寧にご指摘いただきありがとうございます。 wp_mailでやれるよう調べてみます。 ありがとうございました。
guest

0

固定ページに、独自のクエリ変数を渡したいということであれば、query_vars フックで、変数名を登録しておく必要があります。

ドキュメントより、my_var を使いたい場合の例

function add_query_vars_filter( $vars ){ $vars[] = "my_var"; return $vars; } add_filter( 'query_vars', 'add_query_vars_filter' );

その上で、get_query_var 関数で、パラメータを取得して利用します。

投稿2020/02/26 01:56

編集2020/02/26 01:59
CHERRY

総合スコア25218

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

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

CHERRY

2020/02/26 02:09 編集

なお、セキュリティ面を考えると WordPress nonce ( https://wpdocs.osdn.jp/WordPress_Nonce ) に対応することを検討した方が良いと思います。 これらを考えると独自フォームよりは、プラグインで対応する方が良い場合もあると思います。
退会済みユーザー

退会済みユーザー

2020/02/26 04:23

ご回答いただきありがとうございます。 これはfunctions.phpに 「function add_query_vars_filter( $vars ){ $vars[] = "my_var"; return $vars; } add_filter( 'query_vars', 'add_query_vars_filter' );」 と記載をすれば良いということでしょうか? やってみたのですが同じエラーが出てしまいました・・・
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問