Title: WP_Query::parse_search_terms
Published: April 25, 2014
Last modified: April 28, 2025

---

# WP_Query::parse_search_terms( string[] $terms ): string[]

## In this article

 * [Description](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#description)
 * [Parameters](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#parameters)
 * [Return](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#return)
 * [Source](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#source)
 * [Related](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#related)
 * [Changelog](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#changelog)

[ Back to top](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#wp--skip-link--target)

Checks if the terms are suitable for searching.

## 󠀁[Description](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#description)󠁿

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.

## 󠀁[Parameters](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#parameters)󠁿

 `$terms`string[]required

Array of terms to check.

## 󠀁[Return](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#return)󠁿

 string[] Terms that are not stopwords.

## 󠀁[Source](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#source)󠁿

    ```php
    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;
    }
    ```

[View all references](https://developer.wordpress.org/reference/files/wp-includes/class-wp-query.php/)
[View on Trac](https://core.trac.wordpress.org/browser/tags/6.9.4/src/wp-includes/class-wp-query.php#L1546)
[View on GitHub](https://github.com/WordPress/wordpress-develop/blob/6.9.4/src/wp-includes/class-wp-query.php#L1546-L1573)

## 󠀁[Related](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#related)󠁿

| Uses | Description | 
| [WP_Query::get_search_stopwords()](https://developer.wordpress.org/reference/classes/wp_query/get_search_stopwords/)`wp-includes/class-wp-query.php` |

Retrieves stopwords used when parsing search terms.

  |

| Used by | Description | 
| [WP_Query::parse_search()](https://developer.wordpress.org/reference/classes/wp_query/parse_search/)`wp-includes/class-wp-query.php` |

Generates SQL for the WHERE clause based on passed search terms.

  |

## 󠀁[Changelog](https://developer.wordpress.org/reference/classes/wp_query/parse_search_terms/?output_format=md#changelog)󠁿

| Version | Description | 
| [3.7.0](https://developer.wordpress.org/reference/since/3.7.0/) | Introduced. |

## User Contributed Notes

You must [log in](https://login.wordpress.org/?redirect_to=https%3A%2F%2Fdeveloper.wordpress.org%2Freference%2Fclasses%2Fwp_query%2Fparse_search_terms%2F)
before being able to contribute a note or feedback.