[WordPress]Contact Form 7でドロップダウン日付にデフォルトで今日をセット

  • 公開日:2014/9/30
  • 最終更新日:2020/1/13

Contact Form 7で申し込みフォームにおいて、ドロップダウンで用意した日付項目に今日の日付をデフォルトとしてセットする方法です。
そもそもContact Form 7 DatePickerが使えれば簡単なことなのですが、今回はサーバーの関係上、WordPressのバージョンが3.1.4と古かったためにこのような対応が必要となりました。

Contact Form 7 の対象項目の記述

<dt>日付</dt>
<dd>
[select custom_m "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12"]月
[select custom_d "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28" "29" "30" "31"]日
</dd>

functions.phpに以下を追加

function my_form_tag_filter($tag) { 
    if (!is_array($tag)) 
    return $tag; 

    //今日の日付を取得 
    $today_m = date('n'); 
    $today_d = date('j'); 

    //取得した今日の日付をデフォルト値としてセット 
    $name = $tag['name']; 
    if ($name == 'custom_m') { 
        $tag['options'][0] = 'default:'.$today_m; 
    } 
    if ($name == 'custom_d') { 
        $tag['options'][0] = 'default:'.$today_d; 
    } 
    return $tag; 
} 
add_filter('wpcf7_form_tag', 'my_form_tag_filter', 11);

6・7行目:今日の日付を$today_m、$today_dに先頭にゼロを付けないフォーマットでセット
12・15行目:それぞれをContact Form 7の対象の項目にデフォルト値としてセット

Contact Form 7のテキストエリアにデフォルト値をセットする場合は、

$tag['values'] = (array) $default_text;

といったふうになりますが、今回はドロップダウンなので「values」ではなく「options」にセットしています。

[0]の部分はオプションの順番(任意)なので注意が必要です。
例えば、次のようなタグで作成している場合は、

[select* ctf7-custom id:ctf7-custom default:2 "セレクト1" "セレクト2" "セレクト3"]

オプションの1つ目にid、2つ目にdefaultを設定しているので、さっきのように$tag[‘options’][0]に値をセットするとidにセットすることになってしまいます。この場合であれば$tag[‘options’][1]にするとデフォルト値としてセットできます。

参考サイト
[WordPress]ContactForm7でリンク元によってドロップダウンのデフォルト値を変える
WordPress Contact Form 7 GETで値を渡してselectを選択する方法。