WP_Query::parse_search_order( array $q ): string

In this article

Generates SQL for the ORDER BY condition based on passed search terms.

Parameters

$qarrayrequired
Query variables.

Return

string ORDER BY clause.

Source

	$stopwords = array();
	foreach ( $words as $word ) {
		$word = trim( $word, "\r\n\t " );
		if ( $word ) {
			$stopwords[] = $word;
		}
	}

	/**
	 * Filters stopwords used when parsing search terms.
	 *
	 * @since 3.7.0
	 *
	 * @param string[] $stopwords Array of stopwords.
	 */
	$this->stopwords = apply_filters( 'wp_search_stopwords', $stopwords );
	return $this->stopwords;
}

/**
 * Generates SQL for the ORDER BY condition based on passed search terms.
 *
 * @since 3.7.0
 *
 * @global wpdb $wpdb WordPress database abstraction object.
 *
 * @param array $q Query variables.
 * @return string ORDER BY clause.
 */
protected function parse_search_order( &$q ) {
	global $wpdb;

	if ( $q['search_terms_count'] > 1 ) {
		$num_terms = count( $q['search_orderby_title'] );

		// If the search terms contain negative queries, don't bother ordering by sentence matches.
		$like = '';
		if ( ! preg_match( '/(?:\s|^)\-/', $q['s'] ) ) {
			$like = '%' . $wpdb->esc_like( $q['s'] ) . '%';
		}

		$search_orderby = '';

		// Sentence match in 'post_title'.
		if ( $like ) {
			$search_orderby .= $wpdb->prepare( "WHEN {$wpdb->posts}.post_title LIKE %s THEN 1 ", $like );
		}

Changelog

VersionDescription
3.7.0Introduced.

User Contributed Notes

You must log in before being able to contribute a note or feedback.