WC_Order_Factory::get_orders()public staticWC 1.0

Get multiple orders (by ID).

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

Хуков нет.

Возвращает

Массив[\WC_Order].

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

$result = WC_Order_Factory::get_orders( $order_ids, $skip_invalid );
$order_ids(array[mixed])
Array of order IDs to get.
По умолчанию: array()
$skip_invalid(true|false)
-
По умолчанию: false) TRUE if invalid IDs or orders should be ignored

Код WC_Order_Factory::get_orders() WC 8.7.0

public static function get_orders( $order_ids = array(), $skip_invalid = false ) {
	if ( empty( $order_ids ) ) {
		return array();
	}

	$result              = array();
	$order_ids           = array_filter( array_map( array( __CLASS__, 'get_order_id' ), $order_ids ) );
	$original_order_sort = $order_ids;
	$order_cache         = wc_get_container()->get( OrderCache::class );

	$already_cached_orders = array();
	$use_orders_cache      = OrderUtil::orders_cache_usage_is_enabled();
	if ( $use_orders_cache ) {
		$uncached_order_ids = array();
		foreach ( $order_ids as $order_id ) {
			$cached_order = $order_cache->get( absint( $order_id ) );
			if ( $cached_order instanceof \WC_Abstract_Legacy_Order ) {
				$already_cached_orders[ $order_id ] = $cached_order;
			} else {
				$uncached_order_ids[] = $order_id;
			}
		}
		$order_ids = $uncached_order_ids;
	}

	// We separate order list by class, since their datastore might be different.
	$order_list_by_class = array();
	$order_id_classnames = self::get_class_names_for_order_ids( $order_ids );
	foreach ( $order_id_classnames as $order_id => $classname ) {
		if ( ! $classname && ! $skip_invalid ) {
			// translators: %d is an order ID.
			throw new \Exception( sprintf( __( 'Could not find classname for order ID %d', 'woocommerce' ), $order_id ) );
		}
		if ( ! isset( $order_list_by_class[ $classname ] ) ) {
			$order_list_by_class[ $classname ] = array();
		}
		try {
			$obj = new $classname();
			$obj->set_defaults();
			$obj->set_id( $order_id );

			$order_list_by_class[ $classname ][ $order_id ] = $obj;
		} catch ( \Exception $e ) {
			wc_caught_exception( $e, __FUNCTION__, array( $order_id ) );

			if ( ! $skip_invalid ) {
				throw $e;
			}
		}
	}

	foreach ( $order_list_by_class as $classname => $order_list ) {
		$data_store = ( new $classname() )->get_data_store();
		try {
			$data_store->read_multiple( $order_list );
		} catch ( \Exception $e ) {
			wc_caught_exception( $e, __FUNCTION__, $order_ids );

			if ( ! $skip_invalid ) {
				throw $e;
			}
		}
		foreach ( $order_list as $order ) {
			$result[ $order->get_id() ] = $order;
		}
	}

	if ( $use_orders_cache ) {
		foreach ( $result as $order_id => $order ) {
			$order_cache->set( $order, $order->get_id() );
		}
		$result = array_replace( $result, $already_cached_orders );
	}

	// restore the sort order.
	$result = array_values( array_replace( array_flip( $original_order_sort ), $result ) );
	return $result;
}