diff --git a/src/wp-includes/query.php b/src/wp-includes/query.php index 733eea7dc7..b4aae270b2 100644 --- a/src/wp-includes/query.php +++ b/src/wp-includes/query.php @@ -2300,7 +2300,7 @@ class WP_Query { $like = '%' . $wpdb->esc_like( $q['s'] ) . '%'; } - $search_orderby = '(CASE '; + $search_orderby = ''; // sentence match in 'post_title' if ( $like ) { @@ -2321,7 +2321,10 @@ class WP_Query { if ( $like ) { $search_orderby .= $wpdb->prepare( "WHEN $wpdb->posts.post_content LIKE %s THEN 4 ", $like ); } - $search_orderby .= 'ELSE 5 END)'; + + if ( $search_orderby ) { + $search_orderby = '(CASE ' . $search_orderby . 'ELSE 5 END)'; + } } else { // single word or sentence search $search_orderby = reset( $q['search_orderby_title'] ) . ' DESC'; diff --git a/tests/phpunit/tests/query/search.php b/tests/phpunit/tests/query/search.php index caf862c0d6..5fe6d5e62a 100644 --- a/tests/phpunit/tests/query/search.php +++ b/tests/phpunit/tests/query/search.php @@ -125,4 +125,16 @@ class Tests_Query_Search extends WP_UnitTestCase { $this->assertEqualSets( array( $p3 ), $q->posts ); } + + /** + * @ticket 35361 + */ + public function test_search_orderby_should_be_empty_when_search_string_is_longer_than_6_words_and_exclusion_operator_is_used() { + $q = new WP_Query( array( + 's' => 'foo1 foo2 foo3 foo4 foo5 foo6 foo7 -bar', + 'fields' => 'ids', + ) ); + + $this->assertNotRegExp( '|ORDER BY \(CASE[^\)]+\)|', $q->request ); + } }