
どうも、最近やっと抱え続けた仕事の1つが一段落つきそうなby_sKです。
というのも、Wordpressを使用したサイト構築をほぼ初心者の状態から始めまして、なんだかんだあとメールフォーム作ったところで終わりじゃん!ってところまで来て、そこで詰まったのです。
前提として、この記事でのメールフォームは更新された情報一つ一つで異なる内容が呼び出されます。ご注意下さい。
そもそも
現在作っているサイトは、実は別にWordpressを使用しない環境で無理に走っています。というのも、本来Wordpressを使用して変えるような情報全てをPHPに直接手打ちして回していたのです。それらの情報を、現在開発中の環境ではWordpressプラグインのカスタムフィールド(AFC PROをDeveloper Licenseで買いました)で情報を入力し、それらの投稿タイプをプラグインのCPT UIで管理することで割と自由に情報を増やし・抜き出すことまで成功しました。
で、PHP手打ち環境でのメールフォームはやはりPHP手打ちで、例えばセレクトボックス(SELECTタグによるもの)の中身などはGETやPOSTから得られたIDによって分岐していました。
ので、それをコピペしてみました
Wordpressを使わずに使っていたものをそのままコピペし、SELECTタグなどの変動する部分を自動で変わるように設定しました。ここまでは非常にサクサク進みました。が、ここで問題が発生しました。
仕様について
そもそも、今回作っているメールフォームには2つの特徴があります。
1つは投稿された情報1つ1つに別々の内容のフォームが呼び出されること。
もう1つはユーザーのミスを無くすため確認画面を挟むということ。
前者は先程も言ったとおり一度は自動化出来たのですが…、問題は確認画面でした。
Wordpress上ではPOSTが使えない!!!
これが全てです…が、一応しっかり書いておきます。
これまでは、
一覧
↓(GET)
メールフォーム
↓(POST)
送信確認画面
↓(SESSION)
メール送信(mb_send_mail)
↓(header-Location)
投稿完了画面
という流れで動かしていました。
しかし、Wordpress上でやってみるとPOSTによる情報が全く送られていない。
これは、セキュリティ面を考慮したWordpressの仕様…だそうです。
だからといって、GETに移すのはダメ。テキストボックス内の改行がなくなる。
SESSIONは…、そういえばまだ試してないけど、結局一回はメールフォームの情報を送って受け取らないといけないから多分ダメ。
というわけで、Wordpressのプラグインの力でメールフォームの実装を目指しました。
ダメでした。
今回の開発もとい勉強のため、一冊の本を購入していました。
これです。滅茶苦茶分かりやすい。
早速、メールフォームの実装部分を読みましたが…、確認フォームが使えないプラグインが紹介されていました。で、地力でいろいろ調べた結果出てきたのが、MW MP Formです。
MW MP Formに関して
このプラグインはシンプルな編集でフォームを作成し、フォーム全体を示すショートコードを記事に貼ることで簡単にフォームを呼び出せるプラグインです。なるほど便利だ、と思って作ってみたのですが、やはり変動するSELECTタグの中身で詰まりました…。
children="ここをいじりたい"
このプラグインを使おうとする前は、データベースから拾ってきたPOSTデータの中身を処理してSELECTタグの中身を記述していました。しかし、プラグインを使うことでSELECTタグの中身を示す部分は投稿と同じようにWordpressの画面で入力するものとなり、結果的に直接的PHPが使えなくなったのです。
今回の場合、
[mwform_select name="任意" children="選択肢1,選択肢2,..."]
というショートコードをフォーム設定画面で入力します。
目指したいのは、このchildrenの中身を動的に変動させることです。
ここまでやってきたことと考えたこと
この問題に既に丸2日潰してしまっています。
一応、ショートコード内にさらにchildren部に入れる文字列を出力するショートコードを入れる、という手法で解決させようと思いましたが、「ショートコード内のショートコードを認識していない」「ショートコード内でPOSTデータを取得した際に、そのPOSTデータの内容の抽出が上手くいかない」という問題に直面しています。
まだ試していない処置としては、
・更新される情報1つにつき1つのフォームを作成する(変動するのではなく、呼び出すフォームを別々にする)
・使用するプラグインを変える
・先方に「確認画面許してください」と土下座する
という処置が有ります。
最後のはノーコメントとして、
1つ目に関しては自動化させることが条件になります。正直出来る気がしない。つまり、カスタムフィールドで情報を投稿した際、function.phpかなにかでそれらの情報から入力フォームを自動生成、それを呼び出すためのショートコードを含む固定ページを自動生成する…というものになります。
…そんなことが果たして可能なのか?
2つ目に関しては、もうこれは泥沼な気がします。基本的に開発は技術を調べて使ってみて使えそうなら使う、を繰り返すものだと思っていますが、今は正直時間に余裕がない上これが終わればこの仕事が一段落という状況、技術検証なんてしてるわけにはいかないのです。
助けてください
というわけで、どなたか、アドバイスを頂けないでしょうか。
僕よりも詳しい人に是非お話を聞かせていただきたいです。
幸い、このブログにはコメント機能があるので、ぜひお願いします。
これが一段落したら自分のブログもWordpressで運営したい(その前に研究しなきゃ)
よろしくお願いします…。
一番上の画像は何も考えず適当にいれました。+チック姉さんおもしろいです。
2016/12/12追記:
wp insert post:データベースへ投稿(および固定ページ)を追加する関数。
記事が投稿された際に呼び出してformを追加、formを追加された際にもう一度呼び出して先ほどの投稿の記事のリンク調整…?
学校のほうが忙しいので一旦放置気味になりそう
2016/12/13追記:
人生も髪の毛も滅茶苦茶@by_sK
ぼく「ぐえ〜〜〜ショートコードの中にショートコード入れてもショートコード反応しないンゴ〜〜〜〜〜〜〜」
2016/12/13 16:29:38
RG「ショートコードやめればいいじゃん」
ぼく「」
ぼく「」
ぼく「」
ぼく「それだ」
突破口、見えたかもです。
→ダメでした。
人生も髪の毛も滅茶苦茶@by_sK
“mwform_choices_mw-wp-form-xxx ラジオボタン、チェックボックス、セレクトボックスの選択項目を変更できるフックです。” https://t.co/HIlhJ1rOMe
2016/12/13 17:31:27
新たに突破口発見した
突破口見えたかも(2度目)
コメント