WP_Query::parse_search_terms()protectedWP 3.7.0

Checks if the terms are suitable for searching.

Uses an array of stopwords (terms) that are excluded from the separate term matching when searching for posts. The list of English stopwords is the approximate search engines list, and is translatable.

Method of the class: WP_Query{}

No Hooks.

Return

String[]. Terms that are not stopwords.

Usage

// protected - for code of main (parent) or child class
$result = $this->parse_search_terms( $terms );
$terms(string[]) (required)
Array of terms to check.

Changelog

Since 3.7.0 Introduced.

WP_Query::parse_search_terms() code WP 6.6.2

protected function parse_search_terms( $terms ) {
	$strtolower = function_exists( 'mb_strtolower' ) ? 'mb_strtolower' : 'strtolower';
	$checked    = array();

	$stopwords = $this->get_search_stopwords();

	foreach ( $terms as $term ) {
		// Keep before/after spaces when term is for exact match.
		if ( preg_match( '/^".+"$/', $term ) ) {
			$term = trim( $term, "\"'" );
		} else {
			$term = trim( $term, "\"' " );
		}

		// Avoid single A-Z and single dashes.
		if ( ! $term || ( 1 === strlen( $term ) && preg_match( '/^[a-z\-]$/i', $term ) ) ) {
			continue;
		}

		if ( in_array( call_user_func( $strtolower, $term ), $stopwords, true ) ) {
			continue;
		}

		$checked[] = $term;
	}

	return $checked;
}