J'essaie d'obtenir les éléments de campagne d'une commande.
Je fais ça:
$order = new WC_Order(147);
foreach ($order->get_items() as $key => $lineItem) {
print_r('<pre>----');
print_r($lineItem);
print_r('----</pre>');
}
Je peux voir toutes les données dont j'ai besoin, mais le tableau montre ceci:
[meta_data:protected] => Array
Comment puis-je accéder à ce tableau pour obtenir les valeurs?
Merci.
Depuis WooCommerce 3.0+ pour les articles de commande, il existe une nouvelle classe d'objets
WC_Order_Item_Product
.
Maintenant, les propriétés des articles de commande ne sont pas accessibles directement comme auparavant
Donc, si vous regardez vos données brutes de sortie, vous verrez que chaque élément de campagne est maintenant un objet, et vous pourrez accéder à ces données protégées en utilisant exclusivement:
WC_Order_Item_Product
méthodes getters (ou pour le changer avec les méthodes des setters)…WC_Order_Item
get_formatted_meta_data( '', true )
méthode pour accéder à toutes les métadonnées. Il donne un tableau d'objets accessibles. Voir WC_Data
méthode get_meta()
pour accéder à chaque métadonnée.WC_Data
obtient des méthodes pour déprotéger ces données et y accéder via des tableaux à l'aide de méthodes: get_data()
(cette méthode est très utile)get_meta()
(cette méthode est la plus utile)get_data_keys()
get_meta_data()
( ne déprotège pas les données , utilisez get_formatted_meta_data()
)wc_get_order_item_meta()
fonction dédiée.Les méthodes des getters WC_Order_Item_Product
:
// Get an instance of the WC_Order object
$order = wc_get_order(147);
// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {
echo $item->get_type().'<br>'; // The order item type
echo $item->get_product_id().'<br>'; // The Product ID
echo $item->get_variation_id().'<br>'; // The variation ID
echo $item->get_quantity().'<br>'; // Line item quantity
echo $item->get_subtotal().'<br>'; // Line item subtotal
echo $item->get_total().'<br>'; // Line item total
// The associated product object (which properties can't be accessed directly too)
echo '<pre>'; print_r( $item->get_product() ); echo '</pre>';
// ... and so on ...
## Testing raw output (protected)
// echo '<pre>'; print_r($item); echo '</pre>';
}
La fonction wc_get_order_item_meta()
. Ici, vous pouvez entrer dans le tableau wp_woocommerce_order_itemmeta
et sortir toutes les données pour un ID d'article en utilisant le correspondant meta_key
(pour line_item
ID d'élément de type de données):
// Get an instance of the WC_Order object
$order = wc_get_order(147);
// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {
echo wc_get_order_item_meta( $item_id, '_product_id', true). '<br>'; // Product ID
echo wc_get_order_item_meta( $item_id, '_variation_id', true). '<br>'; // Variation ID
echo wc_get_order_item_meta( $item_id, '_qty', true). '<br>'; // quantity
echo wc_get_order_item_meta( $item_id, '_line_subtotal', true). '<br>'; // Line subtotal
// ... and so on ...
## Testing raw output (protected data)
// echo '<pre>'; print_r($item); echo '</pre>';
}
La méthode WC_Data
get_data()
(pour déprotéger les données d'un tableau) :
// Get an instance of the WC_Order object
$order = wc_get_order(147);
// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {
// Get the most useful Item product data in an accessible array
$item_data = $item->get_data();
echo $item_data['id'].'<br>'; // The order item ID
echo $item_data['order_id'].'<br>'; // The order ID
echo $item_data['product_id'].'<br>'; // The Product ID
echo $item_data['variation_id'].'<br>'; // The Variation ID
echo $item_data['name'].'<br>'; // The Product title (name)
echo $item_data['quantity'].'<br>'; // Line item quantity
echo $item_data['subtotal'].'<br>'; // Line item subtotal
echo $item_data['total'].'<br>'; // Line item total
// ... and so on ...
La méthode WC_Data
get_meta()
(pour accéder à chaque propriété par sa méta-clé ):
// Get an instance of the WC_Order object
$order = wc_get_order(147);
// Iterating through each order item
foreach ($order->get_items() as $item_id => $item ) {
echo $item->get_meta('_product_id').'<br>'; // The Product ID
echo $item->get_meta('_variation_id').'<br>'; // The Variation ID
echo $item->get_meta('_qty').'<br>'; // Line item quantity
echo $item->get_meta('_line_subtotal').'<br>'; // Line item subtotal
echo $item->get_meta('_line_subtotal_tax').'<br>'; // Line item subtotal tax
echo $item->get_meta('_line_total').'<br>'; // Line item total
echo $item->get_meta('_line_tax').'<br>'; // Line item total tax
// Product attributes for variation
echo $item->get_meta('pa_color').'<br>'; // Color
echo $item->get_meta('pa_size').'<br>'; // Color
// Custom item meta gata
echo $item->get_meta('custom_meta_key').'<br>'; // custom meta key visible
echo $item->get_meta('_custom_meta_key').'<br>'; // custom meta key not visible
// ... and so on ...
Connexes: Comment obtenir les détails de la commande WooCommerce
Pour obtenir les données de [meta_data:protected] => Array
, Vous devez utiliser une autre méthode.
Utilisez simplement cette $item_obj->get_meta_data();
Pour les obtenir plus en détail, répétez-les deux fois comme suit:
$order = wc_get_order( $order_id );
foreach ($order->get_items() as $item_id => $item_obj) {
$kua = $item_obj->get_meta_data();
foreach ($kua as $key => $value) {
foreach ($value as $key2 => $value2) {
echo $key2.'->'.$value2.'<br>';
}
}
}
La collection des méthodes se trouve ici