Automattic\WooCommerce\Internal\RestApi\Routes\V4\Products

Controller::build_dynamic_search_clausesprivateWC 1.0

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