サポート » プラグイン » Contact Form7のセレクトボックスにターム一覧を表示させたい

  • 解決済 nagisane

    (@nagisane)


    この度、コンタクトフォーム7を使って、特定のカスタムタクソノミーの全てのターム一覧を取得して選択ができるようなセレクトボックスを作りたいと思っています。

    インターネットで調べたところ、Function.phpに記述することによってカスタムポストのタイトル一覧の取得ができる方法は見つけたのですが、全てのターム一覧を取得する方法が見つからず困っています。

    近いもので下記のページを見つけ、書き換えればなんとかなるのではないかと試行錯誤しましたが、解決できませんでした。
    タームの値をcontactform7で選択できるようにしたい/

    上記ページを参考に書いたコードは下記の通りです。

    add_filter( 'do_shortcode_tag', function( $output, $tag ) {
    	if ( 'contact-form-7' == $tag || 'contact-form' == $tag ) {
    
    		$id = 40;          // コンタクトフォームの ID。
    		$name = 'product-select'; // ドロップダウンメニューの名前。
    		$tax = 'use_item';       // タクソノミーのスラッグ。
    		$terms = get_terms( $tax );
    			$options = '';
    			$output = preg_replace( '/(.*?<select name="' . $name . '\[\].*?>)(.*?)(<\/select>)/i', '${1}' . $options . '${3}', $output );
    	}
    	return $output;
    }, 10, 3 );

    当方初心者のため、かなりトンチンカンな修正をしているかと思うのですが、どのように変えれば全てのタームをセレクトボックスに表示できるか、わかる方がいらっしゃいましたら、教えていただきたいです。

    何卒よろしくお願いいたします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    こんな感じでどうでしょう。

    add_filter( 'do_shortcode_tag', function( $output, $tag, $attr ) {
    	if ( 'contact-form-7' === $tag || 'contact-form' === $tag ) {
    
    		$id   = 40;               // コンタクトフォームの ID。
    		$name = 'product-select'; // ドロップダウンメニューの名前。
    		$tax  = 'use_item';       // タクソノミーのスラッグ。
    
    		if ( $id == $attr['id'] ) {
    			$terms = get_terms( $tax, array( 'hide_empty' => false) );
    			if ( ! empty( $terms ) && ! is_wp_error( $terms ) ) {
    				$options = '<option value="">---</option>';
    				foreach( $terms as $term ) {
    					$options .= '<option value="' . esc_attr( $term->name ) . '">' . esc_html( $term->name ) . '</option>';
    				}
    				$output = preg_replace( '/(<select .*?name="' . $name . '".*?>)(.*?)(<\/select>)/i', '${1}' . $options . '${3}', $output );
    			}
    		}
    	}
    	return $output;
    }, 10, 3 );
    トピック投稿者 nagisane

    (@nagisane)

    @ishitaka

    ご回答ありがとうございます!
    上記の通り入力してみたところ無事に全てのタームを取得することができました!

    かなり行き詰まってしまっていたので本当に助かりました。
    ご親切に回答いただき本当にありがとうございました!!

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「Contact Form7のセレクトボックスにターム一覧を表示させたい」には新たに返信することはできません。