Rechnungsadresse des WooCommerce-Kunden

Lesezeit: 6 Minuten

Ich versuche, der Rechnungsadresse des Kunden ein Mehrwertsteuerfeld hinzuzufügen, während dies auf der Checkout-Seite mit dem folgenden Code funktioniert:

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

Ich benötige außerdem, dass es in den Kontooptionen auf die Rechnungsadresse des Kunden eingestellt wird. Da ich dies mit der Registrierungsseite verknüpfen muss, möchte ich, dass sich die Benutzer mit all ihren Anmeldeinformationen registrieren, einschließlich der Umsatzsteuer-Identifikationsnummer, die sie für einen B2B-Webshop besitzen.

Weiß jemand oder könnte mir jemand in die richtige Richtung weisen, wie ich diese Aufgabe ausführen würde, diese Rechnungsfelder der Umsatzsteuer-Identifikationsnummer nicht nur auf der Checkout-Seite, sondern auch auf der Profilseite des Benutzers anzuzeigen, und wie man all diese Felder hinzufügt? auf der Anmeldeseite?

Vielen Dank im Voraus für jede Hilfe in diesem Fall!

Rechnungsadresse des WooCommerce Kunden
Ritz Cool

Nun, es ist ganz einfach. Ihr Code sollte so aussehen:

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

}

Sie können je nach Bedarf weitere benutzerdefinierte Felder hinzufügen.

Und ja, Sie können unter benutzerdefinierte Felder hinzufügen my-account/edit-address/billing/ durch die Nutzung woocommerce_billing_fields Filterhaken.

Der Code dafür sollte also wie folgt aussehen:

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

  • Super danke für die Hilfe! I Das zusätzliche Feld für die Registrierung scheint zu funktionieren und ich verstehe jetzt auch, wie ich mehr zur Registrierungsseite hinzufügen kann. Ich bemerke jedoch, dass das Mehrwertsteuerfeld unter den Kontodetails angezeigt wird, ich möchte es jedoch unter der Rechnungsadresse (mein Konto/Bearbeitungsadresse/Rechnung/) haben. Vielleicht kann ich das ändern, indem ich den Haken anders anspreche oder so? Wie bei “woocommerce_after_edit_account_address_form” frage ich mich, ob es eine Möglichkeit gibt, die Elemente zu ordnen. So oder so danke ich Ihnen für die Mühe, die Sie sich schon jetzt gemacht haben, um mir zu helfen!

    – Rafaël De Jongh

    11. April 2017 um 15:44 Uhr

  • Gern geschehen! Ich habe meine Antwort bearbeitet, um benutzerdefinierte Felder unter Rechnungsadresse (my-account/edit-address/billing/) hinzuzufügen. Lassen Sie mich wissen, ob es für Sie funktioniert. 🙂

    – Ritz Cool

    12. April 2017 um 8:43 Uhr

  • Als akzeptierte Antwort markiert und Tausend Dank! Großartige Unterstützung! Machen Sie weiter mit der fantastischen Arbeit, ich würde sagen, es ist großartig zu sehen, dass es immer noch großartige Menschen auf dieser Welt gibt!

    – Rafaël De Jongh

    12. April 2017 um 14:50 Uhr

  • Herzlich willkommen @RafaëlDeJongh ! Freut mich zu wissen, dass es dir geholfen hat 🙂

    – Ritz Cool

    12. April 2017 um 17:14 Uhr

  • Aha, anscheinend war die Struktur nur ein bisschen anders als ich erwartet hatte. Wenn ich weiter im eigentlichen Quellcode nachsah, gelang es mir, es mit Folgendem zum Laufen zu bringen: add_filter(‘woocommerce_customer_meta_fields’,’add_custom_meta_field’); function add_custom_meta_field($fields){ $fieldData = array(‘label’ => ‘VAT Number’); $Felder[‘billing’][‘fields’][‘billing_vat’] = $fieldData; $felder zurückgeben; } So oder so, vielen Dank für Ihre Hilfe. Wenn Sie es sich manchmal selbst erklären und es in einem Hilfe-Thread aufschreiben, können Sie diese Dinge tatsächlich lösen!

    – Rafaël De Jongh

    14. April 2017 um 0:52 Uhr


1004630cookie-checkRechnungsadresse des WooCommerce-Kunden

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy