[WordPress]ContactForm7でリンク元によってドロップダウンのデフォルト値を変える

1420828181_Wordpress

たとえば。

お問合せページはひとつなんだけど、

リンク元が幾つかあり、

リンク元によって、リンク先(つまりお問合せページ)に設置している「お問合せ区分」などのドロップダウンのデフォルト値を変えたい

という場合の方法です。

ユーザーのお手を煩わせることなく、ドロップダウンを設定してあげようということです。

 

ContactForm7のテキストエリアへの値セットは簡単なんだけど

本題からは外れますが、ContactForm7のテキストエリアへの値セットの方法も書いておきます。
[php]//テーマフォルダのfunctions.phpに下記のコードを追加する。

function my_form_tag_filter($tag){

    if ( !is_array( $tag ) )
  return $tag;
    
    //たとえば記事タイトルを取得してテキストエリアにセットする場合

     //タイトル取得
$posttitle = get_the_title();
    
    //タイトルが取得できたら
if(isset($posttitle)){
    
        //ContactForm7のnameを取得して
$name = $tag[‘name’]; 

          //nameが設定したいテキストエリアと一致したら(ここでは’posttitle’というテキストエリアをContactForm7に作成している場合)
if($name == ‘posttitle’)

            //値(values)に取得したタイトルをセットして
$tag[‘values’] = (array) $posttitle;
}

    //返す
return $tag;
}
add_filter(‘wpcf7_form_tag’, ‘my_form_tag_filter’, 11);[/php]
 

ドロップダウンリストのデフォルト値をセットする

まず、ContactForm7のドロップダウンリストのデフォルト値は、フォーム設定画面で簡単に設定できます。

[select* ctf7-category id:ctf7-category default:3 “セレクト1” “セレクト2” “セレクト3”] と記述した場合は、’ default:3’ なのでデフォルト値が”セレクト3” になります。

でも今回は、リンク元によってこのデフォルト値を変えたいのです。

その場合は、先ほどのコードに追加します。
[php]//テーマフォルダのfunctions.phpに下記のコードを追加する。

function my_form_tag_filter($tag){

    if ( !is_array( $tag ) )
  return $tag;

    //お問合せページだったら
    if(is_page(‘inquiry’)){

        //リンク元の情報をGETで取得する(’ctfcat’に値を渡している場合)
        //デフォルト値として設定したい数値を$_GET[‘ctfcat’]に渡す
if(isset($_GET[‘ctfcat’])){

            //ここでは引数は一つなので[0]だけを取得している
$ctfcat = $_GET[‘ctfcat’][0];

            //ContactForm7のnameを取得して
$name = $tag[‘name’];

            //nameが設定したいテキストエリアと一致したら
if($name == ‘ctf7-category’){

                //※ここのセットの方法がテキストエリアと違う
                //要素のオプションにデフォルト値の番号を設定する
$tag[‘options’][1] = ‘default:’.$ctfcat;
}
}

}

    
    //たとえば記事タイトルを取得してテキストエリアにセットする場合

     //タイトル取得
$posttitle = get_the_title();
    
    //タイトルが取得できたら
if(isset($posttitle)){
    
        //ContactForm7のnameを取得して
$name = $tag[‘name’]; 

          //nameが設定したいテキストエリアと一致したら(ここでは’posttitle’というテキストエリアをContactForm7に作成している場合)
if($name == ‘posttitle’)

            //値(values)に取得したタイトルをセットして
$tag[‘values’] = (array) $posttitle;
}

    //返す
return $tag;
}
add_filter(‘wpcf7_form_tag’, ‘my_form_tag_filter’, 11);[/php]
 

上のコードの26行目”$tag[‘options’]”というのは

ContactForm7の設定画面でタグを作成したときにつけたオプションのことです。

たとえば、下のようなタグを作成した場合は、

[select* ctf7-category id:ctf7-category default:3 “セレクト1” “セレクト2” “セレクト3”]

オプションの1つ目にidを、2つ目にdefaultを設定しているので、先ほどのコードの26行目のように$tag[‘options’][1]がdefaultとなります。$tag[‘options’][0]としちゃうとidにセットすることになってしまいます。

 

仕上げに

リンク元のa要素に引数をくっつけないといけません。
[html]/* リンク先URLの末尾に引数をくっつける */

<a href="http://koa-labo.com/inquiry?ctfcat=1">セレクト1</a>
<a href="http://koa-labo.com/inquiry?ctfcat=2">セレクト2</a>
<a href="http://koa-labo.com/inquiry?ctfcat=3">セレクト3</a>

/* これでセレクト1をクリックしたらリンク元のドロップダウンリストはセレクト1が、
セレクト2をクリックしたらリンク元のドロップダウンリストはセレクト2が、
セレクト3をクリックしたらリンク元のドロップダウンリストはセレクト3が、
選ばれているはず */

[/html]
 

できあがりです

悩んでいる方のお役に立てればうれしいです。