wc_get_order()
Получает данные указанного заказа в Woocommerce. Это функция обертка для получения объекта заказа, через который можно получить любые данные самого заказа и его элементов.
Работает на основе класса WC_Order_Factory.
Не все данные заказа можно получить напрямую из объекта, для некоторых данных нужно использовать специальные методы класса, см. примеры.
Хуков нет.
Возвращает
false|WC_Order|WC_Order_Refund.
При успешном получении заказа, вернет экземпляр объекта WC_Order:
Использование
$order = wc_get_order( $the_order );
- $the_order(смешанный)
- ID или объект записи таблицы wp_posts. Заказы хранятся как записи типа shop_order.
По умолчанию: false
Примеры
#1 Пример получения данных заказа
// получаем экземпляр объекта WC_Order $order_id = 35; $order = wc_get_order( $order_id ); // получим ID заказа $order_id = $order->get_id(); //> 35 // получим ID покупателя $order_id = $order->get_user_id(); //> 5 // получим элементы заказа, подробнее ниже... $order->get_items(); // ... и т.д.
Получить данные заказа в виде массива можно через метод WC_Order::get_data()
Внимание! метод get_data() работает с версии WC 3.0.
// получаем объект WC_Order
$order = wc_get_order( 65 );
$data = $order->get_data(); // данные заказа
echo $data['id'];
echo $data['parent_id'];
echo $data['status'];
echo $data['currency'];
echo $data['version'];
echo $data['payment_method'];
echo $data['payment_method_title'];
echo $data['payment_method'];
echo $data['payment_method'];
// получаем отформатированную дату через метод date()
echo $data['date_created']->date('Y-m-d H:i:s');
echo $data['date_modified']->date('Y-m-d H:i:s');
// получаем метку времени через метод getTimestamp()
echo $data['date_created']->getTimestamp();
echo $data['date_modified']->getTimestamp();
// еще данные
echo $data['discount_total'];
echo $data['discount_tax'];
echo $data['shipping_total'];
echo $data['shipping_tax'];
echo $data['cart_tax'];
echo $data['total_tax'];
echo $data['customer_id']; // ... and so on
// billing - выписка счета
echo $data['billing']['first_name'];
echo $data['billing']['last_name'];
echo $data['billing']['company'];
echo $data['billing']['address_1'];
echo $data['billing']['address_2'];
echo $data['billing']['city'];
echo $data['billing']['state'];
echo $data['billing']['postcode'];
echo $data['billing']['country'];
echo $data['billing']['email'];
echo $data['billing']['phone'];
// shipping - доставка
echo $data['shipping']['first_name'];
echo $data['shipping']['last_name'];
echo $data['shipping']['company'];
echo $data['shipping']['address_1'];
echo $data['shipping']['address_2'];
echo $data['shipping']['city'];
echo $data['shipping']['state'];
echo $data['shipping']['postcode'];
echo $data['shipping']['country']; #2 Элементы заказа
Для получения элементов заказа, нужно использовать специальные методы, которые обращаются к классам:
Т.е. нельзя обратиться к элементам заказа напрямую из объекта WC_Order - только через спец методы.
$order = wc_get_order( 65 );
$order_items = $order->get_items();
foreach( $order_items as $item_id => $item ){
// методы класса WC_Order_Item
// ID элемента можно получить из ключа массива или так:
$item_id = $item->get_id();
// методы класса WC_Order_Item_Product
$item_name = $item->get_name(); // Name of the product
$item_type = $item->get_type(); // Type of the order item ("line_item")
$product_id = $item->get_product_id(); // the Product id
$wc_product = $item->get_product(); // the WC_Product object
// данные элемента заказа в виде массива
$item_data = $item->get_data();
echo $item_data['name'];
echo $item_data['product_id'];
echo $item_data['variation_id'];
echo $item_data['quantity'];
echo $item_data['tax_class'];
echo $item_data['subtotal'];
echo $item_data['subtotal_tax'];
echo $item_data['total'];
echo $item_data['total_tax'];
}
Метод get_data() позволяет получить защищенные (protected) данные.
Список изменений
| С версии 2.2 | Введена. |
Код wc_get_order() wc get order WC 10.5.2
function wc_get_order( $the_order = false ) {
if ( ! did_action( 'woocommerce_after_register_post_type' ) ) {
wc_doing_it_wrong( __FUNCTION__, 'wc_get_order should not be called before post types are registered (woocommerce_after_register_post_type action)', '2.5' );
return false;
}
return WC()->order_factory->get_order( $the_order );
}