Title: タームの値をCF7で選択でき選択不可の設定もしたい
Last modified: 2021年6月9日

---

# タームの値をCF7で選択でき選択不可の設定もしたい

 *  解決済 [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * (@ilnel)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/)
 * 初めて投稿します。
    カスタム投稿のsingle.phpにContactform7を設置しております。
   タクソノミーのタームの値をすべてContactform7のselectに表示し、タームにチェック
   が入っていれば選択でき、チェックを外すと表示される（グレーなど色変更）が選択でき
   ないようにしたく、 functions.phpに設定を書き、CF7のショートコードにデータを渡し
   たいと思っておりますが、タームの値をselectに表示する事すらできない状態です。
 * [https://stackoverflow.com/questions/27867260/contact-form-7-and-custom-post-type](https://stackoverflow.com/questions/27867260/contact-form-7-and-custom-post-type)
   
   を参考に、カスタム投稿のタイトルをContactform7のselectに表示する事は出来ました
   が、応用ができず困っております。
 * [https://whitewood-hp.com/web-tips/archives/3911](https://whitewood-hp.com/web-tips/archives/3911)
   
   を参考にカスタムフィールドの選択肢の値を「$_POST」を使ってContactform7に渡す記述
   方法も試しましたがうまくいかず、困っています。
 * 何かいい書き方や方法があれば教えていただきたいです。
    よろしくお願いいたします。
    -  このトピックは[ilnel](https://ja.wordpress.org/support/users/ilnel/)が5年、
      4ヶ月前に変更しました。
    -  このトピックは[ilnel](https://ja.wordpress.org/support/users/ilnel/)が5年、
      4ヶ月前に変更しました。

10件の返信を表示中 - 1 - 10件目 (全10件中)

 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672296)
 * こんにちは
 * > チェックを外すと表示される（グレーなど色変更）が選択できないようにしたく、
 * option タグに disabled を指定することになると思いますが、wpcf7_form_tag では指定
   出来ないようです。
 * ショートコードで出力される select タグを書換える (do_shortcode_tag フック辺り)
   ことになるのかなと思います。
    例:
 *     ```
       add_filter( 'do_shortcode_tag', function( $output, $tag, $attr ) {
       	if ( 'contact-form-7' == $tag || 'contact-form' == $tag ) {
   
       		// ここで select タグを書換える。
       		//$output = preg_replace( '/(.*?<select name="ドロップダウンメニューの名前.*?>)(.*?)(<\/select>)/i', '${1}<option value="foo" disabled>foo</option>${3}', $output );
   
       	}
       	return $output;
       }, 10, 3 );
       ```
   
 *  トピック投稿者 [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * (@ilnel)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672297)
 * アドバイスありがとうございます！
    まだそこまでできておりませんが、参考にいたし
   ます！
 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672298)
 * とりあえずひととおり動くサンプルコードを書いてみました。
 *     ```
       add_filter( 'do_shortcode_tag', function( $output, $tag, $attr ) {
       	if ( 'contact-form-7' == $tag || 'contact-form' == $tag ) {
   
       		$id = 123;          // コンタクトフォームの ID。
       		$name = 'menu-123'; // ドロップダウンメニューの名前。
       		$tax = 'foo';       // タクソノミーのスラッグ。
   
       		if ( $id == $attr['id'] ) {
       			$terms = get_terms( $tax, array( 'hide_empty' => false) );
       			$selected = get_the_terms( get_the_ID(), $tax );
       			$term_ids = array_column( $selected, 'term_id' );
   
       			$options = '';
       			foreach( $terms as $term ) {
       				$disabled = ( false !== array_search( $term->term_id, $term_ids ) ) ? '' : ' disabled';
       				$options .= '<option value="' . esc_attr( $term->name ) . '"' . $disabled . '>' . esc_html( $term->name ) . '</option>';
       			}
       			$output = preg_replace( '/(.*?<select name="' . $name . '\[\].*?>)(.*?)(<\/select>)/i', '${1}' . $options . '${3}', $output );
       		}
       	}
       	return $output;
       }, 10, 3 );
       ```
   
 *  トピック投稿者 [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * (@ilnel)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672299)
 * ありがとうございます！
 * サンプルコードを、functions.phpに書き、下の値をそれぞれ変更し
    $id = 123; // 
   コンタクトフォームの ID。 $name = ‘menu-123’; // ドロップダウンメニューの名前。
   $tax = ‘foo’; // タクソノミーのスラッグ。
 * 管理画面のフォームも下記のように変更しましたが、
    そのまま表示されるか、空っぽ
   のselectボックスが表示されるかでうまく表示されません。。。 ［menu-123］や［select
   menu-123］
    -  この返信は5年、 4ヶ月前に[ilnel](https://ja.wordpress.org/support/users/ilnel/)
      が編集しました。
    -  この返信は5年、 4ヶ月前に[ilnel](https://ja.wordpress.org/support/users/ilnel/)
      が編集しました。
 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672306)
 * すみません、正規表現の検索パターンを間違えていました。
    こちらではどうでしょう
   か。 `$output = preg_replace( '/(.*?<select name="' . $name . '\[\].*?>)(.*?)(
   <\/select>)/i', '${1}' . $options . '${3}', $output );` ↓ `$output = preg_replace('/(.*?
   <select.*?name="' . $name . '[\["].*?>)(.*?)(<\/select>)/i', '${1}' . $options.'
   ${3}', $output );`
    -  この返信は5年、 4ヶ月前に[ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
      が編集しました。
 *  トピック投稿者 [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * (@ilnel)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672328)
 * ありがとうございます！サンプルコードを入れ直してみましたが、やはりうまく表示さ
   れません。。。
 * 別の書き方で、タームの値をselectボックスに出すことまではできましたが、チェック
   の有無による選択制限がうまくいきません。
 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672336)
 * 検証してみました。結果、問題なく表示されました。
 * get_terms() で指定のタクソノミーの全タームを取得して、get_the_terms() で投稿で
   チェックされているタームを取得しています。
 *     ```
       $terms = get_terms( $tax, array( 'hide_empty' => false) );
       $selected = get_the_terms( get_the_ID(), $tax );
       $term_ids = array_column( $selected, 'term_id' );
       ```
   
 * この辺を変更すればいいのかなと思いますが、ちょっと分かりません。m(__)m
 *  トピック投稿者 [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * (@ilnel)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672338)
 * できました！！ありがとうございます！！
    複数の設定を行っても動き、メールにも反映
   されました！
 * ただ「first_as_label」や「必須」の設定は効いていないようなので、設定が必要そう
   です。。
 *  [ishitaka](https://ja.wordpress.org/support/users/ishitaka/)
 * (@ishitaka)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672341)
 * 「first_as_label」を有効にするには、下記のように変更 (${2} を追加) すればできる
   と思います。
    `$output = preg_replace( '/(.*?<select.*?name="' . $name . '[\["].*?
   >)(.*?)(<\/select>)/i', '${1}' . $options . '${3}', $output );` ↓ `$output = 
   preg_replace( '/(.*?<select.*?name="' . $name . '[\["].*?>)(.*?)(<\/select>)/
   i', '${1}${2}' . $options . '${3}', $output );`
 * 「必須」の設定は効いていると思うのですが…
 *  トピック投稿者 [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * (@ilnel)
 * [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672354)
 * ありがとうございます！どちらもできました！！
 * 今回実装したいことがどこにも書いてなくて、半ば諦めかけていたので本当に救われま
   した！！
    丁寧に教えてくださりありがとうございました！！
    -  この返信は5年、 4ヶ月前に[ilnel](https://ja.wordpress.org/support/users/ilnel/)
      が編集しました。

10件の返信を表示中 - 1 - 10件目 (全10件中)

 トピック「タームの値をCF7で選択でき選択不可の設定もしたい」には新たに返信すること
はできません。

## タグ

 * [ACF](https://ja.wordpress.org/support/topic-tag/acf/)
 * [Advanced Custom Fields](https://ja.wordpress.org/support/topic-tag/advanced-custom-fields/)
 * [カスタムフィールド](https://ja.wordpress.org/support/topic-tag/%e3%82%ab%e3%82%b9%e3%82%bf%e3%83%a0%e3%83%95%e3%82%a3%e3%83%bc%e3%83%ab%e3%83%89/)
 * [コンタクトフォーム](https://ja.wordpress.org/support/topic-tag/%e3%82%b3%e3%83%b3%e3%82%bf%e3%82%af%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a0/)
 * [コンタクトフォーム7](https://ja.wordpress.org/support/topic-tag/%e3%82%b3%e3%83%b3%e3%82%bf%e3%82%af%e3%83%88%e3%83%95%e3%82%a9%e3%83%bc%e3%83%a07/)
 * [CF7](https://ja.wordpress.org/support/topic-tag/cf7/)
 * [Contact Form 7](https://ja.wordpress.org/support/topic-tag/contact-form-7/)
 * [contactform7](https://ja.wordpress.org/support/topic-tag/contactform7/)

 * フォーラム: [プラグイン](https://ja.wordpress.org/support/forum/plugins/)
 * 10件の返信
 * 2人の参加者
 * 最後の返信者: [ilnel](https://ja.wordpress.org/support/users/ilnel/)
 * 最後の活動: [5年、 4ヶ月前](https://ja.wordpress.org/support/topic/%e3%82%bf%e3%83%bc%e3%83%a0%e3%81%ae%e5%80%a4%e3%82%92contactform7%e3%81%a7%e9%81%b8%e6%8a%9e%e3%81%a7%e3%81%8d%e3%82%8b%e3%82%88%e3%81%86%e3%81%ab%e3%81%97%e3%81%9f%e3%81%84/#post-11672354)
 * 状態: 解決済

## トピック

### 人気のトピック

### 返信がないトピック

### サポート関連ではないトピック

### 解決済みのトピック

### 未解決のトピック

### すべてのトピック
