WC_Data_Store_WP::get_wp_query_args
Get valid WP_Query args from a WC_Object_Query's query variables.
Method of the class: WC_Data_Store_WP{}
Hooks from the method
Returns
Array.
Usage
// protected - for code of main (parent) or child class $result = $this->get_wp_query_args( $query_vars );
- $query_vars(array) (required)
- query vars from a WC_Object_Query.
Changelog
| Since 3.1.0 | Introduced. |
WC_Data_Store_WP::get_wp_query_args() WC Data Store WP::get wp query args code WC 10.5.0
protected function get_wp_query_args( $query_vars ) {
$skipped_values = array( '', array(), null );
$wp_query_args = array(
'errors' => array(),
'meta_query' => array(), // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
);
foreach ( $query_vars as $key => $value ) {
if ( in_array( $value, $skipped_values, true ) || 'meta_query' === $key ) {
continue;
}
// Build meta queries out of vars that are stored in internal meta keys.
if ( in_array( '_' . $key, $this->internal_meta_keys, true ) ) {
// Check for existing values if wildcard is used.
if ( '*' === $value ) {
$wp_query_args['meta_query'][] = array(
array(
'key' => '_' . $key,
'compare' => 'EXISTS',
),
array(
'key' => '_' . $key,
'value' => '',
'compare' => '!=',
),
);
} else {
$wp_query_args['meta_query'][] = array(
'key' => '_' . $key,
'value' => $value,
'compare' => is_array( $value ) ? 'IN' : '=',
);
}
} else { // Other vars get mapped to wp_query args or just left alone.
$key_mapping = array(
'parent' => 'post_parent',
'parent_exclude' => 'post_parent__not_in',
'exclude' => 'post__not_in',
'limit' => 'posts_per_page',
'type' => 'post_type',
'return' => 'fields',
);
if ( isset( $key_mapping[ $key ] ) ) {
$wp_query_args[ $key_mapping[ $key ] ] = $value;
} else {
$wp_query_args[ $key ] = $value;
}
}
}
return apply_filters( 'woocommerce_get_wp_query_args', $wp_query_args, $query_vars );
}