Automattic\WooCommerce\Internal\RestApi\Routes\V4\Products
Controller::build_dynamic_search_clauses
Build search clauses for dynamic product search.
Method of the class: Controller{}
No Hooks.
Returns
String.
Usage
// private - for code of main (parent) class only $result = $this->build_dynamic_search_clauses( $tokens, $fields );
- $tokens(array) (required)
- Search tokens.
- $fields(array) (required)
- Fields to search in.
Controller::build_dynamic_search_clauses() Controller::build dynamic search clauses code WC 10.4.3
private function build_dynamic_search_clauses( $tokens, $fields ) {
global $wpdb;
if ( empty( $fields ) || empty( $tokens ) ) {
return '';
}
$column_map = array(
'name' => "{$wpdb->posts}.post_title",
'sku' => 'wc_product_meta_lookup.sku',
'global_unique_id' => 'wc_product_meta_lookup.global_unique_id',
'description' => "{$wpdb->posts}.post_content",
'short_description' => "{$wpdb->posts}.post_excerpt",
);
$field_clauses = array();
foreach ( $tokens as $token ) {
$like_search = '%' . $wpdb->esc_like( $token ) . '%';
$field_token_clauses = array();
foreach ( $fields as $field ) {
if ( ! isset( $column_map[ $field ] ) ) {
continue;
}
$db_column = $column_map[ $field ];
$field_token_clauses[] = $wpdb->prepare( "({$db_column} LIKE %s)", $like_search ); // phpcs:ignore WordPress.DB.PreparedSQL.InterpolatedNotPrepared
}
if ( $field_token_clauses ) {
$field_clauses[] = '(' . implode( ' OR ', $field_token_clauses ) . ')';
}
}
return $field_clauses ? ' AND (' . implode( ' AND ', $field_clauses ) . ')' : '';
}