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.
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() 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; }