[Special Summer Sale] 40% OFF All Magento 2 Themes

Cart

How to remove all Woocommerce checkout billing fields without errors

  • This topic is empty.
Viewing 2 posts - 1 through 2 (of 2 total)
  • Author
    Posts
  • #9465
    alexgrey
    Participant

    That action helps to make fields non-required

    add_filter( 'woocommerce_checkout_fields', 'unrequire_checkout_fields' );
    function unrequire_checkout_fields( $fields ) {
      $fields['billing']['billing_company']['required']   = false;
      $fields['billing']['billing_city']['required']      = false;
      $fields['billing']['billing_postcode']['required']  = false;
      $fields['billing']['billing_country']['required']   = false;
      $fields['billing']['billing_state']['required']     = false;
      $fields['billing']['billing_address_1']['required'] = false;
      $fields['billing']['billing_address_2']['required'] = false;
      return $fields;
    }
    

    But it works only with css

    #billing_country_field, #billing_address_1_field, #billing_address_2_field,#billing_state_field,#billing_last_name_field,#billing_postcode_field,#billing_company_field {
            display: none !important; }
    

    I thinks that’s not the best decision. It has to be like that

    add_filter('woocommerce_checkout_fields','remove_checkout_fields');
    function remove_checkout_fields($fields){
        unset($fields['billing']['billing_first_name']);
        unset($fields['billing']['billing_last_name']);
        unset($fields['billing']['billing_address_1']);
        unset($fields['billing']['billing_address_2']);
        unset($fields['billing']['billing_city']);
        unset($fields['billing']['billing_postcode']);
        unset($fields['billing']['billing_country']);
        unset($fields['billing']['billing_state']);
        return $fields;
    }
    

    But when I’m adding exactly that code, it requires address and says that the pay method(native local pickup) is wrong. Without that code and with css all works fine. Maybe someone had the same problem and already solved it? Without plugins if possible.

    #9466
    loictheaztec
    Participant

    This requires to be done in a different way, as in real word WooCommerce ask for checkout billing country throwing an error like "Please enter an address to continue.":

    enter image description here

    To avoid this problem use the following instead (where you will define all key fields to be removed):

    // Just hide woocommerce billing country
    add_action('woocommerce_before_checkout_form', 'hide_checkout_billing_country', 5);
    function hide_checkout_billing_country() {
        echo '<style>#billing_country_field{display:none;}</style>';
    }
    
    add_filter('woocommerce_billing_fields', 'customize_billing_fields', 100);
    function customize_billing_fields($fields ) {
        if (is_checkout()) {
            // HERE set the required key fields below
            $chosen_fields = array('first_name', 'last_name', 'address_1', 'address_2', 'city', 'postcode', 'country', 'state');
    
            foreach ($chosen_fields as $key) {
                if (isset($fields['billing_'.$key]) && $key !== 'country') {
                    unset($fields['billing_'.$key]); // Remove all define fields except country
                }
            }
        }
        return $fields;
    }
    

    Code goes in functions.php file of the active child theme (or active theme). Tested and works.

Viewing 2 posts - 1 through 2 (of 2 total)
  • You must be logged in to reply to this topic.