Ticket #35762: 35762.3.diff
File 35762.3.diff, 3.6 KB (added by , 9 years ago) |
---|
-
src/wp-includes/query.php
diff --git src/wp-includes/query.php src/wp-includes/query.php index 70d0237..f79ce6f 100644
class WP_Query { 2154 2154 } 2155 2155 2156 2156 $like = $n . $wpdb->esc_like( $term ) . $n; 2157 $search .= $wpdb->prepare( "{$searchand}(($wpdb->posts.post_title $like_op %s) $andor_op ($wpdb->posts.post_ content $like_op %s))", $like, $like );2157 $search .= $wpdb->prepare( "{$searchand}(($wpdb->posts.post_title $like_op %s) $andor_op ($wpdb->posts.post_excerpt $like_op %s) $andor_op ($wpdb->posts.post_content $like_op %s))", $like, $like, $like ); 2158 2158 $searchand = ' AND '; 2159 2159 } 2160 2160 … … class WP_Query { 2278 2278 $search_orderby .= 'WHEN ' . implode( ' OR ', $q['search_orderby_title'] ) . ' THEN 3 '; 2279 2279 } 2280 2280 2281 // sentence match in 'post_content' 2281 // sentence match in 'post_content' and 'post_excerpt' 2282 2282 if ( $like ) { 2283 $search_orderby .= $wpdb->prepare( "WHEN $wpdb->posts.post_content LIKE %s THEN 4 ", $like ); 2283 $search_orderby .= $wpdb->prepare( "WHEN $wpdb->posts.post_excerpt LIKE %s THEN 4 ", $like ); 2284 $search_orderby .= $wpdb->prepare( "WHEN $wpdb->posts.post_content LIKE %s THEN 5 ", $like ); 2284 2285 } 2285 2286 2286 2287 if ( $search_orderby ) { 2287 $search_orderby = '(CASE ' . $search_orderby . 'ELSE 5END)';2288 $search_orderby = '(CASE ' . $search_orderby . 'ELSE 6 END)'; 2288 2289 } 2289 2290 } else { 2290 2291 // single word or sentence search -
tests/phpunit/tests/query/search.php
diff --git tests/phpunit/tests/query/search.php tests/phpunit/tests/query/search.php index 859cd98..35f734b 100644
class Tests_Query_Search extends WP_UnitTestCase { 178 178 $this->assertNotContains( 'posts_search', $q->request ); 179 179 } 180 180 181 /** 182 * @ticket 35762 183 */ 184 public function test_search_post_excerpt() { 185 $p1 = self::factory()->post->create( array( 186 'post_status' => 'publish', 187 'post_content' => 'This post has foo but also bar', 188 ) ); 189 $p2 = self::factory()->post->create( array( 190 'post_status' => 'publish', 191 'post_content' => '', 192 'post_excerpt' => 'This post has bar and baz', 193 ) ); 194 $p3 = self::factory()->post->create( array( 195 'post_status' => 'publish', 196 'post_content' => '', 197 'post_excerpt' => 'This post has only foo', 198 ) ); 199 200 $q = new WP_Query( array( 201 's' => 'foo', 202 'fields' => 'ids', 203 ) ); 204 205 $this->assertEqualSets( array( $p1, $p3 ), $q->posts ); 206 207 $q = new WP_Query( array( 208 's' => 'bar', 209 'fields' => 'ids', 210 ) ); 211 212 $this->assertEqualSets( array( $p1, $p2 ), $q->posts ); 213 214 $q = new WP_Query( array( 215 's' => 'baz', 216 'fields' => 'ids', 217 ) ); 218 219 $this->assertEqualSets( array( $p2 ), $q->posts ); 220 } 221 222 /** 223 * @ticket 35762 224 */ 225 public function test_search_order_title_before_excerpt_and_content() { 226 $p1 = self::factory()->post->create( array( 227 'post_status' => 'publish', 228 'post_title' => 'This post has foo', 229 'post_content' => '', 230 'post_excerpt' => '', 231 ) ); 232 233 $p2 = self::factory()->post->create( array( 234 'post_status' => 'publish', 235 'post_title' => '', 236 'post_content' => 'This post has foo', 237 'post_excerpt' => '', 238 ) ); 239 240 $p3 = self::factory()->post->create( array( 241 'post_status' => 'publish', 242 'post_title' => '', 243 'post_content' => '', 244 'post_excerpt' => 'This post has foo', 245 ) ); 246 247 $q = new WP_Query( array( 248 's' => 'this post has foo', 249 'fields' => 'ids', 250 'orderby' => false, 251 ) ); 252 253 $this->assertSame( array( $p1, $p3, $p2 ), $q->posts ); 254 } 255 181 256 public function filter_posts_search( $sql ) { 182 257 return $sql . ' /* posts_search */'; 183 258 }