WooCommerce – get_order() funktioniert nicht und gibt Null zurück

Lesezeit: 2 Minuten

Benutzer-Avatar
Feststelltaste10

Ich erstelle einen Online-Shop mit WooCommerce und füge eine Funktion hinzu, die den Bonuspunkt in meiner Datenbank aktualisiert absract-wc-payment-gateway.php.

Hier ist, was ich tue:

  1. Zunächst klicken die Benutzer auf der Checkout-Seite auf die place order Schaltfläche und dann erhält die Methode die Bonuspunkte des Benutzers und minus die Bonuspunkte mit dem get-total()aktualisieren Sie dann die Datenbank und gehen Sie zur Dankesseite.

Geben Sie hier die Bildbeschreibung ein

  1. Dann erhält die Dankesseite die Bonuspunkte des Benutzers aus der Datenbank. Und ich setze den Wert der Bonuspunkte auf 2000. In diesem Fall sollten die Bonuspunkte also um die Gesamtpunktzahl (50,00 $) minus sein.

Geben Sie hier die Bildbeschreibung ein

Hier ist mein Code. Es wird ausgeführt, wenn der Benutzer auf die Schaltfläche „Bestellung aufgeben“ klickt:

global $woocommerce;
$order = new WC_Order($order_id);
$total = $order->get_total();   
$bonusPoint -= (int)$total; //minus total price and calculate the latest bonus point

$updateSql = "UPDATE userdata02 SET bonusPoint="" .$bonusPoint.  "" WHERE userID = 2147483647";

mysqli_query($link, $updateSql);// update to an int column

if(mysqli_query($link, $updateSql)) {
    echo "Record updated successfully";
} else {
    echo "Error update record: <>" . mysqli_error($link);
}

Rufen Sie die Methode auf, wenn der Benutzer auf die Schaltfläche „Platzieren“ klickt:

public function get_return_url( $order = null ) {

    if ( $order ) {
        //$message = "wrong answer";
        //echo "<script type="text/javascript">alert('$message');</script>";
        $return_url = $order->get_checkout_order_received_url();
    } else {
        $return_url = wc_get_endpoint_url( 'order-received', '', wc_get_page_permalink( 'checkout' ) );
    }

    if ( is_ssl() || get_option('woocommerce_force_ssl_checkout') == 'yes' ) {
        $return_url = str_replace( 'http:', 'https:', $return_url );
    }

    self::reducePoints();  //Call reducePoints();
    return apply_filters( 'woocommerce_get_return_url', $return_url, $order );
}

Der Quellcode: reducePoints() Zeilen 89 aus abstract-WC-Payment-Gateway.php

Das get_total() funktioniert nicht und gibt null zurück.

Was mache ich falsch?

  • Haben Sie das Fehlerprotokoll überprüft, warum dieser interne Fehler auftritt?

    – mujuonly

    11. Juli 2016 um 11:38 Uhr

Benutzer-Avatar
LoicTheAztec

Sie müssen ein Objekt für erstellen $order damit zu verwenden get_total(). Versuche dies:

global $woocommerce;
$order = new WC_Order($order_id);
$total = $order->get_total(); //Get the total price of the order.
$bonusPoints -= (int)$total; //calculate the new bonusPoints

Update1: Dies löst nur den internen Datenfehler. Wir müssen die bekommen $order_id damit es funktioniert…

Hinweis: Sie können entfernen global $woocommerce;Vor $order = new WC_Order($order_id); weil bereits enthalten ist public function reducePoints( ){


Update2 – Die gute Spur:

Entferne meinen Code:

global $woocommerce;
$order = new WC_Order($order_id); 

Fügen Sie dann in Zeile 89 Ihres Codes einfach hinzu $order in:

public function reducePoints( $order ){
    global $woocommerce;

    // ...

Wirklich glücklich, dass das funktioniert … Es war eine lange Suche …

  • Ich habe das Problem behoben, indem ich verwendet habe tracks:2! Hab dich so lieb <3

    – Feststelltaste10

    12. Juli 2016 um 4:31 Uhr

1370190cookie-checkWooCommerce – get_order() funktioniert nicht und gibt Null zurück

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

Privacy policy