質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

967閲覧

WordPress ContactForm7 カスタム投稿タイプから値を取り出して表示

JAMJP

総合スコア13

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2020/02/13 14:13

前提・実現したいこと

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>

というようにしたいと考えています。
教えていただけないでしょうか。
どうかよろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

<option value="指名しない">指名しない</option>

のコードを

$options = ''; if( $first_as_label && count($values)) { $options = '<option value>' . esc_html($values[0]) . '</option>'; }

追加して表示させました。

$options = ''; if( $first_as_label && count($values)) { $options = '<option value>' . esc_html($values[0]) . '</option><option value="指名しない">指名しない</option>'; }

投稿2020/02/13 15:13

JAMJP

総合スコア13

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問