Campi obbligatori condizionali per WordPress Contact Form 7

1 lug 2015, 18:51:27
Visualizzazioni: 22.4K
Voti: 1

So che questo potrebbe essere considerato fuori tema, ma non sono sicuro dove altro pubblicarlo poiché riguarda sia WordPress che il plugin Contact Form 7. Se sapete dove dovrei pubblicarlo invece che qui, vi prego di dirmelo.


Sto cercando di avere un campo condizionalmente obbligatorio. Ho trovato del codice su cui lavorare ma penso di confondermi e ho bisogno di una prospettiva esterna.

Quello che deve funzionare è: se la mia casella di controllo è selezionata su "sì", renderà obbligatorio il menu a tendina accanto ad essa, e se la casella di controllo è selezionata su "no" non sarà obbligatorio.

Questo è quello che ho come form con lo shortcode nel backend:

Hai già ordinato da noi in passato, lavori già con uno dei nostri rappresentanti di vendita esterni?
[checkbox* check-sales id:checksales "Sì" "No"]

Se hai selezionato "Sì" con quale rappresentante tratti solitamente?
[select sales-rep id:sales include_blank "Marla" "Lisa" "Wendy" "Stacy" "Nicole" "Linda" "Jody" "Gisele" "Ray" "Craig"]

[submit]

Ed ecco l'esempio di codice PHP che va nel file functions.php.

// Funzione per verificare se è gmail
function is_gmail($email) {  
      if(substr($email, -10) == '@gmail.com') {  
           return true;  
      } else {  
           return false;  
      };  
 };  
 // Funzione per il filtro di validazione email personalizzato
 function custom_email_validation_filter($result, $tag) {  
      $type = $tag['type'];  
      $name = $tag['name'];  
      if($name == 'your-email') { // Si applica solo ai campi con nome "your-email"  
           $the_value = $_POST[$name];  
           if(!is_gmail($the_value)){  
                $result['valid'] = false;  
                $result['reason'][$name] = 'Questo non è un indirizzo gmail!'; // Messaggio di errore  
           };  
      };  
       return $result;  
 };  
 add_filter('wpcf7_validate_email','custom_email_validation_filter', 10, 2); // Campo email  
 add_filter('wpcf7_validate_email*', 'custom_email_validation_filter', 10, 2); // Campo email obbligatorio

So che questo è orientato al controllo delle email. Tuttavia, quello su cui mi sto confondendo è cosa devo cambiare per farlo funzionare con una checkbox e un menu a tendina.

2
Commenti

Puoi utilizzare questo tutorial. Si tratta di un semplice utilizzo di Jquery e CF7 nel caso tu voglia continuare a usare CF7. https://wordpress.org/support/topic/plugin-contact-form-7-this-is-how-to-showhide-fields-with-jquery?replies=8

TalwinderSingh TalwinderSingh
1 lug 2015 19:28:11

Questo so come farlo. Tuttavia, non ho bisogno di mostrare o nascondere campi. Quello che mi serve è che se una risposta è selezionata, renda obbligatorio l'altro campo.

Nicole Nicole
1 lug 2015 19:42:15
Tutte le risposte alla domanda 3
1

Ho trovato una soluzione alternativa che funziona in IE, Chrome e Firefox. Invece di utilizzare l'approccio PHP, ho deciso di sfruttare jQuery. Non è una soluzione completa, ma può essere utile per chiunque abbia bisogno di implementare questa funzionalità.

<script type="text/javascript">
/*! Script jQuery per nascondere determinati campi del form */
$(document).ready(function () {

    //Nasconde inizialmente il campo
    $("#hide").hide();

    //Mostra il campo di testo solo quando viene selezionata la terza opzione
    $('#dropdown').change(function () {
        if ($("#dropdown").val() == "Other") {
            $("#hide").show();
            var input = $("#hide");
            if (input.length > 0) { //Se il campo di input contiene un valore, lo rimuove
                input.val('');
            }

        } else {
            $("#hide").hide();
            var input = $("#hide");
            input.val("NA"); //Aggiunge il valore NA al campo nascosto che è obbligatorio!

        }
    });
});
</script>

Questo codice aggiungerà "NA" al campo obbligatorio, bypassando così il controllo di obbligatorietà.

10 lug 2015 17:48:14
Commenti

Questo non funziona per gli input di tipo file perché i valori degli input file non possono essere impostati a livello di codice.

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

Questa soluzione ha funzionato per me. Nel mio caso, se la checkbox era selezionata, l'indirizzo era obbligatorio.

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, 'L\'indirizzo è obbligatorio.' );
         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 gen 2019 11:04:59
0

Ho appena riscontrato questo problema per un progetto e ho scritto un piccolo tutorial su come l'ho risolto. Spero che possa essere utile a qualcuno in futuro:

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

16 mar 2020 14:39:15