WooCommerce客户账单地址



我正在尝试将增值税字段添加到客户帐单地址,而该字段适用于"结帐"页面,代码如下:

// 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 网上商店的增值税号。

有谁知道或者任何人都可以为我指出正确的方向,我将如何执行这项任务,不仅在结帐页面上显示增值税号的那些计费字段,而且在用户个人资料页面上显示,以及如何在注册页面上添加所有这些字段?

提前感谢您对此案的任何帮助!

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

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

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

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

所以这个代码,应该是这样的:

/* 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] .= "nn{vat}";
    endforeach;
    return $formats;
}

相关内容

  • 没有找到相关文章

最新更新