Câmpuri obligatorii condiționate pentru Wordpress Contact Form 7

1 iul. 2015, 18:51:27
Vizualizări: 22.4K
Voturi: 1

Știu că acest subiect ar putea fi considerat off-topic, dar nu sunt sigur unde altundeva să postez această întrebare, deoarece se referă atât la WordPress, cât și la plugin-ul Contact Form 7. Dacă știți unde ar trebui să postez acest lucru în altă parte, vă rog să-mi spuneți.


Încerc să creez un câmp obligatoriu condiționat. Am găsit cod care să funcționeze, dar cred că mă confuz singur și am nevoie de o perspectivă din exterior.

Ceea ce trebuie să funcționeze este următorul lucru: dacă checkbox-ul meu este bifat pe "da", va face ca lista derulantă de lângă el să fie obligatorie, iar dacă checkbox-ul este bifat pe "nu", aceasta nu va fi obligatorie.

Acesta este formularul meu cu shortcode-ul din backend:

Dacă ați comandat de la noi în trecut, lucrați deja cu unul dintre reprezentanții noștri de vânzări?
[checkbox* check-sales id:checksales "Da" "Nu"]

Dacă ați bifat "Da", cu care reprezentant colaborați de obicei?
[select sales-rep id:sales include_blank "Marla" "Lisa" "Wendy" "Stacy" "Nicole" "Linda" "Jody" "Gisele" "Ray" "Craig"]

[submit]

Și aici este exemplul de cod PHP care merge în fișierul functions.php.

function is_gmail($email) {  
      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') { // Se aplică doar câmpurilor cu numele "your-email"  
           $the_value = $_POST[$name];  
           if(!is_gmail($the_value)){  
                $result['valid'] = false;  
                $result['reason'][$name] = 'Aceasta nu este o adresă gmail!'; // Mesaj de eroare  
           };  
      };  
       return $result;  
 };  
 add_filter('wpcf7_validate_email','custom_email_validation_filter', 10, 2); // Câmp email  
 add_filter('wpcf7_validate_email*', 'custom_email_validation_filter', 10, 2); // Câmp email obligatoriu 

Știu că acest cod este orientat spre verificarea email-urilor. Cu toate acestea, ceea ce mă confuză este ce trebuie să schimb pentru a face acest lucru să funcționeze pentru un checkbox și o listă derulantă.

2
Comentarii

Poți folosi acest tutorial. Este simplu cu Jquery și CF7 în caz că vrei să continui să folosești CF7. https://wordpress.org/support/topic/plugin-contact-form-7-this-is-how-to-showhide-fields-with-jquery?replies=8

TalwinderSingh TalwinderSingh
1 iul. 2015 19:28:11

Știu cum să fac asta. Nu am nevoie să afișez sau să ascund câmpuri. Ceea ce am nevoie este ca dacă un răspuns este bifat, să facă celălalt câmp obligatoriu.

Nicole Nicole
1 iul. 2015 19:42:15
Toate răspunsurile la întrebare 3
1

Am găsit o soluție pentru această problemă care funcționează în IE, Chrome și Firefox. Și în loc să folosesc o abordare PHP, am decis să utilizez jQuery. Nu este o soluție completă, dar poate fi utilă pentru oricine altcineva care are nevoie să aplice acest lucru.

<script type="text/javascript">
/*! jQuery script pentru a ascunde anumite câmpuri de formular */
$(document).ready(function () {

    //Ascunde câmpul inițial
    $("#hide").hide();

    //Arată câmpul de text doar când este selectată a treia opțiune
    $('#dropdown').change(function () {
        if ($("#dropdown").val() == "Other") {
            $("#hide").show();
            var input = $("#hide");
            if (input.length > 0) { //Dacă câmpul de intrare conține vreo valoare, o elimină
                input.val('');
            }

        } else {
            $("#hide").hide();
            var input = $("#hide");
            input.val("NA"); //Adaugă valoarea NA în câmpul ascuns care este obligatoriu!

        }
    });
});
</script>

Aceasta va adăuga NA în câmpul obligatoriu, ocolind astfel verificarea de obligatorietate.

10 iul. 2015 17:48:14
Comentarii

Acest lucru nu funcționează pentru input-urile de tip fișier deoarece valorile acestora nu pot fi setate programatic.

Mark Buikema Mark Buikema
30 aug. 2016 20:58:10
0

Această soluție a funcționat pentru mine. În cazul meu, dacă checkbox-ul era bifat, adresa era obligatorie.

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, 'Adresa este obligatorie.' );
         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 ian. 2019 11:04:59
0

Tocmai am întâlnit această problemă pentru un proiect și am decis să scriu un mic tutorial despre cum am rezolvat-o. Sper să fie de ajutor pentru cineva în viitor:

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

16 mar. 2020 14:39:15