Wordpressのフォームでタームを指定かつ紐づく投稿を一覧で表示したい

実現したいこと

・WordpressのContactform7で2つのセレクトボックスを作成
・1つ目のセレクトボックスには(例)地域(タクソノミー)のターム一覧を表示
・2つ目のセレクトボックスには↑で選択したタームに紐づく投稿の一覧を表示
→functions.phpに記載して、実装したい。

発生している問題・エラーメッセージ

1つ目のセレクトボックスにターム一覧は表示できている。
→並び順が指定できず、並びがバラバラで表示されている。
2つ目のセレクトボックスに何も出力されない状態。

該当のソースコード

PHP

1function filter_wpcf7_form_tag( $scanned_tag, $replace ) {2 3 if (!empty($scanned_tag)) {4 5 // 1つ目のセレクトフォーム6 if ($scanned_tag['name'] == 'term-select') {7 8 // タームを取得9 $terms = get_terms(array(10 'taxonomy' => 'place', // タクソノミー名を指定11 'hide_empty' => false, // 空のタームも表示するかどうか12 ));13 14 if (!empty($terms)) {15 $scanned_tag['values'][] = ''; // デフォルトのオプション(何も選択しない場合)16 $scanned_tag['labels'][] = '以下から選択してください'; // デフォルトのオプションの表示名17 18 foreach ($terms as $term) {19 $term_name = $term->name;20 $term_slug = $term->slug;21 22 // セレクトフォームのオプションに追加23 $scanned_tag['values'][] = $term_slug;24 $scanned_tag['labels'][] = $term_name;25 }26 }27 }28 }29 30 $selected_term = isset($_POST['term-select']) ? sanitize_text_field($_POST['term-select']) : '';31 32 // 2つ目のセレクトフォーム(選択されたタームに関連する投稿を表示)33 if ($scanned_tag['name'] == 'post-select') {34 35 if (!empty($selected_term)) {36 echo 'Selected Term: ' . $selected_term;37 38 if (!empty($selected_term)) {39 // 選択されたタームに関連する投稿を取得40 $args = array(41 'posts_per_page' => -1,42 'post_type' => 'list', // 投稿タイプを指定43 'tax_query' => array(44 array(45 'taxonomy' => 'place', // タクソノミー名を指定46 'field' => 'slug',47 'terms' => $selected_term,48 ),49 ),50 );51 52 $customPosts = get_posts($args);53 54 if (!empty($customPosts)) {55 $scanned_tag['values'][] = ''; // デフォルトのオプション(何も選択しない場合)56 $scanned_tag['labels'][] = 'Select Post'; // デフォルトのオプションの表示名57 58 foreach ($customPosts as $post) {59 setup_postdata($post);60 $post_title = get_the_title();61 62 // セレクトフォームのオプションに追加63 $scanned_tag['values'][] = $post_title;64 $scanned_tag['labels'][] = $post_title;65 }66 67 wp_reset_postdata();68 }69 }70 }71 }72 73 return $scanned_tag; 74}75 76add_filter('wpcf7_form_tag', 'filter_wpcf7_form_tag', 11, 2);77

試したこと

javascriptに追記するなどしてみましたが、うまく動作しませんでした。
どなたかお分かりになりましたらご教授いただきたいです。

コメントを投稿

0 コメント