Customizing my-account addresses fields in Woocommerce 3

后端 未结 2 531
太阳男子
太阳男子 2020-12-06 04:12

I would like to remove the form field billing_adress_2 within the template form-edit-addresses.php.

To finish is it possible to reorder the form fields likes this:<

相关标签:
2条回答
  • 2020-12-06 04:20

    This code will change the order of the fields in the billing address as you want them to appear. Place this code in your themes functions.php file.

    add_filter('woocommerce_address_to_edit', 'reorder_woocommerce_address_fields', 10, 2);
    
    function reorder_woocommerce_address_fields( $address, $load_address) {
        $new_address['billing_first_name'] = $address['billing_first_name'];
        $new_address['billing_last_name'] = $address['billing_last_name'];
        $new_address['billing_email'] = $address['billing_email'];
        $new_address['billing_phone'] = $address['billing_phone'];
    
        $new_address['billing_email'] = array(
            'label'     => __('Email', 'woocommerce'),
            'required'  => true,
            'class'     => array('form-row-first'),
        );
    
        $new_address['billing_phone'] = array(
            'label'     => __('Phone', 'woocommerce'),
            'required'  => true,
            'class'     => array('form-row-last'),
            'clear'     => true
        );
    
        $new_address['billing_company'] = $address['billing_company'];
        $new_address['billing_address_1'] = $address['billing_address_1'];
        $new_address['billing_postcode'] = $address['billing_postcode'];
        $new_address['billing_city'] = $address['billing_city'];
        $new_address['billing_state'] = $address['billing_state'];
    
        return $new_address;
    }
    
    0 讨论(0)
  • 2020-12-06 04:37

    In My account > Adresses section, the below hooked functions will:

    • remove "Address 2" billing and shipping fields
    • reorder billing and shipping address fields
    • reorder billing Email and phone fields (after first and last names)
    • remove "Address 2" from display

    You forgot the "country" field that you can reorder easily in the $sorted_fields array…

    The code:

    // Account Edit Adresses: Remove and reorder addresses fields
    add_filter(  'woocommerce_default_address_fields', 'custom_default_address_fields', 20, 1 );
    function custom_default_address_fields( $fields ) {
        // Only on account pages
        if( ! is_account_page() ) return $fields;
    
        ## ---- 1.  Remove 'address_2' field ---- ##
    
        unset($fields['address_2']);
    
        ## ---- 2.  Sort Address fields ---- ##
    
        // Set the order (sorting fields) in the array below
        $sorted_fields = array('first_name','last_name','company','address_1','country','postcode','city','state');
    
        $new_fields = array();
        $priority = 0;
    
        // Reordering billing and shipping fields
        foreach($sorted_fields as $key_field){
            $priority += 10;
    
            if( $key_field == 'company' )
                $priority += 20; // keep space for email and phone fields
    
            $new_fields[$key_field] = $fields[$key_field];
            $new_fields[$key_field]['priority'] = $priority;
        }
        return $new_fields;
    }
    
    // Account Edit Adresses: Reorder billing email and phone fields
    add_filter(  'woocommerce_billing_fields', 'custom_billing_fields', 20, 1 );
    function custom_billing_fields( $fields ) {
        // Only on account pages
        if( ! is_account_page() ) return $fields;
    
        ## ---- 2.  Sort billing email and phone fields ---- ##
    
        $fields['billing_email']['priority'] = 30;
        $fields['billing_email']['class'] = array('form-row-first');
        $fields['billing_phone']['priority'] = 40;
        $fields['billing_phone']['class'] = array('form-row-last');
    
        return $fields;
    }
    
    // Account Displayed Addresses : Remove 'address_2'
    add_filter( 'woocommerce_my_account_my_address_formatted_address' , 'my_account_address_formatted_addresses', 20, 3 );
    function my_account_address_formatted_addresses( $address, $customer_id, $address_type ) {
        unset($address['address_2']); // remove Address 2
    
        return $address;
    }
    

    Code goes in function.php file of your active child theme (or active theme). Tested and work.

    If you want to make that effective in checkout page too, you will have to remove this lines:

    // Only on account pages
    if( ! is_account_page() ) return $fields;
    

    In each function (2 times)

    0 讨论(0)
提交回复
热议问题