リクルートサイトで、募集要項をカスタム投稿で作り、各シングルページからエントリーフォームへ遷移させる——このとき、「エントリーフォームのセレクトボックスに、遷移元の職種があらかじめ選択された状態で表示したい」という要望はよくあります。
結論から言うと、MW WP Formの「URL引数を有効にする」を使い、遷移ボタンのURLにパラメータを付け、functions.phpのフィルターフックでセレクトの選択肢と初期値を制御することで実現できます。この記事では、その手順を解説します。
job)で作成single-job.php)にエントリーフォームへの遷移ボタンを設置
まず、MW WP Formの設定画面で「URL引数を有効にする」にチェックを入れます。これにより、URLのパラメータ(引数)を使って、遷移先のフォームに値を渡せるようになります。
カスタム投稿のシングルページから、エントリーページ(entry)への遷移ボタンのリンクに、次のようにパラメータを追加します。
<a href="/entry/?occupation=<?php echo urlencode($post->post_title); ?>">
エントリーボタン
</a>
記事タイトルには日本語が含まれるため、urlencode()でエンコードしてからURLに渡すのが安全です。受け取り側の$_GETでは自動的にデコードされるので、後述のタイトル比較はそのまま機能します。
/* MW WP Form のセレクト項目にカスタム投稿タイトル一覧をセット */
function form_job_cat_list($children, $atts)
{
/* 値を入れるセレクトボックスのname属性を指定(サンプルでは「希望職種」) */
if ($atts['name'] == '希望職種') {
/* get_posts()で値にするカスタム投稿の配列を取得 */
$jobs = get_posts(array(
'post_type' => 'job',
'posts_per_page' => -1,
));
/* 取得した配列からタイトルだけを抽出 */
foreach ($jobs as $job) {
$children[$job->post_title] = $job->post_title;
}
/* 値の最初に「すべてのカテゴリー」を追加(送信値 => 表示値) */
$children = array('すべてのカテゴリー' => 'すべてのカテゴリー') + $children;
}
return $children;
}
add_filter('mwform_choices_mw-wp-form-xx', 'form_job_cat_list', 10, 2);
/* セレクトの初期値を設定する */
function _my_mwform_value($value, $name)
{
if ($name === '希望職種' && !empty($_GET['occupation']) && !is_array($_GET['occupation'])) {
return $_GET['occupation'];
}
return $value;
}
add_filter('mwform_value_mw-wp-form-xx', '_my_mwform_value', 10, 2);
※コード内の「xx」の部分は、MW WP FormのIDに置き換えてください。
2つのフィルターフックを使っています。mwform_choices_mw-wp-form-xxは、セレクトボックスの選択肢を動的に生成するフックです。get_posts()でカスタム投稿jobを全件取得し、タイトルを選択肢として追加しています。
もう1つのmwform_value_mw-wp-form-xxは、セレクトの初期値を設定するフックです。URLパラメータoccupationに値があれば、それを初期選択にすることで、遷移元の職種が最初から選ばれた状態になります。$atts['name']や$nameで対象のセレクトボックスを絞り込んでいるので、フォーム内の他の項目には影響しません。
1点注意として、この方法は記事タイトルを値として使っているため、まったく同じタイトルの記事が複数あると区別できません。タイトルが重複しうる運用では、投稿IDやスラッグを値に使うなどの工夫を検討するとよいでしょう。逆に言えば、職種名のように一意になりやすい項目とは相性のよい方法です。
urlencode()したタイトルをパラメータで付けるmwform_choicesで選択肢、mwform_valueで初期値を制御する遷移元の情報が最初から選ばれていると、ユーザーの入力の手間が減り、応募のハードルも下がります。求人サイトのエントリーフォームなどで役立つテクニックです。