WC_Order_Factory::get_orders
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 Order Factory::get orders WC 10.4.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;
}