Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection

QueryBuilder::merge_queries()privateWC 1.0

Merge in the first parameter the keys "post_in", "meta_query" and "tax_query" of the second parameter.

Method of the class: QueryBuilder{}

No Hooks.

Return

Array.

Usage

// private - for code of main (parent) class only
$result = $this->merge_queries( ...$queries );
...$queries(array[]) (required)
Query arrays to be merged.

QueryBuilder::merge_queries() code WC 9.6.0

private function merge_queries( ...$queries ) {
	// Rather than a simple merge, some query vars should be held aside and merged differently.
	$special_query_vars = array(
		'post__in' => array(),
	);
	$special_query_keys = array_keys( $special_query_vars );

	$merged_query = array_reduce(
		$queries,
		function ( $acc, $query ) use ( $special_query_keys, &$special_query_vars ) {
			if ( ! is_array( $query ) ) {
				return $acc;
			}

			// When the $query has keys but doesn't contain any valid query keys, we unpack/spread it then merge.
			if ( ! empty( $query ) && empty( array_intersect( $this->get_valid_query_vars(), array_keys( $query ) ) ) ) {
				return $this->merge_queries( $acc, ...array_values( $query ) );
			}

			// Pull out the special query vars so we can merge them separately.
			foreach ( $special_query_keys as $query_var ) {
				if ( isset( $query[ $query_var ] ) ) {
					$special_query_vars[ $query_var ][] = $query[ $query_var ];
					unset( $query[ $query_var ] );
				}
			}

			return $this->array_merge_recursive_replace_non_array_properties( $acc, $query );
		},
		array()
	);

	// Perform any necessary special merges.
	$merged_query['post__in'] = $this->merge_post__in( ...$special_query_vars['post__in'] );

	return $merged_query;
}