2017-04-05 1 views
5

Ich habe gerade meine lokale WooCommerce-Website auf 3.0 aktualisiert. Alles funktioniert perfekt als normal, aber ich habe mit Debuggen bemerkt eingeschaltet, dass ich Hunderte der folgenden Hinweise bekommen:Bestellen Eigenschaften sollten nicht direkt zugegriffen werden - WooCommerce 3.0

[05-Apr-2017 12:25:00 UTC] PHP Notice: id was called <strong>incorrectly</strong>. Order properties should not be accessed directly. Please see <a href="https://codex.wordpress.org/Debugging_in_WordPress">Debugging in WordPress</a> for more information. (This message was added in version 3.0.) in C:\xampp\htdocs\dev\wp-includes\functions.php on line 4137

So sieht es aus wie WooCommerce ziehen zurück Lage, direkt um Daten abzurufen . Ein Beispiel dieser Code ausgelöst wird durch diese Funktion ist in meiner functions.php-Datei:

function eden_woocommerce_order_number($original, $order) 
{ 
    return 'EDN-' . str_pad($order->id, 10, 0, STR_PAD_LEFT); 
} 

Diese Funktion fügt einfach „EDN“ zu Beginn der Auftrags-ID und Pads es von 10 Zeichen, aber WooCommerce doesn‘ t wie ich rufe $order - was wäre der beste Weg, um eine solche Funktion, die 3,0 glücklich ist mit neu schreiben?

Antwort

7

es heißt "ID wurde falsch aufgerufen. Auftrag Eigenschaften sollten nicht direkt zugegriffen werden."

Versuchen $order->get_id()

+0

Richtig, das Problem zu beheben erschien. Außerdem habe ich Bestelldaten wie '$ data = get_post_meta ($ order_id)' falsch aufgerufen. Stattdessen habe ich dies in '$ data = new WC_Order ($ order_id);' geändert und die notwendigen Funktionen über diese Methode aufgerufen, zum Beispiel: '$ data-> get_billing_address_2();'. –

+0

Gibt es eine Idee, ob dies abwärtskompatibel zu WC 2.6.x ist? –

+1

@bret Ich lese einige gute Beispiele auf dem WooCommerce Blog, z. https://woocommerce.wordpress.com/2017/01/17/wc-2-7-extension-compatibility-examples/ – mbg

7

Vielleicht auch für andere seine hilfreich. Hier sind ein paar Dinge, die alle Funktionen direkt zugänglicher Werte durch die magische Funktion betreffen.

Diese Funktion ist von WooCommerce 3,0

if ('completed_date' === $key) { 
     return $this->get_date_completed() ? gmdate('Y-m-d H:i:s', $this->get_date_completed()->getOffsetTimestamp()) : ''; 
    } elseif ('paid_date' === $key) { 
     return $this->get_date_paid() ? gmdate('Y-m-d H:i:s', $this->get_date_paid()->getOffsetTimestamp()) : ''; 
    } elseif ('modified_date' === $key) { 
     return $this->get_date_modified() ? gmdate('Y-m-d H:i:s', $this->get_date_modified()->getOffsetTimestamp()) : ''; 
    } elseif ('order_date' === $key) { 
     return $this->get_date_created() ? gmdate('Y-m-d H:i:s', $this->get_date_created()->getOffsetTimestamp()) : ''; 
    } elseif ('id' === $key) { 
     return $this->get_id(); 
    } elseif ('post' === $key) { 
     return get_post($this->get_id()); 
    } elseif ('status' === $key) { 
     return $this->get_status(); 
    } elseif ('post_status' === $key) { 
     return get_post_status($this->get_id()); 
    } elseif ('customer_message' === $key || 'customer_note' === $key) { 
     return $this->get_customer_note(); 
    } elseif (in_array($key, array('user_id', 'customer_user'))) { 
     return $this->get_customer_id(); 
    } elseif ('tax_display_cart' === $key) { 
     return get_option('woocommerce_tax_display_cart'); 
    } elseif ('display_totals_ex_tax' === $key) { 
     return 'excl' === get_option('woocommerce_tax_display_cart'); 
    } elseif ('display_cart_ex_tax' === $key) { 
     return 'excl' === get_option('woocommerce_tax_display_cart'); 
    } elseif ('cart_discount' === $key) { 
     return $this->get_total_discount(); 
    } elseif ('cart_discount_tax' === $key) { 
     return $this->get_discount_tax(); 
    } elseif ('order_tax' === $key) { 
     return $this->get_cart_tax(); 
    } elseif ('order_shipping_tax' === $key) { 
     return $this->get_shipping_tax(); 
    } elseif ('order_shipping' === $key) { 
     return $this->get_shipping_total(); 
    } elseif ('order_total' === $key) { 
     return $this->get_total(); 
    } elseif ('order_type' === $key) { 
     return $this->get_type(); 
    } elseif ('order_currency' === $key) { 
     return $this->get_currency(); 
    } elseif ('order_version' === $key) { 
     return $this->get_version(); 
    } elseif (is_callable(array($this, "get_{$key}"))) { 
     return $this->{"get_{$key}"}(); 
    } else { 
     return get_post_meta($this->get_id(), '_' . $key, true); 
    } 
Verwandte Themen