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.
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