Automattic\WooCommerce\Internal\DataStores\Orders
DataSynchronizer::get_ids_of_orders_pending_sync()
Get a list of ids of orders than are out of sync.
Valid values for $type are:
ID_TYPE_MISSING_IN_ORDERS_TABLE: orders that exist in posts table but not in orders table. ID_TYPE_MISSING_IN_POSTS_TABLE: orders that exist in orders table but not in posts table (the corresponding post entries are placeholders). ID_TYPE_DIFFERENT_UPDATE_DATE: orders that exist in both tables but have different last update dates. ID_TYPE_DELETED_FROM_ORDERS_TABLE: orders deleted from the orders table but not yet from the posts table. ID_TYPE_DELETED_FROM_POSTS_TABLE: orders deleted from the posts table but not yet from the orders table.
Метод класса: DataSynchronizer{}
Хуков нет.
Возвращает
Массив
. An array of order ids.
Использование
$DataSynchronizer = new DataSynchronizer(); $DataSynchronizer->get_ids_of_orders_pending_sync( $type, $limit );
- $type(int) (обязательный)
- One of ID_TYPE_MISSING_IN_ORDERS_TABLE, ID_TYPE_MISSING_IN_POSTS_TABLE, ID_TYPE_DIFFERENT_UPDATE_DATE.
- $limit(int) (обязательный)
- Maximum number of ids to return.
Код DataSynchronizer::get_ids_of_orders_pending_sync() DataSynchronizer::get ids of orders pending sync WC 9.2.3
public function get_ids_of_orders_pending_sync( int $type, int $limit ) { global $wpdb; if ( $limit < 1 ) { throw new \Exception( '$limit must be at least 1' ); } $orders_table = $this->data_store::get_orders_table_name(); $order_post_types = wc_get_order_types( 'cot-migration' ); $order_post_type_placeholders = implode( ', ', array_fill( 0, count( $order_post_types ), '%s' ) ); // phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared,WordPress.DB.PreparedSQLPlaceholders.UnfinishedPrepare,WordPress.DB.PreparedSQL.NotPrepared switch ( $type ) { case self::ID_TYPE_MISSING_IN_ORDERS_TABLE: $sql = $wpdb->prepare( " SELECT posts.ID FROM $wpdb->posts posts LEFT JOIN $orders_table orders ON posts.ID = orders.id WHERE posts.post_type IN ($order_post_type_placeholders) AND posts.post_status != 'auto-draft' AND orders.id IS NULL ORDER BY posts.ID ASC", $order_post_types ); break; case self::ID_TYPE_MISSING_IN_POSTS_TABLE: $sql = $wpdb->prepare( " SELECT orders.id FROM $wpdb->posts posts RIGHT JOIN $orders_table orders ON posts.ID=orders.id WHERE (posts.post_type IS NULL OR posts.post_type = '" . self::PLACEHOLDER_ORDER_POST_TYPE . "') AND orders.status NOT IN ( 'auto-draft' ) AND orders.type IN ($order_post_type_placeholders) ORDER BY posts.ID ASC", $order_post_types ); break; case self::ID_TYPE_DIFFERENT_UPDATE_DATE: $operator = $this->custom_orders_table_is_authoritative() ? '>' : '<'; $sql = $wpdb->prepare( " SELECT orders.id FROM $orders_table orders JOIN $wpdb->posts posts on posts.ID = orders.id WHERE posts.post_type IN ($order_post_type_placeholders) AND orders.date_updated_gmt $operator posts.post_modified_gmt ORDER BY orders.id ASC ", $order_post_types ); break; case self::ID_TYPE_DELETED_FROM_ORDERS_TABLE: return $this->get_deleted_order_ids( true, $limit ); case self::ID_TYPE_DELETED_FROM_POSTS_TABLE: return $this->get_deleted_order_ids( false, $limit ); default: throw new \Exception( 'Invalid $type, must be one of the ID_TYPE_... constants.' ); } // phpcs:enable // phpcs:ignore WordPress.DB return array_map( 'intval', $wpdb->get_col( $sql . " LIMIT $limit" ) ); }