Soporte » Plugins y Hacks » WooCommerce » Ocultar campos al seleccionar recogida local

  • Buenas noches, estoy tratando de ocultar los campos (de facturación) dirección, ciudad, estado y código postal cuando se selecciona la opción de envío «recogida local».

    Utilicé el siguiente código y me funcionó pero se llevó consigo también los campos nombre, apellidos, país, teléfono y dirección de correo electrónico:

    // Auto Show hide checkout shipping fields section based on chosen shipping methods
    add_action( 'wp_footer', 'custom_checkout_field_script' );
    function custom_checkout_field_script() {
        // Only on checkout page
        if( is_checkout() && ! is_wc_endpoint_url() ):
    
        // HERE below define your local pickup shipping method
        $local_pickup = 'local_pickup:4';
    
        // Jquery code start
        ?>
        <script>
            jQuery(function($){
                var a = 'checked',      
                    b = 'input#ship-to-different-address-checkbox', 
                    c = 'input[name^="shipping_method"]',   
                    d = '<?php echo $local_pickup; ?>',     
                    e = c + ':' + a
                    f = 'div.woocommerce-billing-fields,' + b;
    
                // 1. On load: when the chosen shipping method is our defined shipping method
                if( $(e).val() === d ) {
                    // Hide shipping fields section
                    $(f).hide(); 
                }
    
                // 2. On shipping method "change" (Live event)
                $( 'form.checkout' ).on( 'change', c, function() {
                    // When the chosen shipping method is our defined shipping method
                    if( $(e).val() === d ) {
                        // if the checkbox is checked, uncheck it first
                        if ( $(b).prop(a) ) {
                            $(b).click();
                        }
    
                        // Hide shipping fields section
                        $(f).hide();
                    } else if ( $(e).val() !== d ) {
                        // show closed shipping fields section with (unchecked checkbox)
                        $(f).show();                    
                    }
                });
            });
        </script>
        <?php
        endif;
    }

    Me sería de mucha ayuda que me pudieran ayudar a perfeccionar el código para que se muestren únicamente los campos que quiero al seleccionar «recogida local».

    Muchas gracias!

    Saludos.

    • Este debate fue modificado hace 2 meses, 3 semanas por Jose Luis. Razón: etiquetar código

    La página con la que necesito ayuda: [accede para ver el enlace]

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Moderador Jose Luis

    (@jose64)

    Hola.

    Prueba este código:

    add_filter('woocommerce_checkout_fields', 'local_pickup_remove_billing_checkout_fields');
    
    function local_pickup_remove_billing_checkout_fields($fields) {
    	$chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    	$chosen_shipping = $chosen_methods[0];
    	if ( 0 === strpos( $chosen_shipping, 'local_pickup' ) ) {
    	
            unset($fields['billing']['billing_address_1']);	// Eliminar el campo Dirección 1
            unset($fields['billing']['billing_address_2']);	// Eliminar el campo Dirección 2
    		unset($fields['billing']['billing_postcode']);	// Elimina el Código Postal
    		unset($fields['billing']['billing_state']);		// Elimina la Provincia
    		unset($fields['billing']['billing_country']);	// Elimina el País
        }
        return $fields;
    }

    Por favor, recuerda cerrar los debates que estén resueltos, así nos ayudas a mantener el foro al día

    Funcionó!
    Solamente tuve que revisar como estaba establecido mi «local_pickup», resulta que está como local_pickup:4, lo cambié y listo!

    Muchas gracias, Jose Luis!

    Saludos y espero que te encuentres muy bien.

    Me acabo de percatar de que cuando pasó nuevamente a la opción de envío con costo los campos ocultos por «recoger en local» no aparecen.

    ¿Alguna sugerencia?

    Gracias y saludos nuevamente.

    Me imagino que es necesario usar algún código con «Jquery» como el que publiqué inicialmente, ¿no?

    Moderador Jose Luis

    (@jose64)

    Hola.

    Con el código planteas ocultas por CSS el DIV que engloba la dirección; div.woocommerce-billing-fields, tendrías que modificarlo para que únicamente se aplicara a los elementos que deseas ocultar:

    #billing_country_field
    #billing_address_1_field
    #billing_address_2_field
    #billing_city_field
    #billing_state_field
    #billing_postcode_field

    También se puede plantear el caso de clientes que utilicen la recogida local y quieran una factura completa para cumplir con algún requisito legal y si eliminas los campos de dirección se lo impides. Tienes una tercera opción que te elimina todos los posibles problemas, hacer opcionales los campos de dirección si es recogida local. Revisa la documentación de WooCommerce:

    Customizing checkout fields using actions and filters

    Coméntanos que te parecen las opciones

Viendo 5 respuestas - de la 1 a la 5 (de un total de 5)
  • Debes estar registrado para responder a este debate.