get_product_from_item($item) veralteter Ersatz in WooCommerce

Lesezeit: 2 Minuten

Benutzer-Avatar
Liam McArthur

Ich versuche, einige veraltete Funktionen davon zu beheben nicht unterstütztes SagePay-Plugin.

Wie kann ich das folgende Snippet des veralteten Codes in WooCommerce ersetzen?

foreach ($order->get_items() as $item) {
if ($item['qty']) {
  $product = $order->get_product_from_item($item);

Ich kann sehen, dass dies sein Ersatz ist:

@deprecated Fügen Sie Verfallshinweise in zukünftigen Versionen hinzu. Ersetzt mit $item->get_product()

Aber einfach umstellen $product = $item->get_product(); funktioniert nicht. Ich habe auch versucht, diese Zeile zu ändern:

$product = wc_get_product($item['id']);

Aber es verursacht einen internen Serverfehler während des Bezahlvorgangs.

Benutzer-Avatar
LoicTheAztec

Sie können verwenden WC_data get_data() Methode an WC_Order und WC_Order_Items Objekte auf diese Weise:

// For testing only
$order = wc_get_order(500);

// Iterate though each order item
foreach ($order->get_items() as $item_id => $item) {

    // Get the WC_Order_Item_Product object properties in an array
    $item_data = $item->get_data();

    if ($item['quantity'] > 0) {
        // get the WC_Product object
        $product = wc_get_product($item['product_id']);
        // test output
        print_r($product);
    }
}

Oder mit dem WC_Order_Item_Product get_product_id() Methoden:

// For testing only
$order = wc_get_order(500);

// Iterate though each order item
foreach ($order->get_items() as $item_id => $item) {
    if( $item->get_quantity() > 0 ){
        // Get the product id from WC_Order_Item_Product object
        $product_id = $item->get_product_id();
        // get the WC_Product object
        $product = wc_get_product($item['product_id']);

        // test output
        print_r($product);
    }
}

All dies funktioniert in den aktiven Theme-PHP-Dateien.

Beim Testen in den Theme-PHP-Dateien kann ich die WC_Product Objekt mit $item->get_product();


Zugehörige Antwort: So erhalten Sie WooCommerce-Bestelldetails

  • Ich habe ursprünglich verwendet $item->get_product(); aber weil PhpStorm es als nicht vorhandene Methode unterstrich, habe ich es nicht verwendet. Es stellt sich heraus, dass dies tatsächlich funktioniert. Ich habe die letzte Zeile buchstäblich in geändert $product = $item->get_product(); und es funktioniert jetzt einwandfrei.

    – Liam McArthur

    11. Juli 2017 um 12:30 Uhr

  • @LiamMcArthur Ich war sehr überrascht, dass es nicht funktionierte … So dumme Editoren, die nicht mit den neuen WC-Methoden aktualisiert wurden … froh, dass es funktioniert.

    – LoicTheAztec

    11. Juli 2017 um 12:33 Uhr

1097470cookie-checkget_product_from_item($item) veralteter Ersatz in WooCommerce

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

Privacy policy