前提・実現したいこと
contactform7を使用して予約フォームを制作しています。
カスタム投稿タイプのタイトルをプルダウンに呼び出すことはできましたが、「指名なし」という選択肢も表示させたいと考えていますが、うまくいきません。
どうしたら「指名なし」をプルダウンの先頭に表示させることができるでしょうか。
functions.phpに下記のコードを書き加えて
該当のソースコード
// Contact Form 7 が導入されていて wpcf7_add_form_tag が有効な場合のみ if( function_exists('wpcf7_add_form_tag') ) { // ※タグを出力するfunctionを先に記述していないと上手く動作しない function make_talent_select_tag($tag) { // 基本的な設定は参考にするタグの出力の仕方を参考に $t = new WPCF7_Shortcode($tag); $atts = []; $class = wpcf7_form_controls_class( $tag->type ); $atts['class'] = $tag->get_class_option( $class ); $atts['id'] = $tag->get_id_option(); $atts['name'] = $tag->name; $name = sanitize_html_class( $atts['name'] ); if ( $tag->is_required() ) { $atts['aria-required'] = 'true'; } $atts['aria-invalid'] = $validation_error ? 'true' : 'false'; // デフォルト選択 selected:値 というオプションがあれば該当するoptionタグを selected にする $default = $tag->get_option( 'selected', '', true ); // first_as_label オプションで先頭を未選択状態の文字を表示できるようにする $first_as_label = $tag->has_option( 'first_as_label' ); $values = $tag->values; $options = ''; if( $first_as_label && count($values)) { $options = '<option value>' . esc_html($values[0]) . '</option>'; } // タレント名一覧を取得してセレクトタグのオプションにする $talents = get_talent_name_list(); foreach($talents as $val) { $value = esc_attr($val); $selected = ""; // デフォルト選択に該当している場合 selected 属性を出力する if( $default == $value) { $selected = ' selected="selected"'; } $options .= '<option value="' . $value . '"' . $selected . '>' . esc_html($val) . '</option>'; } $atts = wpcf7_format_atts( $atts ); $html = sprintf( '<span class="wpcf7-form-control-wrap %1$s"><select %2$s>%3$s</select></span>', $name, $atts, $options ); // 出力するタグのHTMLを返す return $html; } // ショートコードなどを登録 wpcf7_add_form_tag(['select_talent_list', 'select_talent_list*'], 'make_talent_select_tag', [ 'name-attr' => true, 'selectable-values' => true, ] ); // バリデーションは 元の select のものを利用 add_filter( 'wpcf7_validate_select_talent_list', 'wpcf7_select_validation_filter', 10, 2 ); add_filter( 'wpcf7_validate_select_talent_list*', 'wpcf7_select_validation_filter', 10, 2 ); } // カスタム投稿タイプ `●●●●` のタイトル(名前)を返す function get_talent_name_list() { $data = []; $args = array( 'post_type' => '●●●●', 'post_status' => 'publish', 'posts_per_page' => -1, 'orderby' => [ 'menu_order' => 'ASC', 'date' => 'ASC', ], ); $the_query = new WP_Query($args); if ( $the_query->have_posts() ) { while ( $the_query->have_posts() ) { $the_query->the_post(); $talentName = get_the_title(); $data[] = $talentName; } } // reset query wp_reset_postdata(); return $data; }
contactform7のフォームにはこのようにしてあります。
[select_talent_list* select_talent id:selectTalent class:select first_as_label "---"]
この時の表示は
<select name="select_talent" class="wpcf7-form-control wpcf7-select_talent_list wpcf7-validates-as-required select" id="selectTalent" aria-required="true" aria-invalid="false"> <option value="">---</option> <option value="011">011</option> <option value="010">010</option> <option value="009">009</option> <option value="008">008</option> <option value="007">007</option> <option value="006">006</option> <option value="005">005</option> <option value="004">004</option> <option value="003">003</option> <option value="002">002</option> <option value="001">001</option> </select>
となり、選択必須にしてあります。
未選択のまま送信すると必須項目未入力エラーになります。
<select name="select_talent" class="wpcf7-form-control wpcf7-select_talent_list wpcf7-validates-as-required select" id="selectTalent" aria-required="true" aria-invalid="false"> <option value="">---</option> <option value="指名なし">指名なし</option> <option value="011">011</option> <option value="010">010</option> <option value="009">009</option> <option value="008">008</option> <option value="007">007</option> <option value="006">006</option> <option value="005">005</option> <option value="004">004</option> <option value="003">003</option> <option value="002">002</option> <option value="001">001</option> </select>
というようにしたいと考えています。
教えていただけないでしょうか。
どうかよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。