2017-04-11 8 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番号などの資格情報をすべて登録することができます。

チェックアウトページの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/にカスタムフィールドを追加するには、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] .= "\n\n{vat}"; 
    endforeach; 

    return $formats; 
} 
+0

素晴らしい感謝!私は登録のための追加フィールドが働いているように見え、登録ページにもっと追加する方法も理解しています。 しかし、請求の住所(my-account/edit-address/billing /)の下にVATフィールドがアカウント詳細の下に表示されます。 フックを別の方法でアドレス指定することでこれを変更することはできますか? "woocommerce_after_edit_account_address_form"のように、要素を順序付ける方法があるのだろうかと思います。 いずれにしても、私の手伝ってくれた努力に感謝します! –

+0

あなたは大歓迎です!請求先住所(my-account/edit-address/billing /)の下にカスタムフィールドを追加するための回答を編集しました。それがあなたのために働くかどうか私に教えてください。 :-) –

+0

受け入れられたとマークされ、100万人のおかげです!素晴らしいサポート!私が言いたい素晴らしい仕事を続けてください、この世界にはまだ素晴らしい人がいるのを見てうれしいです! –

関連する問題