Automattic\WooCommerce\Admin\API

Orders::get_products_by_order_id()protectedWC 1.0

Get product IDs, names, and quantity from order ID.

Метод класса: Orders{}

Хуков нет.

Возвращает

Массив.

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

// protected - в коде основоного (родительского) или дочернего класса
$result = $this->get_products_by_order_id( $order_id );
$order_id(массив) (обязательный)
ID of order.

Код Orders::get_products_by_order_id() WC 8.7.0

protected function get_products_by_order_id( $order_id ) {
	global $wpdb;
	$order_items_table    = $wpdb->prefix . 'woocommerce_order_items';
	$order_itemmeta_table = $wpdb->prefix . 'woocommerce_order_itemmeta';
	$products             = $wpdb->get_results(
		$wpdb->prepare(
			// phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
			"SELECT
			order_id,
			order_itemmeta.meta_value as product_id,
			order_itemmeta_2.meta_value as product_quantity,
			order_itemmeta_3.meta_value as variation_id,
			{$wpdb->posts}.post_title as product_name
		FROM {$order_items_table} order_items
		    LEFT JOIN {$order_itemmeta_table} order_itemmeta on order_items.order_item_id = order_itemmeta.order_item_id
		    LEFT JOIN {$order_itemmeta_table} order_itemmeta_2 on order_items.order_item_id = order_itemmeta_2.order_item_id
		    LEFT JOIN {$order_itemmeta_table} order_itemmeta_3 on order_items.order_item_id = order_itemmeta_3.order_item_id
		    LEFT JOIN {$wpdb->posts} on {$wpdb->posts}.ID = order_itemmeta.meta_value
		WHERE
			order_id = ( %d )
		    AND order_itemmeta.meta_key = '_product_id'
			AND order_itemmeta_2.meta_key = '_qty'
		  	AND order_itemmeta_3.meta_key = '_variation_id'
		GROUP BY product_id
		", // phpcs:enable WordPress.DB.PreparedSQL.InterpolatedNotPrepared
			$order_id
		),
		ARRAY_A
	);

	return $products;
}