MW WP Formのセレクトボックス・チェックボックス・ラジオボタンを動的に設定する方法

さて今回は、ワードプレスのメールフォームプラグインMW WP Formについて。
セレクトボックス・チェックボックス・ラジオボタンといった選択系の項目を、管理画面から手動で設定するのではなく、動的な感じに設定してみたいと思います。
ちょっと伝わりずらいかもしれません。今回やってみる事は以下のような感じです。
「お問い合わせの製品」というセレクトボックスを作ったが、このセレクトボックスの選択項目にカスタム投稿タイプ「製品」の一覧を入れたい。
といった感じです。
このようにしておくと、フォームの内容がカスタム投稿タイプ「製品」に連動しますから、製品の追加や削除の際に、いちいちフォームを修正する必要がなくなりますね。
というわけで、さっそくやってみましょう。
~ 目次 ~
使用するフック
個人的な考えですが、MW WP Formは便利なフックがたくさん用意されていて、結構高度なカスタマイズもしやすいと思います。今回、使用するフックは ”mwform_choices_mw-wp-form-xxx”というフィルターフック。
このフックで、選択肢を好きなように書き換えられます。
選択肢を書き換えるサンプルコード
以下の例は「products」というカスタム投稿タイプの記事(ページ)のタイトルをすべて取得して、選択肢にする例です。使用中のテーマのfunctions.phpなどに追記します。
公式マニュアルのコードとほとんど一緒ですが、丸写しじゃ記事としてアレなんで。。少しわかりやすく書いておきます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
function custom_choices( $children, $atts ) { if ( $atts['name'] == 'products' ) { $children = []; $products = get_posts( array( 'post_type' => 'products', 'posts_per_page' => -1 ) ); foreach ( $products as $product ) { $children[$product->post_title] = $product->post_title; } } return $children; } add_filter( 'mwform_choices_mw-wp-form-49', 'custom_choices', 10, 2 ); |
上のサンプルコードを実際に使用する際は、下の3点を実際の環境に合わせて書き換えてください。
書き換えるフォームパーツの指定
まず2行目の「$atts[‘name’] == ‘products’」の「products」が、書き換えるフォームパーツを判定する部分です。このコードでは、name属性で判定していますので、フォーム作成画面で設定したname属性の値に書き換えてください。
取得する投稿タイプの指定
このサンプルコードでは「products」というカスタム投稿タイプの記事のタイトルをすべて取得しています。
5行目の「’post_type’ => ‘products’」の部分で投稿タイプ名を指定しています。ここは実際の投稿タイプ名に書き換えてください。
フォーム識別子の指定
最終行の「mwform_choices_mw-wp-form-49」の後半のmw-wp-form-xxxという部分が、フォーム識別子です。最後の「49」は、実際の数字に書き換えてください。
この値はフォーム作成画面などでも確認できますが、フォーム表示用のショートコードの「key」の値です。
引数のattsの中身
一応、補足しておきますが、このフックの第2パラメータの ”atts” の中身について。
こちらは、MW WP Formのフォーム作成画面で各フォームパーツに設定した内容が格納されているようです。
下はラジオボタンのものですが、ダンプしたものです。nameにフォームパーツのname属性が格納されているので、これを利用してカスタマイズするパーツを判定してやります。
1 2 3 4 5 6 7 8 9 10 |
array(8) { ["name"]=> string(8) "products" ["id"]=> string(8) "products" ["class"]=> string(8) "products" ["children"]=> string(53) "商品について,お支払いについて,その他" ["value"]=> string(18) "商品について" ["vertically"]=> NULL ["post_raw"]=> string(5) "false" ["show_error"]=> string(4) "true" } |
最後に
今回はラジオボタンなどの選択系項目の書き換えをしてみました。
サンプルコードでは、カスタム投稿タイプの一覧を選択肢に…という例でしたが、他にも色々な書き換えが自由にできます。仕組みが理解できたらトライしてみてください。
テキスト項目の書き換えなどは、次回まとめてみたいと思います。
[…] また前回の記事「MW WP Formのセレクトボックス・チェックボックス・ラジオボタンを動的に設…」のようなケースでも、動的に設定したラジオボタンのデフォルトを設定する…などという事が可能です。 […]