Los artículos de la categoría Manual del desarrollador abordan temas que requieren conocimiento técnico. Ten cuidado y utiliza las técnicas descritas a continuación bajo tu propia responsabilidad. Si no tienes experiencia en desarrollo, y necesitas ayuda, te recomendamos solicitar el apoyo de un profesional.
En la terminología de Schema-Woven Validation, una regla compuesta es una regla que contiene un conjunto de reglas secundarias. La versión 5.9 de Contact Form 7 y las versiones posteriores admiten los tipos de reglas compuestas all y any, con los que puedes implementar lógica condicional en la validación de los datos introducidos por el usuario.
La regla All
Una regla all comprueba que se cumplan todas las reglas secundarias incluidas en la propiedad rules. El siguiente fragmento de JSON muestra un ejemplo de una regla all:
{
"rule": "all",
"rules": [
{
"rule": "required",
"field": "adelie",
"error": "¡Elige un pingüino de Adelia!"
},
{
"rule": "required",
"field": "emperor",
"error": "¡Elige un pingüino emperador!"
}
]
}
Las reglas secundarias se evalúan en orden, de arriba abajo. Si una de ellas no se cumple, la iteración se detiene y el procesador no evalúa las reglas secundarias restantes. Puedes aprovechar este comportamiento de una regla all para utilizar una regla secundaria como una condición que determine si deben evaluarse las siguientes reglas secundarias.
Si una regla secundaria no supera la validación y tiene definidas las propiedades error y field, estas propiedades prevalecen sobre las correspondientes de la regla principal. Si ni la regla secundaria que ha fallado ni su regla principal all tienen definida la propiedad error, no se mostrará ningún mensaje de error de validación.
La regla Any
Una regla any comprueba que se cumpla al menos una de las reglas secundarias incluidas en la propiedad rules. El siguiente fragmento de JSON muestra un ejemplo de una regla any:
{
"rule": "any",
"field": "humboldt",
"error": "¡Elige un pingüino!",
"rules": [
{
"rule": "required",
"field": "gentoo"
},
{
"rule": "required",
"field": "humboldt"
}
]
}
Las reglas secundarias se evalúan en orden, de arriba abajo. Si una de ellas se cumple, la iteración se detiene y el procesador no evalúa las reglas secundarias restantes.
Si una regla any no se cumple (es decir, ninguna de sus reglas secundarias se cumple) y tiene definidas las propiedades error y field, el mensaje de error especificado en la propiedad error se mostrará en el campo indicado por la propiedad field.
Implementar una regla compuesta
Para añadir una regla compuesta (como las reglas all y any descritas anteriormente) al esquema de validación, primero crea un objeto de regla principal mediante la función wpcf7_swv_create_rule() y, a continuación, añade las reglas secundarias mediante el método add_rule() de la regla principal.
add_action(
'wpcf7_swv_create_schema',
function ( $schema, $contact_form ) {
// All rule
$all_rule = wpcf7_swv_create_rule( 'all' );
$all_rule->add_rule(
wpcf7_swv_create_rule( 'required', array(
'field' => 'adelie',
'error' => "¡Elige un pingüino Adelia!",
) )
);
$all_rule->add_rule(
wpcf7_swv_create_rule( 'required', array(
'field' => 'emperor',
'error' => "¡Elige un pingüino emperador!",
) )
);
// Añadiendo la regla «All» al schema
$schema->add_rule( $all_rule );
// Regla «Any»
$any_rule = wpcf7_swv_create_rule( 'any', array(
'field' => 'humboldt',
'error' => "¡Elige un pingüino!",
) );
$any_rule->add_rule(
wpcf7_swv_create_rule( 'required', array(
'field' => 'gentoo',
) )
);
$any_rule->add_rule(
wpcf7_swv_create_rule( 'required', array(
'field' => 'humboldt',
) )
);
// Añadiendo la regla «Any» al schema
$schema->add_rule( $any_rule );
},
10, 2
);