Automattic\WooCommerce\Admin\API\Reports\Customers

Controller::consolidate_customer_id_filterspublic staticWC 1.0

Consolidate customer identity filter IDs into customers/customers_exclude.

When the frontend sends customer IDs via name_includes, email_includes, or username_includes, this method collects those IDs and merges them into the customers/customers_exclude params so the DataStore filters by customer_id.

Only numeric values are consolidated. String values (e.g. actual email addresses or names) are left untouched for the DataStore's exact-match filtering.

Method of the class: Controller{}

No Hooks.

Returns

array. Modified query arguments.

Usage

$result = Controller::consolidate_customer_id_filters( $args );
$args(array) (required)
Query arguments.

Controller::consolidate_customer_id_filters() code WC 11.0.1

public static function consolidate_customer_id_filters( $args ) {
	$include_params = array( 'name_includes', 'email_includes', 'username_includes' );
	$exclude_params = array( 'name_excludes', 'email_excludes', 'username_excludes' );
	$match          = $args['match'] ?? 'all';

	$include_sets = array();
	foreach ( $include_params as $param ) {
		if ( ! empty( $args[ $param ] ) && self::is_id_list( $args[ $param ] ) ) {
			$include_sets[] = wp_parse_id_list( $args[ $param ] );
			$args[ $param ] = null;
		}
	}
	if ( ! empty( $include_sets ) ) {
		$consolidated = count( $include_sets ) > 1
			? ( 'all' === $match
				? call_user_func_array( 'array_intersect', $include_sets )
				: array_unique( array_merge( ...$include_sets ) ) )
			: $include_sets[0];

		// Merge with any pre-existing customers filter.
		if ( ! empty( $args['customers'] ) ) {
			$existing     = wp_parse_id_list( $args['customers'] );
			$consolidated = 'all' === $match
				? array_intersect( $consolidated, $existing )
				: array_unique( array_merge( $consolidated, $existing ) );
		}

		// When match=all and intersection is empty, force no-results.
		$args['customers'] = empty( $consolidated ) ? array( 0 ) : array_values( $consolidated );
	}

	$exclude_sets = array();
	foreach ( $exclude_params as $param ) {
		if ( ! empty( $args[ $param ] ) && self::is_id_list( $args[ $param ] ) ) {
			$exclude_sets[] = wp_parse_id_list( $args[ $param ] );
			$args[ $param ] = null;
		}
	}
	if ( ! empty( $exclude_sets ) ) {
		$consolidated = count( $exclude_sets ) > 1
			? ( 'all' === $match
				? array_unique( array_merge( ...$exclude_sets ) )
				: call_user_func_array( 'array_intersect', $exclude_sets ) )
			: $exclude_sets[0];

		// Merge with any pre-existing customers_exclude filter.
		if ( ! empty( $args['customers_exclude'] ) ) {
			$existing     = wp_parse_id_list( $args['customers_exclude'] );
			$consolidated = array_unique( array_merge( $consolidated, $existing ) );
		}

		$args['customers_exclude'] = array_values( $consolidated );
	}

	return $args;
}