Contact Form 7 4.1 Beta

La versión 4.1 de Contact Form 7 se publicará próximamente. En esta versión, he reconstruido el proceso de validación de los datos introducidos por el usuario para reducir la cantidad de código necesario y evitar errores. Si desarrollas plugins complementarios para Contact Form 7 que añaden validaciones personalizadas, es posible que tengas que modificar tu código para que funcione con Contact Form 7 4.1.


Puedes descargar Contact Form 7 4.1-beta desde el directorio de plugins de WordPress.org. Te recomiendo encarecidamente que pruebes tu código con la versión beta antes del lanzamiento oficial de Contact Form 7 4.1. Si, después de actualizar a Contact Form 7 4.1, un plugin complementario que utilizas deja de funcionar, informa de ello al autor del plugin.

En Contact Form 7 4.1 se ha introducido la clase `WPCF7_Validation`. El parámetro `$result` que se pasa a las funciones de los filtros de validación ahora es una instancia de la clase `WPCF7_Validation` (anteriormente, era un array asociativo multidimensional).

La clase `WPCF7_Validation` implementa la interfaz `ArrayAccess`, por lo que se supone que sus instancias permiten acceder a sus elementos mediante la sintaxis de los arrays, como si fueran arrays normales. Por desgracia, parece que existe un defecto en la implementación de `ArrayAccess` de PHP, ya que no es posible acceder a una instancia de `ArrayAccess` mediante índices multidimensionales.

Si tu plugin contiene un código como este:


if ( $condition_of_invalidity ) {
	$result['valid'] = false;
	$result['reason'][$name] = wpcf7_get_message( 'blar_blar' ); // esta línea provoca un error.
}

Debes modificarlo de la siguiente manera para que siga funcionando en Contact Form 7 4.1 y versiones posteriores:


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

Si no necesitas mantener la compatibilidad con Contact Form 7 4.0.x o versiones anteriores, puedes simplificar el código utilizando el método `invalidate()` de la clase `WPCF7_Validation`:


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