WordPress как на ладони
WordCamp Saint Petersburg 2018 wordpress jino

wc_get_order() WC 2.2

Получает данные указанного заказа в Woocommerce. Это функция обертка для получения объекта заказа, через который можно получить любые данные самого заказа и его элементов.

Работает на основе класса WC_Order_Factory.

Не все данные заказа можно получить напрямую из объекта, для некоторых данных нужно использовать специальные методы класса, см. примеры.

Работает на основе: WC_Order_Factory::get_order()

Хуков нет.

Возвращает

true/false/WC_Order/WC_Refund.

При успешном получении заказа, вернет экземпляр объекта WC_Order:

WC_Order Object
(
	[order_type] => simple
	[id] => 41863
	[post] => WP_Post Object
		(
			[ID] => 41863
			[post_author] => 1
			[post_date] => 2017-12-14 00:29:56
			[post_date_gmt] => 2017-12-13 21:29:56
			[post_content] => 
			[post_title] => Order – Декабрь 14, 2017 @ 12:29 ДП
			[post_excerpt] => 
			[post_status] => wc-pending
			[comment_status] => open
			[ping_status] => closed
			[post_password] => order_5a319bd4d901c
			[post_name] => zakaz-ndash-dec-13-2017-09-29-pm
			[to_ping] => 
			[pinged] => 
			[post_modified] => 2017-12-14 00:29:56
			[post_modified_gmt] => 2017-12-13 21:29:56
			[post_content_filtered] => 
			[post_parent] => 0
			[guid] => http://auto-ufa.com/?post_type=shop_order&p=41863
			[menu_order] => 0
			[post_type] => shop_order
			[post_mime_type] => 
			[comment_count] => 0
			[filter] => raw
		)

	[order_date] => 2017-12-14 00:29:56
	[modified_date] => 2017-12-14 00:29:56
	[customer_message] => 
	[customer_note] => 
	[post_status] => wc-pending
	[prices_include_tax] => 
	[tax_display_cart] => excl
	[display_totals_ex_tax] => 1
	[display_cart_ex_tax] => 1
	[formatted_billing_address:protected] => 
	[formatted_shipping_address:protected] => 
	[billing_email] => webgleb@gmail.com
)

Использование

$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'];
Элементы заказа

Для получения элементов заказа, нужно использовать специальные методы, которые обращаются к классам:

Т.е. нельзя обратиться к элементам заказа напрямую из объекта 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) данные.

Код wc get order: woocommerce/includes/wc-order-functions.php VER 3.3.5

<?php
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 );
}

Cвязанные функции

Из раздела: WooCommerce

wc_get_order Комментариев нет

    Здравствуйте, !