Vermeiden Sie, dass das WooCommerce Checkout-Abrechnungsformular die Standard-WordPress-Benutzerdaten überschreibt

Lesezeit: 2 Minuten

Benutzeravatar von Yahya Essam
Yahya Essam

in der Datenbank, die wir haben metauser Tabelle, die Folgendes enthält:
Der first_name Und last_name Felder

Dies sind die standardmäßigen Vor- und Nachnamen von WordPress.

Und außerdem haben wir:
Der billing_first_name Und billing_last_name.

Wenn der Benutzer jetzt das Abrechnungsformular ausfüllt und mit dem Bestellvorgang fortfährt, aktualisiert Woocommerce beide Felder mit den neuen Werten aus den Feldern für den Abrechnungsnamen (die Standardwerte).

Ich habe viele Dinge ausprobiert, die Aktionen verwendet haben, wie:

woocommerce_before_checkout_billing_form

oder

woocommerce_after_checkout_billing_form

Auch versucht, Meta zu aktualisieren mit:

update_user_meta()

Aber es funktioniert nicht.

Ich möchte, dass die Standardwerte first_name und last_name nicht überschrieben werden, sondern die neuen Werte nur in billing_first_name und billing_last_name beibehalten werden

Ich denke, der Standardprozess ist so
https://gist.github.com/claudiosanches/ae9a8b496c431bec661b69ef73f1a087

Irgendwelche Hilfe dazu bitte?

Der Weg ist, eine benutzerdefinierte Funktion zu verwenden, die eingehakt ist woocommerce_checkout_update_customer Aktionshaken:

add_action('woocommerce_checkout_update_customer','custom_checkout_update_customer', 10, 2 );
function custom_checkout_update_customer( $customer, $data ){

    if ( ! is_user_logged_in() || is_admin() ) return;

    // Get the user ID
    $user_id = $customer->get_id();

    // Get the default wordpress first name and last name (if they exist)
    $user_first_name = get_user_meta( $user_id, 'first_name', true );
    $user_last_name = get_user_meta( $user_id, 'last_name', true );

    if( empty( $user_first_name ) || empty( $user_last_name ) ) return;

    // We set the values by defaul worpress ones, before it's saved to DB
    $customer->set_first_name( $user_first_name );
    $customer->set_last_name( $user_last_name );
}

Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Getestet und funktioniert in WooCommerce 3+

  • Gibt es eine Möglichkeit, Abrechnungsdaten in einer neuen Datenbanktabelle zu speichern?

    – Yahya Essam

    17. August 2017 um 12:22 Uhr


  • @YahyaEssam, Sie sollten stattdessen besser benutzerdefinierte Metadaten für Benutzer erstellen, das wird einfacher und erschwinglicher … finden Sie nicht?

    – LoicTheAztec

    17. August 2017 um 12:44 Uhr

  • Warum sollte WooCommerce das ändern? Sie haben aus einem bestimmten Grund billing_first_name, billing_last_name, warum sollte man sich mit den Vor-/Nachnamen-Metas von WordPress anlegen. Albern. Danke für den Ausschnitt, es funktioniert.

    – Dienstag

    8. Dezember 2017 um 22:02 Uhr


1446550cookie-checkVermeiden Sie, dass das WooCommerce Checkout-Abrechnungsformular die Standard-WordPress-Benutzerdaten überschreibt

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

Privacy policy