2017-04-11 100 views
0

我想增值税字段添加到客户账单地址,而这个工程的结帐页面上用下面的代码: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网上商店拥有的VAT号码。

是否有人知道或是否有人能指出我正确的方向?我将如何执行此任务,不仅在结账页面上显示增值税号码的结算字段,还会在用户个人资料页面上显示,以及如何在注册页面添加所有这些字段?

在此先感谢您对本案的任何帮助!

回答

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; 
} 
+0

为辅助真棒的感谢!我注册额外的领域似乎正在工作,我现在也了解如何添加更多的注册页面。 但是我注意到增值税字段出现在账户详细信息下,但是我希望在账单地址(我的账户/编辑地址/账单/)下有增值税字段。 我可能可以通过不同地址来改变这个钩子吗?像“woocommerce_after_edit_account_address_form”一样,我想知道是否有方法来排列元素。 无论哪种方式,我都非常感谢您为帮助我而付出的努力! –

+0

不客气!我编辑了我的答案,在帐单地址(我的帐户/编辑地址/结算/)下添加自定义字段。请让我知道这对你有没有用。 :-) –

+0

标记为已接受的答案,并感谢一百万人!大力支持!保持我想说的奇妙的工作,很高兴看到这个世界上仍然有很棒的人! –

相关问题