Contact Form 7が 4.1 になって、急に入力内容チェック(validate)がスルーされるようになったので調べたメモ

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に戻せば良いです。
 
ご参考まで。
 
 

↓拡散のお手伝いお願いします