Campos requeridos condicionales para WordPress Contact Form 7

1 jul 2015, 18:51:27
Vistas: 22.4K
Votos: 1

Sé que esto podría considerarse fuera de tema, pero no estoy seguro de dónde más publicarlo ya que también se relaciona tanto con WordPress como con el plugin Contact Form 7. Si sabes dónde debería publicar esto además de aquí, por favor dímelo.


Estoy buscando tener un campo requerido condicionalmente. He encontrado código que funciona pero creo que me estoy confundiendo y necesito una perspectiva externa.

Lo que necesito que funcione es que si mi casilla de verificación está marcada como "sí", hará que el menú desplegable junto a ella sea obligatorio, y si la casilla está marcada como "no", no será obligatorio.

Esto es lo que tengo como formulario con el shortcode en el backend:

Si has pedido con nosotros antes, ¿ya trabajas con uno de nuestros representantes de ventas externos?
[checkbox* check-sales id:checksales "Sí" "No"]

Si marcaste "Sí", ¿con qué representante tratas generalmente?
[select sales-rep id:sales include_blank "Marla" "Lisa" "Wendy" "Stacy" "Nicole" "Linda" "Jody" "Gisele" "Ray" "Craig"]

[submit]

Y aquí está el ejemplo de código PHP que va en el archivo functions.php.

function is_gmail($email) {  
      // Comprobar si es una dirección de gmail
      if(substr($email, -10) == '@gmail.com') {  
           return true;  
      } else {  
           return false;  
      };  
 };  
 function custom_email_validation_filter($result, $tag) {  
      $type = $tag['type'];  
      $name = $tag['name'];  
      if($name == 'your-email') { // Solo se aplica a campos con el nombre de campo de formulario "your-email"  
           $the_value = $_POST[$name];  
           if(!is_gmail($the_value)){  
                $result['valid'] = false;  
                $result['reason'][$name] = '¡Esta no es una dirección de gmail!'; // Mensaje de error  
           };  
      };  
       return $result;  
 };  
 add_filter('wpcf7_validate_email','custom_email_validation_filter', 10, 2); // Campo de email  
 add_filter('wpcf7_validate_email*', 'custom_email_validation_filter', 10, 2); // Campo de email requerido

Sé que esto está orientado a la verificación de correo electrónico. Sin embargo, lo que me está confundiendo es qué necesito cambiar para hacer que esto funcione para una casilla de verificación y un menú desplegable.

2
Comentarios

Puedes usar este tutorial. Es jQuery simple y CF7 en caso de que aún quieras seguir usando CF7. https://wordpress.org/support/topic/plugin-contact-form-7-this-is-how-to-showhide-fields-with-jquery?replies=8

TalwinderSingh TalwinderSingh
1 jul 2015 19:28:11

Esto sé cómo hacerlo. Sin embargo, no necesito mostrar u ocultar campos. Lo que necesito es que si una respuesta está marcada, haga que el otro campo sea obligatorio.

Nicole Nicole
1 jul 2015 19:42:15
Todas las respuestas a la pregunta 3
1

He encontrado una solución alternativa para esto que funciona en IE, Chrome y Firefox. En lugar de usar un enfoque PHP, decidí utilizar jQuery. No es una solución completa pero puede ser útil para cualquiera que necesite implementar esto.

<script type="text/javascript">
/*! Script jQuery para ocultar ciertos campos de formulario */
$(document).ready(function () {

    //Ocultar el campo inicialmente
    $("#hide").hide();

    //Mostrar el campo de texto solo cuando se elige la tercera opción
    $('#dropdown').change(function () {
        if ($("#dropdown").val() == "Other") {
            $("#hide").show();
            var input = $("#hide");
            if (input.length > 0) { //Si el campo de entrada contiene algún valor, eliminarlo
                input.val('');
            }

        } else {
            $("#hide").hide();
            var input = $("#hide");
            input.val("NA"); //agregar valor NA al campo oculto que es requerido!

        }
    });
});
</script>

Esto agregará "NA" al campo requerido, evitando así la validación de campo obligatorio.

10 jul 2015 17:48:14
Comentarios

Esto no funciona para entradas de archivos porque los valores de entrada de archivos no se pueden establecer programáticamente.

Mark Buikema Mark Buikema
30 ago 2016 20:58:10
0

Esta solución funcionó para mí. En mi caso, si la casilla de verificación estaba marcada, la dirección era obligatoria.

function my_custom_conditional_required($result, $tag) {
    $tag = new WPCF7_Shortcode( $tag );
    $name = $tag->name;
    $value = isset( $_POST[$name] )
        ? trim( wp_unslash( strtr( (string) $_POST[$name], "\n", " " ) ) )
        : '';

    $myCheckbox= $_POST['myCheckbox'][0];

    if( $name == "address" && $myCheckbox== true){
        if ( '' == $value ) :
            $result->invalidate( $tag, 'La dirección es obligatoria.' );
         endif;
    }

    return $result;
}

add_filter( 'wpcf7_validate_text', 'my_custom_conditional_required', 10, 2 );
add_filter( 'wpcf7_validate_text*', 'my_custom_conditional_required', 10, 2 );
25 ene 2019 11:04:59
0

Acabo de encontrarme con este problema en un proyecto y he escrito un pequeño tutorial sobre cómo lo he solucionado. Espero que esto ayude a alguien en el futuro:

https://wpharvest.com/contact-form-7-custom-fields-validation/

16 mar 2020 14:39:15