MW WP Formのセレクトにカスタム投稿タイトルを入れ遷移元を初期選択にする方法

公開日
最終更新日

リクルートサイトで、募集要項をカスタム投稿で作り、各シングルページからエントリーフォームへ遷移させる——このとき、「エントリーフォームのセレクトボックスに、遷移元の職種があらかじめ選択された状態で表示したい」という要望はよくあります。

結論から言うと、MW WP Formの「URL引数を有効にする」を使い、遷移ボタンのURLにパラメータを付け、functions.phpのフィルターフックでセレクトの選択肢と初期値を制御することで実現できます。この記事では、その手順を解説します。

この記事の想定

  • リクルートサイトで募集要項をカスタム投稿(投稿タイプスラッグ:job)で作成
  • 職種や仕事内容によって募集要項の記事を投稿
  • シングルページ(single-job.php)にエントリーフォームへの遷移ボタンを設置
  • エントリーフォームをMW WP Formで作成

「URL引数を有効にする」にチェック

まず、MW WP Formの設定画面で「URL引数を有効にする」にチェックを入れます。これにより、URLのパラメータ(引数)を使って、遷移先のフォームに値を渡せるようになります。

遷移ボタンのURLにパラメータを追加する

カスタム投稿のシングルページから、エントリーページ(entry)への遷移ボタンのリンクに、次のようにパラメータを追加します。

<a href="/entry/?occupation=<?php echo urlencode($post->post_title); ?>">
    エントリーボタン
</a>

記事タイトルには日本語が含まれるため、urlencode()でエンコードしてからURLに渡すのが安全です。受け取り側の$_GETでは自動的にデコードされるので、後述のタイトル比較はそのまま機能します。

functions.phpにコードを追記する

/* 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やスラッグを値に使うなどの工夫を検討するとよいでしょう。逆に言えば、職種名のように一意になりやすい項目とは相性のよい方法です。

まとめ

  • MW WP Formの「URL引数を有効にする」をオンにする
  • 遷移ボタンのURLに、urlencode()したタイトルをパラメータで付ける
  • mwform_choicesで選択肢、mwform_valueで初期値を制御する

遷移元の情報が最初から選ばれていると、ユーザーの入力の手間が減り、応募のハードルも下がります。求人サイトのエントリーフォームなどで役立つテクニックです。

参考)https://www.expexp.jp/mw-wp-form-choices/

IPPEI FUKUTA(株式会社バッズブルー 代表)

IPPEI FUKUTA(株式会社バッズブルー 代表)

WordPress専門のWeb制作者として15年・150サイト以上を担当。現場でつまずいた問題と解決策を、同じ制作者・フリーランスの方に向けて発信しています。無料のWeb便利ツール集「バドツール」を開発・運営中。