在 Woocommerce 3 中访问受订单项保护的数据
我正在尝试获取订单的行项目.
我正在这样做:
$order = new WC_Order(147);foreach ($order->get_items() as $key => $lineItem) {print_r('<pre>----');打印_r($lineItem);print_r('----</pre>');}
我可以看到我需要的所有数据,但数组显示:
[meta_data:protected] =>大批
如何访问该数组以获取值?
谢谢.
解决方案从 WooCommerce 3.0+ 开始,订单项目有了新的对象类
WC_Order_Item_Product
.
现在不能像以前一样直接访问订单项属性
因此,如果您查看输出的原始数据,您会发现每个行项目现在都是一个对象,并且您将能够以独占方式访问受保护的数据:
WC_Order_Item_Product
getters 方法(或者用 setters 方法改变它)...WC_Order_Item
get_formatted_meta_data( '', true )
方法来访问所有元数据.它提供了一组可访问的对象.请参阅WC_Data
方法get_meta()
访问每个元数据.WC_Data
getters 方法来取消保护此数据并使用以下方法通过数组访问它:get_data()
(这个方法非常有用)get_meta()
(这个方法最有用)get_data_keys()
get_meta_data()
(不会解除数据保护,使用get_formatted_meta_data()
)
wc_get_order_item_meta()
强大> 专用功能.
WC_Order_Item_Product
getter 方法:
//获取 WC_Order 对象的实例$order = wc_get_order(147);//遍历每个订单项foreach ($order->get_items() as $item_id => $item ) {echo $item->get_type().'
';//订单项类型echo $item->get_product_id().'
';//产品 IDecho $item->get_variation_id().'
';//变体IDecho $item->get_quantity().'
';//订单项数量echo $item->get_subtotal().'
';//行项目小计echo $item->get_total().'
';//行项目总计//关联的产品对象(也不能直接访问哪些属性)echo '';print_r( $item->get_product() );echo '</pre>';//... 等等 ...## 测试原始输出(受保护)//echo '';print_r($item);echo '</pre>';}
wc_get_order_item_meta()
功能.在这里,您可以进入wp_woocommerce_order_itemmeta
表并使用相应的meta_key
(对于line_item
数据类型项 ID):
//获取 WC_Order 对象的实例$order = wc_get_order(147);//遍历每个订单项foreach ($order->get_items() as $item_id => $item ) {echo wc_get_order_item_meta( $item_id, '_product_id', true).'
';//产品编号echo wc_get_order_item_meta( $item_id, '_variation_id', true).'
';//变量 IDecho wc_get_order_item_meta( $item_id, '_qty', true).'
';//数量echo wc_get_order_item_meta( $item_id, '_line_subtotal', true).'
';//行小计//... 等等 ...## 测试原始输出(受保护的数据)//echo '';print_r($item);echo '</pre>';}
WC_Data
方法 get_data()
方法(取消对数组中数据的保护):
//获取 WC_Order 对象的实例$order = wc_get_order(147);//遍历每个订单项foreach ($order->get_items() as $item_id => $item ) {//在一个可访问的数组中获取最有用的 Item 产品数据$item_data = $item->get_data();echo $item_data['id'].'
';//订单商品IDecho $item_data['order_id'].'
';//订单编号echo $item_data['product_id'].'
';//产品 IDecho $item_data['variation_id'].'
';//变量 IDecho $item_data['name'].'
';//产品标题(名称)echo $item_data['quantity'].'
';//订单项数量echo $item_data['subtotal'].'
';//行项目小计echo $item_data['total'].'
';//行项目总计//... 等等 ...
WC_Data
方法 get_meta()
方法(通过元键访问每个属性):
//获取 WC_Order 对象的实例$order = wc_get_order(147);//遍历每个订单项foreach ($order->get_items() as $item_id => $item ) {echo $item->get_meta('_product_id').'<br>';//产品 IDecho $item->get_meta('_variation_id').'
';//变量 IDecho $item->get_meta('_qty').'
';//订单项数量echo $item->get_meta('_line_subtotal').'<br>';//行项目小计echo $item->get_meta('_line_subtotal_tax').'
';//行项目小计税echo $item->get_meta('_line_total').'<br>';//行项目总计echo $item->get_meta('_line_tax').'<br>';//行项目总税额//变体的产品属性echo $item->get_meta('pa_color').'<br>';//颜色echo $item->get_meta('pa_size').'<br>';//颜色//自定义项目元数据echo $item->get_meta('custom_meta_key').'<br>';//自定义元键可见//... 等等 ...
相关:如何获取 WooCommerce 订单详情
I am trying to get the line items of an order.
I'm doing this:
$order = new WC_Order(147);
foreach ($order->get_items() as $key => $lineItem) {
print_r('<pre>----');
print_r($lineItem);
print_r('----</pre>');
}
I can see all the data I need but the array shows this:
[meta_data:protected] => Array
How can I access this array to get the values?
Thanks.
解决方案Since WooCommerce 3.0+ for Order items there is new Object class
WC_Order_Item_Product
.
Now Order items properties can't be accessed directly as before
So if you look at your output raw data you will see that each line item is now an object, and you will be able to access that protected data using exclusively:
WC_Order_Item_Product
getters methods (or to change it with the setters methods)…WC_Order_Item
get_formatted_meta_data( '', true )
method to access all meta data. It gives an array of accessible objects. SeeWC_Data
methodget_meta()
to access each meta data.WC_Data
getters methods to unprotect this data and access it through arrays using methods:get_data()
(this method is the very useful)get_meta()
(this method is the most useful)get_data_keys()
get_meta_data()
(does not unprotect the data, useget_formatted_meta_data()
)
wc_get_order_item_meta()
dedicated function.
The WC_Order_Item_Product
getters methods:
// 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>';
}
The wc_get_order_item_meta()
function. Here you can go in wp_woocommerce_order_itemmeta
table and output any data for an item ID using the corresponding meta_key
(for line_item
data type item ID):
// 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>';
}
The WC_Data
method get_data()
method (to unprotect the data in an array):
// 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 ...
The WC_Data
method get_meta()
method (to access each property by its meta key):
// 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
// ... and so on ...
Related: How to get WooCommerce order details
相关文章