WHERE order_id IN ({$included_order_ids})
* Get customer data from Order data.
* @param array $orders Array of orders data.
protected function get_customers_by_orders( $orders ) {
$customer_lookup_table = $wpdb->prefix . 'wc_customer_lookup';
foreach ( $orders as $order ) {
if ( $order['customer_id'] ) {
$customer_ids[] = intval( $order['customer_id'] );
if ( empty( $customer_ids ) ) {
/* phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared */
$customer_ids = implode( ',', $customer_ids );
$customers = $wpdb->get_results(
"SELECT * FROM {$customer_lookup_table} WHERE customer_id IN ({$customer_ids})",
* Get coupon information from order IDs.
* @param array $order_ids Array of order IDs.
protected function get_coupons_by_order_ids( $order_ids ) {
$order_coupon_lookup_table = $wpdb->prefix . 'wc_order_coupon_lookup';
$included_order_ids = implode( ',', $order_ids );
/* phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared */
$coupons = $wpdb->get_results(
"SELECT order_id, coupon_id, post_title as coupon_code
JOIN {$order_coupon_lookup_table} ON {$order_coupon_lookup_table}.coupon_id = {$wpdb->posts}.ID
order_id IN ({$included_order_ids})
* Get order attributions data from order IDs.
* @param array $order_ids Array of order IDs.
protected function get_order_attributions_by_order_ids( $order_ids ) {
$order_meta_table = OrdersTableDataStore::get_meta_table_name();
$included_order_ids = implode( ',', array_map( 'absint', $order_ids ) );
if ( OrderUtil::custom_orders_table_usage_is_enabled() ) {
/* phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared */
$order_attributions_meta = $wpdb->get_results(
"SELECT order_id, meta_key, meta_value
WHERE order_id IN ({$included_order_ids})
AND meta_key IN ( '_wc_order_attribution_source_type', '_wc_order_attribution_utm_source' )
/* phpcs:disable WordPress.DB.PreparedSQL.InterpolatedNotPrepared */
$order_attributions_meta = $wpdb->get_results(
"SELECT post_id as order_id, meta_key, meta_value
WHERE post_id IN ({$included_order_ids})
AND meta_key IN ( '_wc_order_attribution_source_type', '_wc_order_attribution_utm_source' )
$order_attributions = array();
foreach ( $order_attributions_meta as $meta ) {
if ( ! isset( $order_attributions[ $meta['order_id'] ] ) ) {
$order_attributions[ $meta['order_id'] ] = array();
$order_attributions[ $meta['order_id'] ][ $meta['meta_key'] ] = $meta['meta_value'];
return $order_attributions;
* Get all statuses that have been synced.
* @return string[] Unique order statuses.
public static function get_all_statuses() {
$statuses = wp_cache_get( self::ORDERS_STATUSES_ALL_CACHE_KEY, 'woocommerce_analytics' );
if ( false === $statuses ) {
$table_name = self::get_db_table_name();
$statuses = $wpdb->get_col( $wpdb->prepare( 'SELECT DISTINCT status FROM %i', $table_name ) );
wp_cache_set( self::ORDERS_STATUSES_ALL_CACHE_KEY, $statuses, 'woocommerce_analytics', YEAR_IN_SECONDS );
* Ensure the order status will present in `get_all_statuses` call result.
* @param int $order_id Order ID.
public static function maybe_update_order_statuses_cache( $order_id ) {
$order = wc_get_order( $order_id );
$status = self::normalize_order_status( $order->get_status() );
$statuses = self::get_all_statuses();
if ( ! in_array( $status, $statuses, true ) ) {
wp_cache_set( self::ORDERS_STATUSES_ALL_CACHE_KEY, $statuses, 'woocommerce_analytics', YEAR_IN_SECONDS );
* Ensure the order status will present in `get_all_statuses` call result.
* @deprecated 10.3.0 Use maybe_update_order_statuses_cache().
* @param int $order_id Order ID.
public static function maybe_update_order_statuses_transient( $order_id ) {
wc_deprecated_function( __METHOD__, '10.3.0', __CLASS__ . '::maybe_update_order_statuses_cache()' );
self::maybe_update_order_statuses_cache( $order_id );
* Initialize query objects.
protected function initialize_queries() {
$this->clear_all_clauses();
$this->subquery = new SqlQuery( $this->context . '_subquery' );
$this->subquery->add_sql_clause( 'select', self::get_db_table_name() . '.order_id' );
$this->subquery->add_sql_clause( 'from', self::get_db_table_name() );