2015-10-13 35 views
6

Sto cercando di rendere obbligatorio il campo 'business' nel controllo woocommerce, ma solo se il campo è effettivamente visualizzato.Campo di pagamento Woocommerce richiesto solo se visibile

Ho creato un campo pulsante radio con woocommerce_form_field che visualizza due opzioni. utilizzando JavaScript Ho commutare la visibilità del campo di immissione 'struttura' quando i pulsanti sono controllati:

jQuery(document).ready(function() { 
$('input[type=radio][name=customer_type]').on('change', function() { 
    $('.checkout-bedrijfsnaam').slideToggle(); 
}); }); 

css default per l'ingresso 'attività' è:

.checkout-bedrijfsnaam { display:none; } 

anche Feci il 'affari 'campo richiesto utilizzando i filtri Woocommerce 'woocommerce_billing_fields' e 'woocommerce_shipping_fields':

$address_fields['billing_company']['required'] = true; 

Questo è tutto andando alla grande, però: Quando il 'campo di attività' è togg condotto fuori e non viene visualizzato, ricevo un avviso 'campo è richiesto' e non posso inviare il modulo. Sarebbe possibile rendere il campo richiesto, ma solo quando effettivamente sta mostrando?

So che deve essere, poiché i campi sui campi shipping_field si comportano allo stesso modo (non richiesto quando la casella di controllo non è selezionata) ma non riesco a capirlo.

+0

quindi provare a creare quello archiviato in modo condizionale, che renderà il vostro lavoro fatto, o se ha qualsiasi filtro, provare a utilizzare quello per renderlo richiesto in modo condizionale. –

+2

il campo viene creato lato server, la condizione è lato client (quale pulsante di scelta è scelto) quindi non è un'opzione suppongo – Marc

+0

per ora sto usando l'azione 'woocommerce_checkout_process', per eseguire la validazione serveride e chiamare wc_add_notice quando la validazione fallisce. ma il lato negativo di questo è l'interfaccia utente è incoerente (nessun bordo stella/rosso per indicare che il campo è richiesto) – Marc

risposta

0

Se il controllo è solo lato client, anziché nasconderlo con display: none;, è possibile rimuoverlo dal DOM. Quando ne hai bisogno, lo aggiungi di nuovo. Hai già l'interruttore per farlo.