お問い合わせフォームのなどで生年月日を聞きたい時に、西暦をプルダウンメニューで選択してもらうことがあります。
例えば対象が20歳から60歳という場合は、年が変わるごとにプルダウンメニューの内容を変更しなければなりません。
PHPで開発している場合は動的に生成させればいいですが、wordpressのプラグイン「Contact Form7」を利用している場合は毎年手作業になってしまします。
そこで、Contact Form7でもプルダウンメニューの内容が動的に生成されるようにカスタマイズしました。
fanctions.phpに下記のコードをコピペしてください。
開始年と期間はそれぞれお好みで調整してください。
wpcf7_add_form_tag('from_birth_year','make_from_birth_year',true);
wpcf7_add_form_tag('from_birth_year*','make_from_birth_year',true);
function make_from_birth_year($tag){
//開始年(今年からの差分年数)
$start = -59;
//期間
$period = 41;
//デフォルト
$default=array(
'until'=>$period,
);
//開始年
$start_year = intval(date_i18n('Y')) + $start;
// オプション値
$t = new WPCF7_FormTag($tag);
//何年後まで
$until=$t->get_option('until','int',true);
if($until===false)$until=$default['until'];
// html組み立て
$class=($class=$t->get_option('class','',true))?' class="'.esc_attr($class).'"':'';
$id=($id=$t->get_option('id','',true))?' id="'.esc_attr($id).'"':'';
$result='<span class="wpcf7-form-control-wrap '.esc_attr($tag['name']).'">';
$result.='<select name="'.esc_attr($tag['name']).'"'.$class.$id.'>';
if($t->has_option('include_blank'))$result.='<option value="">—</option>';//先頭に空白値
for($i=0;$i<$until;$i++){
$year=$start_year+$i;
$result.='<option value="'.$year.'">'.$year.'</option>';
}
$result.='</select></span>';
return $result;
}
// バリデート
add_filter( 'wpcf7_validate_from_birth_year*', 'wpcf7_custom_from_birth_year_validation', 10, 2 );
function wpcf7_custom_from_birth_year_validation( $result, $tag ) {
$type = $tag['type'];
$name = $tag['name'];
if($type=='from_birth_year' || $type=='from_birth_year*'){
$year =isset($_POST[$name])?trim($_POST[$name]):'';
if (!$year) {
if (method_exists($result, 'invalidate')) {
$result->invalidate($tag,'入力必須の項目が入力されていません。');//エラーメッセージ
}else{
$result['valid'] = false;
$result['reason'] = array($name=>'入力必須の項目が入力されていません。');//エラーメッセージ
}
}
}
return $result;
}
コンタクトフォーム作成時の[select]の代わりに
[from_birth_year]を使ってください。
設定は以上です。