• Resolved amcode

    (@amcode)


    Innanzitutto grazie per la realizzazione del vostro plugin, molto utile, vi espongo il mio problema, sto cercando di eliminare l’attributo required da alcuni campi di Woocommerce nella fase di checkout, analizzando i file che compongono il vostro plugin, mi sono imbattuto nel file checkout.js che governa le due casistiche quando l’utente sceglie dalla select: ricevuta o fattura.

    Il mio obiettivo è nascondere alcuni campi input quando l’utente sceglie ricevuta. Ed applicando alcuni filtri sono riuscito a fare questo, lascio il codice:

    function wcpdf_IT_billing_customer_type_change(wcpdf_IT_country_selected) {
    	jQuery("#billing_cf_field label").html(wcpdf_IT.lblCommon);
    	jQuery("#billing_cf").attr("placeholder", wcpdf_IT.txtCommon);
    	if(jQuery("#billing_invoice_type").val() === "receipt" ) {
    
    		// NASCONDI LABEL E CAMPO INPUT | NOME DELLA SOCIETÀ
    		jQuery("#billing_company_field ").show();
    
    		// NASCONDI LABEL E CAMPO INPUT | CAP
    		jQuery("#billing_postcode_field ").hide();
    
    		// NASCONDI LABEL E CAMPO INPUT | INDIRIZZO
    		jQuery("#billing_address_1_field ").hide();
    
    		// NASCONDI LABEL E CAMPO INPUT | APPARTAMENTO / SUITE
    		jQuery("#billing_address_2_field ").hide();
    		
    		// NASCONDI LABEL E CAMPO INPUT | PROVINCIA
    		jQuery("#billing_state_field ").hide();
    
    		jQuery("#billing_cf_field label").html(wcpdf_IT.lblPersonal);
    		jQuery("#billing_cf").attr("placeholder", wcpdf_IT.txtPersonal);
    	}
    	wcpdf_IT_check_PEC();
    }

    ora il tutto sembrerebbe corretto, l’utente non vede i campi che ho nascosto ma quando va a confermare il form, si trova che gli stessi campi nascosti mostrano a video un errore poichè sono required.

    Ho provato tramite Jquery a rimuovere l’attributo required ma niente:

    jQuery("#billing_city_field").remove();
    
    jQuery("#billing_city_field").removeClass("validate-required woocommerce-invalid woocommerce-invalid-required-field");
    
    jQuery("#billing_city_field ").removeAttr('required');
    
    jQuery("#billing_city_field").hide().removeClass("validate-required");

    So che Woocommerce concede la possibilità nella documentazione di poter rimuovere i campi di checkout in questa maniera:

    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    
    function custom_override_checkout_fields( $fields ) {
        unset($fields['billing']['billing_city']);
    
        return $fields;
    }

    ma a me servirebbe una cosa del genere o qualunque altro modo, lascio questo codice errato!!! giusto per far capire di cosa sto parlando:

    add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );
    
    function custom_override_checkout_fields( $fields ) {
    
        if($fields['billing']['billing_invoice_type'] == 'receipt')
        {
            unset($fields['billing']['billing_city']);
            return $fields;
        }
    
    }

    Come posso risolvere questo?
    Grazie.

Viewing 4 replies - 1 through 4 (of 4 total)
  • Plugin Author labdav

    (@labdav)

    il problema non si risolve con un add_filter perché questa funzione viene chiamata all’apertura della pagina del checkout, cioè prima che il cliente scelga fra ricevuta o fattura.
    Si può agire solo con javascript.

    Si possono togliere soltanto i campi che WooCommerce dà come facoltativi (es. billing_company_field e billing_address_2_field). Non gli altri.
    Anche togliendo con javascript la classe “required” non si impedisce il controllo che viene fatto successivamente, in fase di salvataggio dell’ordine.

    Forse il problema si risolve inserendo dei dati fittizi nei campi obbligatori, che permettano di bypassare il controllo dei dati.

    Thread Starter amcode

    (@amcode)

    Grazie per la risposta e grazie per il supporto tempestivo, mi fa un po’ sorridere la soluzione al problema “si risolve inserendo dei dati fittizi nei campi obbligatori, che permettano di bypassare il controllo dei dati.”

    Ma va bene così, la cosa invece che mi preoccupa è quella che gentilmente mi hai scritto: “Anche togliendo con javascript la classe “required” non si impedisce il controllo che viene fatto successivamente, in fase di salvataggio dell’ordine.”

    Ciò vuol dire che se vado a eliminare l’attributo required per esempio sul campo billing_city, il problema mi si presenta in entrambi casi di ricevuta o fattura.

    Questo non è buono.
    Ti ringrazio lo stesso e ti auguro una buona domenica.
    Grazie per il supporto.

    Plugin Author labdav

    (@labdav)

    per quello suggerivo la soluzione dei dati fittizi. es:

    jQuery("#billing_postcode_field ").val("00000").hide();
    jQuery("#billing_address_1_field ").val(".").hide();
    jQuery("#billing_address_2_field ").val(".").hide();
    jQuery("#billing_state_field ").val("MI").hide();
    Thread Starter amcode

    (@amcode)

    Perfetto così anche se non è “pulita” è ottima, sennò sarebbe stato un calvario trovare un altra soluzione.
    Che dire posso solo che ringraziarti.
    Ti auguro ancora una buona domenica.
    Grazie.

Viewing 4 replies - 1 through 4 (of 4 total)

The topic ‘Rimuovere attributo required input checkout’ is closed to new replies.