Holen Sie sich die Bestell-ID vor dem Zahlungsvorgang auf der Checkout-Seite

Lesezeit: 3 Minuten

Holen Sie sich die Bestell ID vor dem Zahlungsvorgang auf der
Ajand Mardalizad

In WooCommerce muss ich zugreifen order ID direkt auf der Checkout-Seite von WooCoommerce, vor der Zahlung, wenn die Bestellung erstellt wird.

Ich schaue mir alle Sitzungen an und versuche herauszufinden, wann die Bestellung zur Zahlung eingeht order_awaiting_payment Sitzung, aber ich brauche es, bevor ich zur Zahlung gehe.
Also denke ich über eine Lösung nach, die eine Bestellung aufgibt, wenn die Checkout-Seite geladen ist (tatsächlich zahlungsbereit macht) und wenn der Checkout wirklich vollständig aktualisiert wird.

Wie erhalte ich eine Bestell-ID auf der Checkout-Seite, bevor die Bestellung in WooCommerce zur Zahlung geht?

Ich denke, es gibt einen Haken dafür, aber ich kann ihn nicht finden.

Holen Sie sich die Bestell ID vor dem Zahlungsvorgang auf der
LoicTheAztec

Sie können eine benutzerdefinierte Funktion verwenden, die eingehakt ist woocommerce_checkout_order_processed Aktionshaken.
Seit woocommerce 3.0+ Version befindet sich hier der entsprechende Kerncode process_checkout() Funktion.

// Since WooCommerce version 3.0+
do_action( 'woocommerce_checkout_order_processed', $order_id, $posted_data, $order );

und unter WooCommerce 3.0-Version:

// Since WooCommerce version 2.1+ (before version 3.0+)
do_action( 'woocommerce_checkout_order_processed', $order_id, $this->posted );

Es gibt also 2 Fälle, je nachdem, welche Version von WooCommerce Sie verwenden:

Seit WooCommerce 3.0+ Sie können 2 zusätzliche Argumente in Ihrer Hook-Funktion verwenden und Sie müssen keine Instanz des Auftragsobjekts erstellen wie du bekommst $order schon als Argument.
Sie können auch direkt auf die veröffentlichten Daten zugreifen $posted_data Streit.

add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 3);
function action_checkout_order_processed( $order_id, $posted_data, $order ) {
   // Do something
}

Seit WooCommerce 2.1+ (Vor WooCommerce 3.0)Sie haben nur die $order_id als Argument, so dass Sie möglicherweise eine Instanz von benötigen $order Objekt mit wc_get_order() Funktion:

add_action('woocommerce_checkout_order_processed', 'action_checkout_order_processed', 10, 1);
function action_checkout_order_processed( $order_id ) {
   // get an instance of the order object
   $order = wc_get_order( $order_id );

   // Do something
}

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

Daher können Sie leider nicht auf die Bestell-ID auf der Checkout-Seite selbst zugreifen, da die Bestellung noch nicht erstellt wurde. Obwohl dies zutrifft, werden die Warenkorbdaten vorübergehend als „Sitzung“ gespeichert, wie WooCommerce es nennt. Dies kann Ihnen bei Ihrem Problem mit der Weitergabe von Informationen an einen iFrame ein wenig helfen, wenn Sie es ein wenig optimieren können.

Sie können dies tun, indem Sie die Informationen aus der WC_session abrufen:

$cart_data = WC()->session->get('cart');

Sobald Sie dies getan haben, können Sie auf die von WooCommerce gespeicherte Warenkorbdatenhierarchie zugreifen, indem Sie einen Schlüsselindex wie ‘product_id’ verwenden:

$cart_data[array_keys($cart_data)[0]]['product_id'];

Hier ist die Liste der gültigen Warenkorbdatenschlüssel:

Schlüssel
Produkt ID
Variations-ID
Variation (Array)
Menge
data_hash
line_tax_data (Array)
line_subtotal
line_subtotal_tax
line_total
line_tax

1646321349 651 Holen Sie sich die Bestell ID vor dem Zahlungsvorgang auf der
Raunak Gupta

Wenn Sie nur hineinschauen class-wc-checkout.php Datei in Zeilennummer 935 sehen Sie, dass es eine Aktion gibt woocommerce_checkout_order_processed die passieren $order_id als Argument.

Das sollte also für Sie funktionieren:

add_action('woocommerce_checkout_order_processed', 'wh_pre_paymentcall');

function wh_pre_paymentcall($order_id) {

    //create an order instance
    $order = wc_get_order($order_id);
    //$payment_method = $order->payment_method_title;
    //$status = $order->get_status();

    // write your custom logic over here.
}

Code geht rein functions.php Datei deines aktiven Child-Themes (oder Themes). Oder auch in irgendwelchen Plugin-PHP-Dateien.

Verwandte Frage: WooCommerce Bestellproduktdetails vor der Zahlung im Plugin abrufen (Lesen Sie auch die Kommentare)

Hoffe das hilft!

  • Vielen Dank für Ihre großartige Antwort, aber eigentlich muss ich order_id an einen Iframe übergeben, der sich auf der Checkout-Seite befindet, also muss ich darauf zugreifen, wenn die Checkout-Seite geladen wird. Ich denke, dieser Hook führt eine Aktion aus, bevor er zur Zahlung geht, und kann nicht auf order_id zugreifen, wenn ich diesen Hook haben möchte

    – Ajand Mardalizad

    10. April 2017 um 8:38 Uhr

924790cookie-checkHolen Sie sich die Bestell-ID vor dem Zahlungsvorgang auf der Checkout-Seite

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

Privacy policy