例えば、ドロップダウンメニュー(menu-123)の項目を
abc, def, ghi
にするとして、コンタクトフォームへのリンクを
http://example.com/contact?ddm=abc-def-ghi
のようにする場合、
以下のようなコードをテーマの functions.php に書けば OK です。
function my_form_tag_filter( $tag ) {
if( isset( $_GET['ddm'] ) )
if ( 'menu-123' === $tag['name'] ) {
$tag['labels'] = (array) explode( '-', $_GET['ddm'] );
$tag['values'] = $tag['labels'];
}
return $tag;
}
add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11);
ありがとうございます。
教えていただいたコードでやりたいことは実現できました。
ただ少し、疑問なのですが、
このコードで値をドロップダウンメニューに与えると、
その後、そのドロップダウンメニューは、他の項目は選択不可能になります。
ドロップダウンメニューの中に、メニューも表示はされません。
もし、値をドロップダウンメニューに与えても、
その後もメニューを選択、変更、可能にすることもできるんでしょうか?
他の項目は選択不可能
「他の項目」は何を指してますでしょうか。
元々コンタクトフォームで設定しているドロップダウンメニューの選択項目のことなら
$tag['labels'] = array_merge( $tag['labels'], (array) explode( '-', $_GET['ddm'] ) );
とすれば書き換えじゃなくて、選択項目の追加になります。
if( isset( $_GET['ddm'] ) )
if ( 'menu-123' === $tag['name'] ) {
$tag['labels'] = array_merge( $tag['labels'], (array) explode( '-', $_GET['ddm'] ) );
$tag['values'] = $tag['labels'];
}
としてみたのですが、値を渡してくれなくなってしまいました。
リンクで値を渡しておいて、かつ後でも、ドロップダウンメニューの値を訂正可能というような状態に持っていきたいのです。
何か方法はあるでしょうか
I.E.の場合、でのみ値を渡してはくれますが、
その後、実際にフォームを使って送信したときには、その値が無視されてしまうようです。
これは他のブラウザでは起きませんでした。
かつ後でも、ドロップダウンメニューの値を訂正可能
誰がどのタイミングでどのように訂正するのか、を具体的に説明していただくと良いかもです。
実際にフォームを使って送信したときには、その値が無視されてしまう
無視、を具体的に説明していただくと良いかもです。
提示したコードは以下の環境で動作検証済です◎IEは未検証。
Firefox 3.6.8
Chrome 6.0.472.25 dev
Contact Form 7 2.3
WordPress 3.0.1
ドロップダウンリストに、元ページから値を動的にセットしたく検索しましたら、
このページにたどり着き、セットまではうまくいった次第です。
URLに値を見せたくなかったので、POSTに設置しました。
フォームへ値をセットはできたのですが、送信ボタンをクリックし必須項目の未記入等でエラーが出た際、セットされたドロップダウンリストが全部クリアされてしまうという現象に陥っております。
他にもテキストをPOSTで渡しているのですが、そちらは無事に表示されております。
functions.php
if( isset( $_POST[‘busdate’] ) )
if ( ‘bus-date’ === $tag[‘name’] ) {
$tag[‘labels’] = (array) explode( ‘-‘, $_POST[‘busdate’] );
$tag[‘values’] = (array) explode( ‘-‘, $_POST[‘busdatevalue’] );
}
フォームへ渡す前のページ
<input type=”hidden” name=”busdate” value=”Aコース-Bコース-Cコース-不要”>
<input type=”hidden” name=”busdatevalue” value=”0-1-3-9″>
としております。
何卒、ご教示いただきますよう、よろしくお願い致します。