2016-07-11 19 views
6

Ich erstelle einen Online-Shop mit WooCommerce und ich füge eine Funktion hinzu, die den Bonuspunkt auf meine Datenbank in absract-wc-payment-gateway.php aktualisiert.WooCommerce - get_order() funktioniert nicht und es gibt null zurück

Hier ist, was ich tue:

  1. Zum einen auf der Checkout-Seite, werden die Benutzer klicken Sie auf die place order Taste und dann die Methode der Benutzer Bonuspunkte und minus die Bonuspunkte mit dem get-total() bekommen, und dann auf die Datenbank aktualisieren und auf die Dankeseite gehen.

enter image description here

  1. Dann wird die Dankesseite werden die Bonuspunkte aus der Datenbank des Benutzers erhalten. Und ich die Bonuspunkte Wert auf 2000 Also in diesem Fall sollten die Bonuspunkte minus von Gesamt Punkten sein ($ 50,00)

enter image description here

Hier ist mein Code. Es lief, wenn der Benutzer den Ort, um Schaltfläche 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, wenn der Benutzer Ort Schaltfläche 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() Linien 89 von abstract-WC-Payment-Gateway.php

Die get_total() funktioniert nicht und es gibt Null zurück.

Was mache ich falsch?

+0

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

Antwort

3

Sie müssen ein Objekt für $order erstellen, um es mit get_total() zu verwenden. Versuchen Sie folgendes:

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: Das gerade ist die interne Datenfehler zu lösen. Wir brauchen die $order_id bekommen zu bekommen es funktioniert ...

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


Update2 enthalten ist - die guten Track:

Entferne meinen Code:

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

Dann in Zeile 89 des Codes fügen Sie einfach $order in:

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

    // ... 

Wirklich glücklich, dass dies funktioniert ... Es war eine lange Suche ...

+0

Ich habe das Problem mit 'tracks: 2' behoben! Liebe dich so sehr <3 – Capslock10