WordPressでのお問い合わせフォーム設置といえばやはりContact form7が定番です。
さまざまな派生アドオン的なプラグインも出回っており色々と便利。
今回、やりたかったのはフォームが設置してあるページに様々な所からリンクされる場合、
例えば1ページにずらりと各商品説明が並んでいて、それぞれに「問い合わせはこちら」というボタンを設置、みたいな。
その場合、フォームにはずらりと商品名が入ったセレクトボックスが並んでいるという状態ですが
「飛んで来たボタンの商品名のセレクトボックスの色を変えておきたい」というケースです。
単純に考えるとそのセレクトボックスにIDを割り当ててCSSで着色すれば良いのですが、これがなかなか手間取りましてね。
Contact form7の値を取得して引き渡す方法は様々なサイトで紹介されておりますが、valuesの値ばかり。
欲しいのはIDの取得なんだよ・・・・・
これを見る限り各項目にはid:(id) というオプション項目があるのでなんとか出来るはずと試行錯誤。
optionsの各項目を取得するのは以下のやり方で大丈夫でした。
functions.phpに以下を書いてあげます。
function my_form_tag_filter( $tag ){ if ( ! is_array ( $tag ) ) return $tag ; if (isset( $_GET [ 'select1' ])){ $name = $tag [ 'name' ]; if ( $name == 'hogehoge01' ) $tag [ 'options' ] = ( array ) ( "id:" . $_GET [ 'select1' ]); } return $tag ; } add_filter( 'wpcf7_form_tag' , 'my_form_tag_filter' , 11); |
Contact form7側でまず「hogehoge01]というセレクトボックスを作ってます。
で、フォームにアクセスする際にURLの末尾に
?select1=true
って感じでつけてあげると、セレクトボックスにid=”true”が割り当てられます。
項目を複数にする場合は
function my_form_tag_filter( $tag ){ if ( ! is_array ( $tag ) ) return $tag ; if (isset( $_GET [ 'select1' ])){ $name = $tag [ 'name' ]; if ( $name == 'hogehoge01' ) $tag [ 'options' ] = ( array ) ( "id:" . $_GET [ 'select1' ]); } if (isset( $_GET [ 'select2' ])){ $name = $tag [ 'name' ]; if ( $name == 'hogehoge02' ) $tag [ 'options' ] = ( array ) ( "id:" . $_GET [ 'select2' ]); } return $tag ; } add_filter( 'wpcf7_form_tag' , 'my_form_tag_filter' , 11); |
という感じで増やしてあげる事で実現出来ました。