2017-04-11 7 views
0

이 다음 코드로 체크 아웃 페이지에서 작동하는 동안 나는, 고객의 결제 주소에 VAT 필드를 추가하는 것을 시도하고있다 :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'])); 
    } 

} 

필요에 따라 더 많은 사용자 정의 필드를 추가 할 수 있습니다.

그리고 필터 고리를 사용하여 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

최고 감사합니다! I 등록을위한 추가 필드가 작동하고있는 것처럼 보이고 등록 페이지에 더 추가하는 방법을 이해합니다. 그러나 청구서 수신 주소 (my-account/edit-address/billing /) 아래에 VAT 필드가 계정 세부 정보 아래에 표시됩니다. 후크를 다르게 처리하여 이것을 변경할 수 있습니까? "woocommerce_after_edit_account_address_form"처럼 요소를 정렬 할 수있는 방법이 있는지 궁금합니다. 어느 쪽이든 이미 도와 주신 노력에 감사드립니다. –

+0

당신을 진심으로 환영합니다! 청구서 수신 주소 (my-account/edit-address/billing /) 아래에 맞춤 입력란을 추가하기 위해 답을 수정했습니다. 그것이 당신을 위해 작동하는지 알려주세요. :-) –

+0

수락 된 답변으로 표시하고 백만 명의 사람에게 감사드립니다! 큰 지원! 내가 말할 수있는 환상적인 일을 계속 지켜라.이 세상에는 여전히 멋진 사람들이 있다는 것을 알게되어 반갑다! –