Automattic\WooCommerce\Admin\API\Reports\Customers
Controller::consolidate_customer_id_filters
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() Controller::consolidate customer id filters code WC 11.1.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;
}