首页 文章

WooCommerce客户账单地址

提问于
浏览
0

我正在尝试将“增值税”字段添加到“客户帐单地址”,而这在“结帐”页面上使用以下代码:

// Company Name Required
add_filter('woocommerce_checkout_fields','custom_override_checkout_fields');
function custom_override_checkout_fields($fields){
    $fields['billing']['billing_company']['required'] = true;
    $fields['billing']['billing_vat'] = array(
    'label'       => __('VAT Number','woocommerce'),
    'placeholder' => _x('Enter VAT Number','placeholder','woocommerce'),
    'required'    => true,
    'class'       => array('form-row-wide'),
    'clear'       => true
    );
    return $fields;
}
//Display field value on the order edit page
add_action('woocommerce_admin_order_data_after_shipping_address','my_custom_checkout_field_display_admin_order_meta',10,1);
function my_custom_checkout_field_display_admin_order_meta($order){
    echo '<p><strong>'.__('VAT Number').':</strong> ' . get_post_meta($order->id,'_billing_vat',true) . '</p>';
}
//Order the fields
add_filter("woocommerce_checkout_fields","order_fields");
function order_fields($fields){
    $order = array(
        "billing_first_name",
        "billing_last_name",
        "billing_company",
        "billing_vat",
        "billing_country",
        "billing_city",
        "billing_postcode",
        "billing_state",
        "billing_address_1",
        "billing_address_2",
        "billing_email",
        "billing_phone",
    );
foreach($order as $field){$ordered_fields[$field] = $fields["billing"][$field];}
$fields["billing"] = $ordered_fields;
return $fields;
}

我还要求在帐户选项中的客户帐单地址上设置它 . 因为我需要将其链接到注册页面,因为我希望用户注册所有凭据,包括他们为B2B Webstore拥有的增值税号 .

有没有人知道或者有没有人能指出我如何执行这项任务,不仅要在结帐页面上显示增值税号码的结算字段,还要在用户 Profiles 页面上显示,以及如何添加所有这些字段在注册页面?

在此情况下,提前感谢您的任何帮助!

1 回答

  • 1

    嗯,这很简单 . 你的代码应该是这样的:

    /* ---------------------- 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'] ) );
        }
    
    }
    

    您可以根据需要添加更多自定义字段 .

    是的,您可以使用 woocommerce_billing_fields 过滤器挂钩在 my-account/edit-address/billing/ 下添加自定义字段 .

    所以这个代码应该如下所示:

    /* 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;
    }
    

相关问题