コンタクトフォーム7の日付バリデーションを変更する。
コンタクトフォームのバージョンが7 3.4にあがってHTML5のタグが使えるようになりました。
そこで、今までtextで登録してもらっていた日付部分をdateに変更しました。クローム等のブラウザではカレンダーが表示されるので
登録が便利になるだろうと思ってやったのですが、しばらくすると日付の部分がエラーがでて送れないという苦情がきました。
おかしいなと調べてみると、どうもクロームのカレンダーで送られる形式は2013-04-01のように区切りがハイフンで、コンタクトフォームのバリデーションもそれに準じた設定になっていました。
しかし、今まで日付を入力してもらっていたのは2013/04/01 等の/で区切る形で送ってもらっていたので、そこでエラーが出たようです。
どうにかならないのかとプラグインを調べてみましたら、wpcf7_is_dateというフィルターフックがありました。
wpcf7_is_dateは日付がただしいかチェックする関数で一番最後にフィルターがかかっていたのでそこに割り込んで新しいバリデーションを追加しました。
function wpcf7_is_date_new( $result,$date ) { $result = preg_match( '/^([0-9]{4,})[-\/]([0-9]{2})[-\/]([0-9]{2})$/', $date, $matches ); if ( $result ) $result = checkdate( $matches[2], $matches[3], $matches[1] ); return $result; } add_filter( 'wpcf7_is_date', 'wpcf7_is_date_new', 10,2 );
これで 2013/04/01 でも 2013-04-01でも日付エラーがでなくなりました。
難点は2013-04/01でも通ってしまう事ですね。
マッチ条件を変更ではなく、マッチ前に/を-に置換したほうがいいかもしれません。