2015/01/27に Contact Form 7のversionが 4.1 に上がってプラグインアップデートを実行したら、今まで効いていた入力された内容のエラーチェックがスルーされるようになり、連携してる外部システムとトラブルを起こすようになったので、調べてみたメモです。
まぁ、この件は、2015/01/06から、アナウンスされてた件なんですが、全く気がつかずにPluginのupdateを実行すると、ハマりました。
結論から言うと、
add_filter( ‘wpcf7_validate’, ‘wpcf7_validate_extend’, 10, 2 );
function wpcf7_validate_extend( $result) {if ( checkZip($_POST[‘your-zip’]) ) {
$result[‘valid’] = false;
$result[‘reason’][‘your-zip’] = “ご入力頂いた郵便番号は存在しません。”;
}return $result;
}
を
add_filter( ‘wpcf7_validate’, ‘wpcf7_validate_extend’, 10, 2 );
function wpcf7_validate_extend( $result) {if ( checkZip($_POST[‘your-zip’]) ) {
$result[‘reason’] = array( ‘your-zip’ => “ご入力頂いた郵便番号は存在しません。” );
}
return $result;
}
というようにするか、
add_filter( ‘wpcf7_validate’, ‘wpcf7_validate_extend’, 10, 2 );
function wpcf7_validate_extend( $result) {if ( checkZip($_POST[‘your-zip’]) ) {
$result->invalidate( ‘your-zip’,’ご入力頂いた郵便番号は存在しません。’ );
}return $result;
}
というようにするか、いずれかのように変更しないと入力内容にエラーがあったと認識してくれませんよ、ということになります。
今回の更新で、
$result[‘valid’] = false;
って全く意味無くなってまして、入力値にエラーがあるかどうかの最終判断は、WPCF7_Validation クラスの$invalid_fields配列に値があるかどうか?になってるようです。
WPCF7_Validation の is_valid()の中で、$containerの’valid’の値も見てくれるようにしてくれれば、エラーには成っていたと思いますが、これだと、エラーメッセージがちゃんとセットされないんで、余計に混乱したかなぁ・・・。
まぁ、なんにせよ、 Contact Form 7 をお問い合せだけじゃなくて、何かしらの注文送信や、その他特殊な(?)使い方していると、今回、この部分に関しては、割と大幅な仕様変更だったので、大変ですな、ということですね。
とりあえず、うちが担当している案件みたいにエラーチェックの修正箇所が多くて修正&テストが大変な方は、Contact Form 7 のversionを4.0.3に戻せば良いです。
ご参考まで。