Contact Form 7 4.1 ベータ

Contact Form 7 4.1 がもうすぐリリースされます。4.1 ではユーザー入力の検証プロセスを再構築し、少ないコーディングで済み間違いが起こりにくいようにしました。もし Contact Form 7 のアドオンプラグインでカスタムの入力検証を行うものを作っているなら、Contact Form 7 4.1 で問題なく動くようにコードを修正する必要があるかもしれません。


Contact Form 7 4.1-beta は WordPress.org プラグインディレクトリからダウンロード可能です。Contact Form 7 4.1 が正式リリースされる前にコードをテストされることを強くお勧めします。もしお使いのアドオンプラグインが Contact Form 7 4.1 へのアップグレード後に動かなくなったら、そのプラグインの作者にお知らせください。

Contact Form 7 4.1 では WPCF7_Validation クラスが導入され、入力検証のフィルター関数に渡される引数 $result が WPCF7_Validation クラスのインスタンスに変わります(以前は多次元の連想配列でした)。

WPCF7_Validation クラスは ArrayAccess インタフェースを実装するので、インスタンスはあたかも普通の配列のように配列アクセスを受け付けることができる、ことになっているのですが、残念ながら PHP の ArrayAccess の実装に問題があるようで、ArrayAccess のインスタンスが多次元的な配列アクセスを受け付けません。

もしあなたのアドオンに次のようなコードがあるなら:


if ( $condition_of_invalidity ) {
	$result['valid'] = false;
	$result['reason'][$name] = wpcf7_get_message( 'blar_blar' ); // this line causes an error.
}

Contact Form 7 4.1 以降でも引き続き動くようにするために次のように修正が必要になります:


if ( $condition_of_invalidity ) {
	$result['valid'] = false;
	$result['reason'] = array( $name => wpcf7_get_message( 'blar_blar' ) );
}

もし Contact Form 7 4.0.x 以前との後方互換性を気にしなくてよいのなら、WPCF7_Validation クラスの invalidate() メソッドを使って次のように簡略化できます:


if ( $condition_of_invalidity ) {
	$result->invalidate( $name, wpcf7_get_message( 'blar_blar' ) );
}