Wo hast du diesen Code abgelegt? Was war die Ausgabe, die Ihnen ein Problem vorschlug? Was erwarteten Sie von der Ausgabe? Woher $order_idkommt in Ihrem Beispiel? Benutzer benötigen mehr Kontext, um Ihnen zu helfen.
Nathan Dawson
1
Das Minus 1 ist, weil es eine Frage mit geringem Aufwand ist. Als solches ist es vage. Ich stimme Nathan zu, hier ist viel mehr Kontext erforderlich.
Helgatheviking
1
@LoicTheAztec Ich wollte die Versandart zum Zeitpunkt der Bestellung auswählen lassen. Ich habe also nicht in dem Array gefunden, das Sie gedruckt haben. Ich habe dies erhalten, indem ich $order = new \WC_Order($order_id); $ship_method = $order->get_shipping_methods(); foreach($ship_method as $SHPM) { $wooorder['_selected_shipping_method'] = $SHPM['name']; } den Methodennamen in das Array eingefügt und das gewünschte Ergebnis erhalten habe. Deine Hilfe wird geschätzt !
Faisal Ijaz
1
Obwohl die akzeptierte Antwort von hoher Qualität ist (jedoch zu weitreichend), frage ich mich, warum die eigentliche Frage nicht als zu vage und mit geringem Aufwand gekennzeichnet wurde.
Dhaval Shah
Antworten:
254
WOOCOMMERCE-BESTELLUNGEN IN VERSION 3.0+
Seit Woocommerce Mega Major Update 3.0+ haben sich die Dinge ziemlich verändert:
Bei WC_OrderObject kann nach wie vor nicht mehr direkt auf Eigenschaften zugegriffen werden, und es treten einige Fehler auf.
Für die Objektinstanz sind jetzt neue Methoden WC_Ordersowie WC_Abstract_OrderGetter- und Setter-Methoden erforderlich WC_Order.
Es gibt auch einige neue Klassen für Bestellartikel:
Daher ist in einer foreachSchleife nicht mehr wie zuvor auf die Eigenschaften von Auftragselementen zugegriffen, und Sie müssen stattdessen diese spezifischen Getter- und Setter-Methoden verwenden.
Mit einigen WC_Orderund WC_Abstract_OrderMethoden (Beispiel):
// Get an instance of the WC_Order object (same as before)
$order = wc_get_order( $order_id );
$order_id = $order->get_id();// Get the order ID
$parent_id = $order->get_parent_id();// Get the parent order ID (for subscriptions…)
$user_id = $order->get_user_id();// Get the costumer ID
$user = $order->get_user();// Get the WP_User object
$order_status = $order->get_status();// Get the order status (see the conditional method has_status() below)
$currency = $order->get_currency();// Get the currency used
$payment_method = $order->get_payment_method();// Get the payment method ID
$payment_title = $order->get_payment_method_title();// Get the payment method title
$date_created = $order->get_date_created();// Get date created (WC_DateTime object)
$date_modified = $order->get_date_modified();// Get date modified (WC_DateTime object)
$billing_country = $order->get_billing_country();// Customer billing country// ... and so on ...
Für den Auftragsstatus als bedingte Methode (wobei "the_targeted_status" definiert und durch einen Auftragsstatus ersetzt werden muss, um auf einen bestimmten Auftragsstatus abzuzielen) :
if( $order->has_status('completed')){// Do something}
Abrufen und Zugriff auf die Eigenschaften der Auftragsdaten (in einem Array von Werten):
// Get an instance of the WC_Order object
$order = wc_get_order( $order_id );
$order_data = $order->get_data();// The Order data
$order_id = $order_data['id'];
$order_parent_id = $order_data['parent_id'];
$order_status = $order_data['status'];
$order_currency = $order_data['currency'];
$order_version = $order_data['version'];
$order_payment_method = $order_data['payment_method'];
$order_payment_method_title = $order_data['payment_method_title'];
$order_payment_method = $order_data['payment_method'];
$order_payment_method = $order_data['payment_method'];## Creation and modified WC_DateTime Object date string ##// Using a formated date ( with php date() function as method)
$order_date_created = $order_data['date_created']->date('Y-m-d H:i:s');
$order_date_modified = $order_data['date_modified']->date('Y-m-d H:i:s');// Using a timestamp ( with php getTimestamp() function as method)
$order_timestamp_created = $order_data['date_created']->getTimestamp();
$order_timestamp_modified = $order_data['date_modified']->getTimestamp();
$order_discount_total = $order_data['discount_total'];
$order_discount_tax = $order_data['discount_tax'];
$order_shipping_total = $order_data['shipping_total'];
$order_shipping_tax = $order_data['shipping_tax'];
$order_total = $order_data['total'];
$order_total_tax = $order_data['total_tax'];
$order_customer_id = $order_data['customer_id'];// ... and so on## BILLING INFORMATION:
$order_billing_first_name = $order_data['billing']['first_name'];
$order_billing_last_name = $order_data['billing']['last_name'];
$order_billing_company = $order_data['billing']['company'];
$order_billing_address_1 = $order_data['billing']['address_1'];
$order_billing_address_2 = $order_data['billing']['address_2'];
$order_billing_city = $order_data['billing']['city'];
$order_billing_state = $order_data['billing']['state'];
$order_billing_postcode = $order_data['billing']['postcode'];
$order_billing_country = $order_data['billing']['country'];
$order_billing_email = $order_data['billing']['email'];
$order_billing_phone = $order_data['billing']['phone'];## SHIPPING INFORMATION:
$order_shipping_first_name = $order_data['shipping']['first_name'];
$order_shipping_last_name = $order_data['shipping']['last_name'];
$order_shipping_company = $order_data['shipping']['company'];
$order_shipping_address_1 = $order_data['shipping']['address_1'];
$order_shipping_address_2 = $order_data['shipping']['address_2'];
$order_shipping_city = $order_data['shipping']['city'];
$order_shipping_state = $order_data['shipping']['state'];
$order_shipping_postcode = $order_data['shipping']['postcode'];
$order_shipping_country = $order_data['shipping']['country'];
Holen Sie sich die Bestellpositionen und greifen Sie mit WC_Order_Item_Productund WC_Order_ItemMethoden auf die Daten zu :
// Get an instance of the WC_Order object
$order = wc_get_order($order_id);// Iterating through each WC_Order_Item_Product objectsforeach($order->get_items()as $item_key => $item ):## Using WC_Order_Item methods ##// Item ID is directly accessible from the $item_key in the foreach loop or
$item_id = $item->get_id();## Using WC_Order_Item_Product methods ##
$product = $item->get_product();// Get the WC_Product object
$product_id = $item->get_product_id();// the Product id
$variation_id = $item->get_variation_id();// the Variation id
$item_type = $item->get_type();// Type of the order item ("line_item")
$item_name = $item->get_name();// Name of the product
$quantity = $item->get_quantity();
$tax_class = $item->get_tax_class();
$line_subtotal = $item->get_subtotal();// Line subtotal (non discounted)
$line_subtotal_tax = $item->get_subtotal_tax();// Line subtotal tax (non discounted)
$line_total = $item->get_total();// Line total (discounted)
$line_total_tax = $item->get_total_tax();// Line total tax (discounted)## Access Order Items data properties (in an array of values) ##
$item_data = $item->get_data();
$product_name = $item_data['name'];
$product_id = $item_data['product_id'];
$variation_id = $item_data['variation_id'];
$quantity = $item_data['quantity'];
$tax_class = $item_data['tax_class'];
$line_subtotal = $item_data['subtotal'];
$line_subtotal_tax = $item_data['subtotal_tax'];
$line_total = $item_data['total'];
$line_total_tax = $item_data['total_tax'];// Get data from The WC_product object using methods (examples)
$product = $item->get_product();// Get the WC_Product object
$product_type = $product->get_type();
$product_sku = $product->get_sku();
$product_price = $product->get_price();
$stock_quantity = $product->get_stock_quantity();
endforeach;
Mit der get_data()Methode können wir also auf die geschützten Daten zugreifen (assoziativer Array-Modus).
Die Verwendung von get_data () ist ideal, um mit einem assoziativen Array auf geschützte Daten zuzugreifen. Nur diese 2 funktionieren nicht: $ order_date_created = $ order_data ['date_created'] -> date; $ order_date_modified = $ order_data ['date_modified'] -> date;
Tarik
@ Tarik Oh ja du hast recht ... Ich habe meine Antwort getestet und aktualisiert. Jetzt geht es. Vielen Dank
LoicTheAztec
Außerdem verwende ich $ product_data = json_decode (get_product ($ item_values ['product_id']), true); in der foreach-Schleife, um Produktdetails in einem Array abzurufen, z. B.: sku: $ product_data [sku] oder slug: $ product_data [slug]
Tarik
1
@ Ravimallya Ok, also einfach mit dem WC_Order-Objekt verwenden $created_via = $order->get_created_via( );... oder mit der $order_idVerwendung $created_via = get_post_meta( $order_id, '_created_via', true );... Beide funktionieren.
Hier ist eine benutzerdefinierte Funktion, die ich erstellt habe, um Ihnen die Dinge zu verdeutlichen, die sich auf das Abrufen der Daten einer Bestellnummer beziehen. Sie sehen all die verschiedenen RAW-Ausgaben, die Sie erhalten können, und wie Sie die benötigten Daten erhalten ...
Mit print_r()function (oder auch var_dump()function) können Sie die Rohdaten eines Objekts oder Arrays ausgeben.
Also gebe ich zuerst diese Daten aus, um das Objekt oder die Array-Hierarchie anzuzeigen. Dann verwende ich je nach Typ dieser Variablen (Zeichenfolge, Array oder Objekt) eine andere Syntax, um die spezifischen benötigten Daten auszugeben.
WICHTIG: Mit $orderObjekt können Sie die meisten WC_orderoder Methoden verwenden (unter Verwendung der Objektsyntax)…WC_Abstract_Order
$order_id
kommt in Ihrem Beispiel? Benutzer benötigen mehr Kontext, um Ihnen zu helfen.$order = new \WC_Order($order_id); $ship_method = $order->get_shipping_methods(); foreach($ship_method as $SHPM) { $wooorder['_selected_shipping_method'] = $SHPM['name']; }
den Methodennamen in das Array eingefügt und das gewünschte Ergebnis erhalten habe. Deine Hilfe wird geschätzt !Antworten:
WOOCOMMERCE-BESTELLUNGEN IN VERSION 3.0+
Seit Woocommerce Mega Major Update 3.0+ haben sich die Dinge ziemlich verändert:
WC_Order
Object kann nach wie vor nicht mehr direkt auf Eigenschaften zugegriffen werden, und es treten einige Fehler auf.WC_Order
sowieWC_Abstract_Order
Getter- und Setter-Methoden erforderlichWC_Order
.WC_Order_Item
Klasse ,WC_Order_Item_Product
Klasse ,WC_Order_Item_Tax
Klasse ,WC_Order_Item_Shipping
Klasse ,WC_Order_Item_Coupon
Klasse ,WC_Order_Item_Fee
Klasse .WC_Data
erlauben Abstrakte Klasse den Zugriff auf Bestellung und Auftragspositionen Datenget_data()
,get_meta_data()
undget_meta()
Methoden.Daher ist in einer
foreach
Schleife nicht mehr wie zuvor auf die Eigenschaften von Auftragselementen zugegriffen, und Sie müssen stattdessen diese spezifischen Getter- und Setter-Methoden verwenden.Mit einigen
WC_Order
undWC_Abstract_Order
Methoden (Beispiel):Abrufen und Zugriff auf die Eigenschaften der Auftragsdaten (in einem Array von Werten):
Holen Sie sich die Bestellpositionen und greifen Sie mit
WC_Order_Item_Product
undWC_Order_Item
Methoden auf die Daten zu :quelle
$created_via = $order->get_created_via( );
... oder mit der$order_id
Verwendung$created_via = get_post_meta( $order_id, '_created_via', true );
... Beide funktionieren.$order_total = $order_data['total']
statt$order_total = $order_data['cart_tax']
;Hier ist eine benutzerdefinierte Funktion, die ich erstellt habe, um Ihnen die Dinge zu verdeutlichen, die sich auf das Abrufen der Daten einer Bestellnummer beziehen. Sie sehen all die verschiedenen RAW-Ausgaben, die Sie erhalten können, und wie Sie die benötigten Daten erhalten ...
Mit
print_r()
function (oder auchvar_dump()
function) können Sie die Rohdaten eines Objekts oder Arrays ausgeben.Hier ist der Code:
Der Code wird in der Datei function.php Ihres aktiven untergeordneten Themas (oder Themas) oder auch in einer beliebigen Plugin-Datei gespeichert.
Verwendung (wenn Ihre Bestellnummer beispielsweise 159 lautet):
Dieser Code ist getestet und funktioniert.
quelle
Der Zugriff auf direkte und verwandte Eigenschaften wird erläutert
Weitere Details
quelle
quelle