2017-04-11 2 views
0

Je suis en train d'ajouter un champ de la TVA à l'adresse de facturation client, alors que cela fonctionne sur la page de paiement avec le code suivant:WooCommerce Adresse de facturation client

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

J'ai aussi besoin d'être mis sur le client Adresse de facturation dans les options du compte. Comme je l'ai besoin de lier cela à la page d'inscription comme je voudrais que les utilisateurs à s'inscrire avec toutes leurs informations d'identification, y compris le numéro de TVA qu'ils possèdent pour une boutique en ligne B2B. Est-ce que quelqu'un sait ou pourrait me diriger dans la bonne direction comment j'exécuterais cette tâche de montrer non seulement les champs de facturation du numéro de TVA sur la page de paiement mais aussi sur la page de profil des utilisateurs, ainsi que comment ajouter tous ces champs sur la page d'inscription?

Merci d'avance pour toute assistance pour ce cas!

Répondre

1

Eh bien, c'est assez simple. Votre code doit être comme ceci:

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

} 

Vous pouvez ajouter plus de champs personnalisés selon vos besoins.

Et oui, vous pouvez ajouter des champs personnalisés sous my-account/edit-address/billing/ en utilisant le crochet de filtre woocommerce_billing_fields.

Ainsi, le code pour cela, devrait être comme ci-dessous:

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

merci Impressionnant pour l'aide! I Le champ supplémentaire pour l'enregistrement semble fonctionner et je comprends maintenant comment ajouter plus à la page d'inscription. Cependant, je remarque que le champ TVA apparaît sous les détails du compte mais je voudrais l'avoir sous l'adresse de facturation (mon-compte/modifier-adresse/facturation /). Je pourrais être en mesure de changer cela en adressant le crochet différemment ou alors? Comme "woocommerce_after_edit_account_address_form" je me demande s'il y a un moyen de commander les éléments. De toute façon je vous remercie pour l'effort que vous avez mis en m'aide déjà! –

+0

De rien! J'ai modifié ma réponse pour ajouter des champs personnalisés sous Adresse de facturation (mon-compte/modifier-adresse/facturation /). Dites-moi si cela marche pour vous. :-) –

+0

Marqué comme réponse acceptée et merci un million d'homme! Un grand soutien! Continuez le travail fantastique que je dirais, c'est génial de voir qu'il y a toujours des gens formidables dans ce monde! –