[WP]MW WP Formで条件分岐フォームを作る

2020版はこちら

何について問い合わせるかを選ばせるやつってあるじゃないですか。
問い合わせ先のリンク集みたいなの用意して各問い合わせ用のページに飛ばすのと、
同一ページ内で問い合わせを選ばせる2通りがあるじゃないですか。
後者については自作するなら何の障害もないんだけど、WPだとえらい面倒なことになる。

今回のベースはMW WP Form
結果的にこの子が柔軟なおかげでなんとかなった。

そもそもMW WP Formっていうのは

MW WP Formは便利だけど、
同一ページに1つのフォームしか設置できない。
もし複数設置するとどれか(一番最初か最後だったような)に引っ張られて妙なことが起こる。

だから今回のケースで言えば、1つのフォームに各問い合わせ項目を全部ぶち込んで、

何についての問い合わせなのかって選択肢を混ぜる
選択肢により表示する問い合わせ項目を切り替える
選択肢により適した件名・本文のメールを飛ばす

こういうのを作ることになる。
今回はビジュアル面の切り替えはスルーする。

ハコを作る

名前
[mwform_text name="name" id="name" placeholder="なまえ"]

メールアドレス
[mwform_email name="email" id="email" placeholder="メールアドレス"]

カテゴリ選択(3種)
[mwform_select name="category" id="category" children="cat_a,cat_b,cat_c"]

項目A
[mwform_text name="cat_a_txt" id="cat_a_txt" value="cat_aを選択したら表示"]

項目B
[mwform_text name="cat_b_txt" id="cat_a_txt" value="cat_bを選択したら表示"]

項目C
[mwform_text name="cat_c_txt" id="cat_b_txt" value="cat_cを選択したら表示"]

[mwform_submit name="submit" id="cat_c_txt" value="submit"]

問い合わせのサンプル。
もう色々とそれどころじゃない状況でまとめてるからMW WP Form自体の使い方については割愛。
「カテゴリ選択(3種)」のところが今回のトリガーになる。
「項目A」「項目B」「項目C」はトリガーで何を選んだかにより割り振られる用。
ここだけvalueに書いちゃってるのはテストのときにいちいち打つのがダルかったからで、実際には普通に作ってください。
それぞれ何個にしようが関係ないし、nameもidもabc振ってるけどなくてもいい。
自分で何を作ったかを把握しておくことだけは忘れずに。

固定ページとか投稿ページで問い合わせ用のページを作って、
「フォーム識別子」の[mwform_formkey key=””]ってやつ(※「」は数字)を貼り付ける。
ついでに「***」を控えておく。

functions.php

ネックの部分はマニュアルを元にこんな塩梅。

//条件分岐による自動返信メール操作

function autoback_my_mail( $Mail_raw, $values, $Data ) {

if ($Data->get( 'category' ) == 'cat_a'){
//cat_aを選んだ場合
$Mail_raw->from = 'hoge@example.jp'; // 送信元を変更
$Mail_raw->sender = 'hoge'; // 送信者を変更
$Mail_raw->subject = '{name}様、受け付けました。'; // 件名を変更
$Mail_raw->body = '{cat_a_txt}'; // 本文を変更

} else if ($Data->get( 'category' ) == 'cat_b'){
//cat_bを選んだ場合
$Mail_raw->from = 'hoge@example.jp'; // 送信元を変更
$Mail_raw->sender = 'hoge'; // 送信者を変更
$Mail_raw->subject = '{name}様、受け付けました。'; // 件名を変更
$Mail_raw->body = '{cat_b_txt}'; // 本文を変更

} else if ($Data->get( 'category' ) == 'cat_c'){
//cat_cを選んだ場合
$Mail_raw->from = 'hoge@example.jp'; // 送信元を変更
$Mail_raw->sender = 'hoge'; // 送信者を変更
$Mail_raw->subject = '{name}様、受け付けました。'; // 件名を変更
$Mail_raw->body = '{cat_c_txt}'; // 本文を変更

}
return $Mail_raw;

}
add_filter( 'mwform_auto_mail_raw_mw-wp-form-***', 'autoback_my_mail', 10, 3 );

見たまま。categoryで何を選んだかで分けてる。

最初と最後の「autoback_my_mail」は合致してれば好きなのをつければいい。
最後の「***」は「フォーム識別子」にあった数字を入れる。
上では送信元アドレス・送信元名・件名・本文をいじれるようにしてるけど、
いじる必要の無いところはコメントアウトするなり行を削るなりしてしまえばOK。

件名も本文も管理画面のやつは無視されるから、ここでちゃんと作ってあげてね。

ちなみに最後のところの
「’mwform_auto_mail_raw_mw-wp-form-‘」を 「’mwform_admin_mail_raw_mw-wp-form-‘」にすると
管理者宛メールを変更できる。
もちろん両方それぞれ設定できる。

使用上の注意

これをやると不要な項目が確実に発生しちゃうから確認画面が機能しない。
確認画面を諦めるか、そうじゃなきゃモーダルウィンドウとかでもって同一ページ上で見せてやるしかないだろうね。

jsで選択項目を拾って条件分岐すれば確認画面上で割り振ることは可能。

条件分岐しまくって今更だけど、トリガーになる選択肢をいじると条件分岐部分も相応の内容に修正しなきゃいけないので非常にめんどいってことを理解しておく。

振り返って

自分がphpだかwpだかに不慣れなせいでアホみたいな時間を掛けてめちゃくちゃトライアンドエラーしまくってた。
すっごい疲れた。

問題点(20201112)

こうやってショートコードとかを貼った記事はMW WP FORMを有効にすると500エラーになる。私的なサイトだからってブログとテスト環境と併用するのは止めたほうがいいね。

コメント

  1. […] [WP]MW WP Formで条件分岐フォームを作る […]

タイトルとURLをコピーしました