【コピペOK!】MW WP Formのセレクトボックスにカスタム投稿のタームを使う【便利】

未分類

こんにちは、あさひです。

WEBフリーランスとして4年目、細々と生き残れてる奴です。

インボイスで木端微塵になるかもしれません。

あなたが対応している案件で、MW WP Formのセレクトボックスにカスタム投稿の内容を選択肢として使いたい。そんなことは思った事ありませんか?

↑これの選択肢にカスタム投稿につけてるタクソノミー『営業職』とかをつけたい。

今回設定しているタクソノミーは「営業」、タームが「総合職~」

とりあえずサクッとコード置いときます。

解説は見たい人は最後までどうぞ。

例として入れている値はこれ。

表示させたいページ(今回の場合はエントリーフォームがあるページ)のスラッグ「entry」
MW WP Formのセレクトボックスのnameは「entry-select」
カスタム投稿の名前「job」
タクソノミー名「職業」でスラッグが「job_category」
「xxx」にはフォームの識別子を入れてくださいな。

あ、セレクトボックスの内容はこんな感じ

childrenの値は入れても入れなくてもって感じです。

//セレクトボックスのオプションにカスタム投稿タイプのターム名を表示する(フィルターフックで実装)
//add_term_list 関数は、セレクトボックスの選択肢を追加するための関数です。この関数は、MW WP Formのフィルターフックによって呼び出されます。
function add_term_list( $children, $atts ) {
//if (is_page('entry')) は、現在のページが 'entry' ページであるかどうかを確認しています。
  if (is_page('entry') ) {
//if ('entry-select' == $atts['name']) は、セレクトボックスのフィールド名が 'entry-select' であるかどうかを確認しています。
      if ( 'entry-select' == $atts['name'] ) {
          // カスタム投稿 'job' の記事を取得
          $posts = get_posts( array(
              'post_type' => 'job',
              'posts_per_page' => -1,
          ) );

          $term_list = array();

          foreach ( $posts as $post ) {

              // 記事に結びついている 'job_category' タクソノミーのタームを取得
              $job_terms = wp_get_post_terms( $post->ID, 'job_category', array( 'fields' => 'names' ) );

              // 'job_category' 形式でターム名を作成し、配列に追加
                  foreach ( $job_terms as $job_term ) {
                      $term_name = $job_term;
                      $term_list[] = $term_name;
                  }
          }

          // 重複を除いたタームリストを取得
          $unique_term_list = array_unique( $term_list );

          // タームリストをセレクトボックスの選択肢として追加
          foreach ( $unique_term_list as $term ) {
              $children[$term] = $term;
          }
      }
  }
  return $children;
}
add_filter( 'mwform_choices_mw-wp-form-xxx', 'add_term_list', 10, 2 );

こちらのコードを使えばセレクトボックスの選択肢にタームが出ます。

これがどういった時に使うのか?ってなりますよね。
基本的には採用ページ関連に使うことが多いです。

募集している内容をカスタム投稿で作る。
そして「エンジニア」や「営業職」などのカテゴリー(カスタム投稿なのでタクソノミー)を持たせてエントリーフォームに募集しているカテゴリーを表示させる。

良い所は、その募集を取り下げると自動で選択肢から消してくれるところです。楽~

いや、セレクトボックスの選択肢を適宜変えれば?って思うでしょ?
あなたが運用するなら良いですけど、触る人はあなたじゃないのでお客様の利便性を追求すべきですよ。

そして応用という程でもないんですが、
「営業職とかの前に『新卒採用』とか『中途採用』をつけたくね?」って後から追加されるとき。

(#^ω^)ピキピキってきますよね。

そんな方の為に、それに対抗できるコードを用意しました。
紹介したコードの応用です。

タクソノミー名「職業」でスラッグが「job_category」を使っていましたね。
その前に新しいタクソノミー「キャリア」を追加しスラッグを「career_category」を設定します。

タクソノミーの名前とかスラッグは好きにしてください。
そして表示を「中途採用:営業職」としたいとする。

そして以下のコードをドン!

//セレクトボックスのオプションにカスタム投稿タイプのターム名を表示する(フィルターフックで実装)
function add_term_list( $children, $atts ) {
    if (is_page('entry') ) {
        if ( 'entry-select' == $atts['name'] ) {
            // カスタム投稿 'job' の記事を取得
            $posts = get_posts( array(
                'post_type' => 'job',
                'posts_per_page' => -1,
            ) );

            $term_list = array();

            foreach ( $posts as $post ) {
                // 記事に結びついている 'career_category' タクソノミーのタームを取得
                $career_terms = wp_get_post_terms( $post->ID, 'career_category', array( 'fields' => 'names' ) );

                // 記事に結びついている 'job_category' タクソノミーのタームを取得
                $job_terms = wp_get_post_terms( $post->ID, 'job_category', array( 'fields' => 'names' ) );

                // 'career_category:job_category' 形式でターム名を作成し、配列に追加
                foreach ( $career_terms as $career_term ) {
                    foreach ( $job_terms as $job_term ) {
                        $term_name = $career_term . ':' . $job_term;
                        $term_list[] = $term_name;
                    }
                }
            }

            // 重複を除いたタームリストを取得
            $unique_term_list = array_unique( $term_list );

            // タームリストをセレクトボックスの選択肢として追加
            foreach ( $unique_term_list as $term ) {
                $children[$term] = $term;
            }
        }
    }
    return $children;
}
add_filter( 'mwform_choices_mw-wp-form-xxx', 'add_term_list', 10, 2 );

これを追加することで「中途採用:営業職」の様に表示もできるので是非使ってみてください。

今回はこんな感じ!
僕もこの実装で3日くらい頭を悩ませたので、少しでも誰かの役に立てれば幸いヨ。

Twitter(X)のフォローだけでもよろしくお願いいたします。

タイトルとURLをコピーしました