
こんにちは。
今回はWordPressのフォーム作成プラグイン「MV WP Form」でターム名を自動入力させるコードをご紹介します。
覚書のような内容ですが参考になれば嬉しいです。
今回実現させたいこと
(↑画像はアーカイブページのイメージ)
今回は採用サイトの募集要項から飛べるエントリーフォームを作成する想定です。
それぞれの求人は投稿できるようになっていて、新卒採用、中途採用の2つにカテゴリー分けされています。
求人の詳細ページ(シングルページ)に設置してある応募するボタンを押すと、
採用枠、職種が入力された状態の応募フォームに遷移する仕組みです。
MV WP FormのURL引数を有効にする
MV WP Formには「URL引数を有効にする」機能があります。
上の画像にも書いてありますが、これにチェックを入れるとフォーム遷移前の投稿データを取得することができる大変便利なものです。
実現させたいことのうち、職種名の自動入力はURL引数を有効にすることですぐに解決できます。
問題は採用枠の自動入力。ここはカテゴリーのターム名を表示させないといけないために、URL引数を有効にするだけだとうまくいかないのです…。
コードを書いてみよう
というわけで、ターム名を自動入力させるためのコードを足します。下記です。コピペOKです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
/*━━━━━━━━━━━━━━━ WP MV Formのフィルターフック ━━━━━━━━━━━━━━━*/ /** * my_mwform_value * @param string $value valueの初期値 * @param string $name name属性値 */ function my_mwform_value( $value, $name ) { // $_GET['hoge']があったら、name属性がhogeの項目の初期値に設定 if ( $name === 'inputのname名' && !empty( $_GET['post_id'] ) && !is_array( $_GET['post_id'] ) ) { $postId = $_GET['post_id']; $type = get_the_terms($postId,'タクソノミー名'); foreach( $type as $term ) { $type = $term->name; } $value = $type; } return $value; } add_filter( 'mwform_value_mw-wp-form-xxx', 'my_mwform_value', 10, 2 ); |
解説
MV WP Formには様々なフィルターフック・アクションフックが用意されています。これがちょっとかゆいところに手が届く優れものです。
今回は「mwform_value_mw-wp-form-xxx」というフィルターフックを使います。
このフィルターフックを使うと、URL引数で渡された値をもとに動的にvalueを設定することができます。(公式サイトから引用)
1 |
if ( $name === 'inputのname名' && !empty( $_GET['post_id'] ) && !is_array( $_GET['post_id'] ) ) |
11行目、「$nameが’inputのname名’だった場合」かつ「$_GET[‘post_id’](URL引数)が空でない場合」かつ「$_GET[‘post_id’]が配列でない場合」に処理を実行することを指示しています。
$nameはあらかじめこのフィルターフックで定められた変数です。例えば自動入力させたいフォーム側が下記のようになっていたら
1 |
<input type="txt" name="category-name"> |
$name===’category-name’となります。
1 2 3 4 5 |
$postId = $_GET['post_id']; $type = get_the_terms($postId,'タクソノミー名'); foreach( $type as $term ) { $type = $term->name; } |
そのあと、$term->nameでターム名(今回だと新卒採用、中途採用にあたるもの)を取得するんですが、$term->nameはforeachの中で使う必要があるので上記のような書き方に。
1 2 |
$value = $type; return $value; |
最後に$value(inputのvalue値)に$type($term->name)を代入して、returnで$value値を呼び出すと、フォームに値が入力されます!
この時自動入力させたい箇所のvalueが空欄になっていないと失敗するので、フォーム側にvalue=”〇〇”を書かないようにすることをお忘れなく!
まとめ
いかがでしたか?こうして順を追って振り返るとすんなりいったと自分でも感じられるのですが、マニュアルのコードからカスタマイズしていく過程であれこれ頭を悩ませました。
$term->nameはforeachの中で使う、というのをうっかり忘れそうになりました!
ネットで調べてもターム名を自動入力に使うやり方を解説しているサイトは見つからなかったので、このコードが誰かのお役に立てたら嬉しいなと思います。
最後までお読みいただきありがとうございました。