WooCommerce Customer Billing Address

后端 未结 1 1218
梦毁少年i
梦毁少年i 2021-01-17 00:06

I am trying to add a VAT field to the Customer Billing Address, while this works on the Checkout page with the following code:

// Company Name Required
add_f         


        
相关标签:
1条回答
  • 2021-01-17 00:42

    Well, it's quite simple. Your code should be like this:

    /* ---------------------- Registration page ----------------------- */
    
    /* Add extra fields in registration form */
    add_action( 'woocommerce_register_form_start', 'my_extra_register_fields' );
    function my_extra_register_fields() {
    ?>
        <p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
            <label for="reg_billing_vat"><?php _e( 'Billing VAT', 'woocommerce' ); ?><span class="required">*</span></label>
            <input type="text" class="input-text" name="billing_vat" id="reg_billing_vat" value="<?php if ( ! empty( $_POST['billing_vat'] ) ) esc_attr_e( $_POST['billing_vat'] ); ?>">
        </p>
        <div class="clearfix"></div>
    <?php
    }
    
    /* registration form fields Validation */
    add_action( 'woocommerce_register_post', 'my_validate_extra_register_fields', 10, 3 );
    function my_validate_extra_register_fields( $username, $email, $validation_errors ) {
    
        if ( isset( $_POST['billing_vat'] ) && empty( $_POST['billing_vat'] ) ) {
            $validation_errors->add( 'billing_vat_error', __( 'VAT number is required!', 'woocommerce' ) );
        }   
    
        return $validation_errors;
    }
    
    /* Below code save extra fields when new user register */
    add_action( 'woocommerce_created_customer', 'my_save_extra_register_fields' ); 
    function my_save_extra_register_fields( $customer_id ) {
    
        if ( isset( $_POST['billing_vat'] ) ) {     
    
            // VAT field which is used in WooCommerce
            update_user_meta( $customer_id, 'billing_vat', sanitize_text_field( $_POST['billing_first_name'] ) );
        }
    
    }
    
    
    /* ---------------------- Account page ----------------------- */
    
    /* Show custom fields on Account details page */
    add_action( 'woocommerce_edit_account_form', 'my_woocommerce_edit_account_form' );
    function my_woocommerce_edit_account_form() {
        $user_id = get_current_user_id();
        $user    = get_userdata( $user_id );
    
        if ( !$user ) return;
    
        $billing_vat = get_user_meta( $user_id, 'billing_vat', true );
    ?>
        <fieldset>
            <legend>Custom information</legend>
    
            <p class="woocommerce-FormRow woocommerce-FormRow--wide form-row form-row-wide">
                <label for="billing_vat">Billing VAT</label>
                <input type="text" name="billing_vat" id="billing_vat" value="<?php echo esc_attr( $billing_vat ); ?>" class="input-text" />
            </p>
            <div class="clearfix"></div>
    
        </fieldset>
       <?php
    }
    
    /* Below code save extra fields when account details page form submitted */
    add_action( 'woocommerce_save_account_details', 'my_woocommerce_save_account_details' );
    function my_woocommerce_save_account_details( $user_id ) {
    
        if ( isset( $_POST['billing_vat'] ) ) {
            update_user_meta( $user_id, 'billing_vat', sanitize_text_field( $_POST['billing_vat'] ) );
        }
    
    }
    

    You can add more custom fields as per your need.

    And yes you can add custom fields under my-account/edit-address/billing/ by using woocommerce_billing_fields filter hook.

    So the code for this, should be like below:

    /* Add field under my account billing  */
    add_filter( 'woocommerce_billing_fields', 'my_woocommerce_billing_fields' );
    function my_woocommerce_billing_fields( $fields ) {
    
        $user_id = get_current_user_id();
        $user    = get_userdata( $user_id );
    
        if ( !$user ) return;
    
        $fields['billing_vat'] = array(
            'type'      => 'text',
            'label'     => __('VAT', 'woocommerce'),
            'placeholder'   => _x('VAT Number', 'placeholder', 'woocommerce'),
            'required'  => true,
            'class'     => array('form-row'),
            'clear'     => true,
            'default'   => get_user_meta( $user_id, 'billing_vat', true ) // assing default value if any
        );
    
        return $fields;
    }
    
    /* Format custom field to show on my account billing  */
    add_filter( 'woocommerce_my_account_my_address_formatted_address', 'custom_my_account_my_address_formatted_address', 10, 3 );
    function custom_my_account_my_address_formatted_address( $fields, $customer_id, $name ) {
    
        $fields['vat']  = get_user_meta( $customer_id, $name . '_vat', true );
    
        return $fields;
    }
    
    /* Replace the key for custom field to show on my account billing  */
    add_filter( 'woocommerce_formatted_address_replacements', 'custom_formatted_address_replacements', 10, 2 );
    function custom_formatted_address_replacements( $address, $args ) {
        $address['{vat}'] = '';
    
        if ( ! empty( $args['vat'] ) ) {
            $address['{vat}'] = __( 'VAT Number', 'woocommerce' ) . ': ' . $args['vat'];
        }
    
        return $address;
    }   
    add_filter( 'woocommerce_localisation_address_formats', 'custom_localisation_address_format' );
    function custom_localisation_address_format( $formats ) {
    
        foreach($formats as $key => $value) :
            $formats[$key] .= "\n\n{vat}";
        endforeach;
    
        return $formats;
    }
    
    0 讨论(0)
提交回复
热议问题