Доступ к защищенным данным позиций заказа в Woocommerce 3
Я пытаюсь получить позиции заказа.
Я делаю это:
$order = new WC_Order(147);
foreach ($order->get_items() as $key => $lineItem) {
print_r('<pre>----');
print_r($lineItem);
print_r('----</pre>');
}
Я вижу все данные, которые мне нужны, но массив показывает это:
[meta_data:protected] => Array
Как я могу получить доступ к этому массиву, чтобы получить значения?
Благодарю.
2 ответа
Начиная с WooCommerce 3.0+ для элементов Order, появился новый класс Object
WC_Order_Item_Product
,
Теперь свойства Order Order не могут быть доступны напрямую, как раньше
Поэтому, если вы посмотрите на свои исходные необработанные данные, то увидите, что каждая позиция теперь является объектом, и вы сможете получить доступ к этим защищенным данным, используя исключительно:
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
методы получения:
// 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>';
}
wc_get_order_item_meta()
функция. Здесь вы можете пойти в wp_woocommerce_order_itemmeta
таблица и выводить любые данные для идентификатора элемента, используя соответствующие meta_key
(за line_item
идентификатор элемента типа данных):
// 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>';
}
WC_Data
метод get_data()
метод (снять защиту данных в массиве):
// 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 ...
WC_Data
метод get_meta()
метод (для доступа к каждому свойству по его мета-ключу):
// 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 ...
Связанный: Как получить детали заказа WooCommerce
Чтобы получить данные [meta_data:protected] => Array
Вам нужно использовать другой метод.
Просто используйте это $item_obj->get_meta_data();
Более подробный способ получить их, повторить их дважды следующим образом:
$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>';
}
}
}
Коллекция методов находится здесь