• Gelöst schnallenbrenner

    (@schnallenbrenner)


    Hallo, auf unserer Seite für Bestellungen von Geschäftskunden geben Kunden immer als Gäste Bestellungen auf.

    Am Ende der Bestellung geben sie nur ihre E-Mail-Adresse an (keine Adresse). Wir möchten es so kurz wie möglich halten.

    Nun möchte ich, dass WooCommerce, wenn es die E-Mail kennt, automatisch die Rechnungsadresse und Lieferadresse zuweist, die in der WooCommerce-Datenbank gespeichert sind, ohne dass wir die korrekten Kundendaten manuell jeder Bestellung zuweisen müssen.

    Aktuell müssen wir, wenn ein Kunde die Bestellung abschickt, zur „Bestellung bearbeiten“ gehen und auf das Feld „select2-customer_user-container“ klicken, um den Benutzer auszuwählen, und dann auf „load_customer_billing“, um die Adresse abzurufen. Da auf dieser Seite keine Endkunden bestellen, sondern jedes Mal nur die gleichen, wäre dies äußerst hilfreich.

    Es wäre großartig, wenn jemand eine Idee hätte.“

    WordPress: 6.4.3 WooCommerce: 8.5.2″

    Ich habe verschiedene Lösungsansätze im Internet gefunden, diese funktionieren aber wohl mit meiner Version nicht.

    BSP:

    /**
     * Automatically assign new orders to existing user account if it exists.
     * This is based on billing email address.
     */
    function assign_order_to_existing_account()
    {
     if( !is_user_logged_in() && !empty( $_POST['billing_email'] ) )
     {
      $user = get_user_by( 'email', $_POST['billing_email'] );
    	
      if( !empty( $user ) )
      {
       wp_set_current_user( $user->ID );
      }
     }
    }
    
    add_action( 'woocommerce_checkout_process', 'assign_order_to_existing_account', 1 );
    
    
Ansicht von 3 Antworten – 1 bis 3 (von insgesamt 3)
  • Moderator Marcus Spanier

    (@espiat)

    So als erster Ansatz. Bitte in Staging testen:

    add_action( ‚woocommerce_checkout_update_order_meta‘, ‚auto_assign_customer_data_to_order‘ );

    function auto_assign_customer_data_to_order( $order_id ) {
    // Prüfe, ob bei der Bestellung eine E-Mail-Adresse angegeben wurde.
    if ( isset( $_POST[‚billing_email‘] ) && !empty( $_POST[‚billing_email‘] ) ) {
    $user = get_user_by( ‚email‘, trim( $_POST[‚billing_email‘] ) );

        // Wenn ein Benutzer mit dieser E-Mail existiert, ordne die Kundendaten der Bestellung zu.
        if ( $user ) {
            $order = wc_get_order( $order_id );
    
            // Lade und setze Rechnungsadresse.
            $order->set_billing_first_name( get_user_meta( $user->ID, 'billing_first_name', true ) );
            $order->set_billing_last_name( get_user_meta( $user->ID, 'billing_last_name', true ) );
            // Füge weitere Rechnungsdaten wie Adresszeilen, Stadt, Postleitzahl, Land, Telefon usw. hinzu.
    
            // Lade und setze Lieferadresse (falls benötigt).
            $order->set_shipping_first_name( get_user_meta( $user->ID, 'shipping_first_name', true ) );
            $order->set_shipping_last_name( get_user_meta( $user->ID, 'shipping_last_name', true ) );
            // Füge weitere Lieferdaten wie Adresszeilen, Stadt, Postleitzahl, Land usw. hinzu.
    
            // Speichere die Änderungen an der Bestellung.
            $order->save();
        }
    }

    }

    Thread-Starter schnallenbrenner

    (@schnallenbrenner)

    Das hat bestens geklappt. Vielen Dank!

    add_action( 'woocommerce_checkout_update_order_meta', 'auto_assign_customer_data_to_order' );
    
    function auto_assign_customer_data_to_order( $order_id ) {
        // Prüfe, ob bei der Bestellung eine E-Mail-Adresse angegeben wurde.
        if ( isset( $_POST['billing_email'] ) && !empty( $_POST['billing_email'] ) ) {
            $user = get_user_by( 'email', trim( $_POST['billing_email'] ) );    
            // Wenn ein Benutzer mit dieser E-Mail existiert, ordne die Kundendaten der Bestellung zu.
            if ( $user ) {
                $order = wc_get_order( $order_id );
    
                // Lade und setze Rechnungsadresse.
                $order->set_billing_first_name( get_user_meta( $user->ID, 'billing_first_name', true ) );
                $order->set_billing_last_name( get_user_meta( $user->ID, 'billing_last_name', true ) );
                $order->set_billing_company( get_user_meta( $user->ID, 'billing_company', true ) );
                $order->set_billing_address_1( get_user_meta( $user->ID, 'billing_address_1', true ) );
                $order->set_billing_address_2( get_user_meta( $user->ID, 'billing_address_2', true ) );
                $order->set_billing_city( get_user_meta( $user->ID, 'billing_city', true ) );
                $order->set_billing_postcode( get_user_meta( $user->ID, 'billing_postcode', true ) );
                $order->set_billing_state( get_user_meta( $user->ID, 'billing_state', true ) );
    
                // Füge weitere Rechnungsdaten wie Adresszeilen, Stadt, Postleitzahl, Land, Telefon usw. hinzu.
    
                // Lade und setze Lieferadresse (falls benötigt).
                $order->set_shipping_first_name( get_user_meta( $user->ID, 'shipping_first_name', true ) );
                $order->set_shipping_last_name( get_user_meta( $user->ID, 'shipping_last_name', true ) );
                $order->set_shipping_company( get_user_meta( $user->ID, 'shipping_company', true ) );
                $order->set_shipping_address_1( get_user_meta( $user->ID, 'shipping_address_1', true ) );
                $order->set_shipping_address_2( get_user_meta( $user->ID, 'shipping_address_2', true ) );
                $order->set_shipping_city( get_user_meta( $user->ID, 'shipping_city', true ) );
                $order->set_shipping_postcode( get_user_meta( $user->ID, 'shipping_postcode', true ) );
                $order->set_shipping_state( get_user_meta( $user->ID, 'shipping_state', true ) );
                // Füge weitere Lieferdaten wie Adresszeilen, Stadt, Postleitzahl, Land usw. hinzu.
    
                // Speichere die Änderungen an der Bestellung.
                $order->save();
            }
        }
    }
    Thread-Starter schnallenbrenner

    (@schnallenbrenner)

    kann damit geschlossen werden

Ansicht von 3 Antworten – 1 bis 3 (von insgesamt 3)