Automattic\WooCommerce\Blocks\BlockTypes\ProductCollection
QueryBuilder::merge_queries
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.
Returns
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() QueryBuilder::merge queries code WC 10.3.6
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;
}