Make WordPress Core

Ticket #35762: 35762.3.diff

File 35762.3.diff, 3.6 KB (added by swissspidy, 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 { 
    21542154                        }
    21552155
    21562156                        $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 );
    21582158                        $searchand = ' AND ';
    21592159                }
    21602160
    class WP_Query { 
    22782278                                        $search_orderby .= 'WHEN ' . implode( ' OR ', $q['search_orderby_title'] ) . ' THEN 3 ';
    22792279                        }
    22802280
    2281                         // sentence match in 'post_content'
     2281                        // sentence match in 'post_content' and 'post_excerpt'
    22822282                        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 );
    22842285                        }
    22852286
    22862287                        if ( $search_orderby ) {
    2287                                 $search_orderby = '(CASE ' . $search_orderby . 'ELSE 5 END)';
     2288                                $search_orderby = '(CASE ' . $search_orderby . 'ELSE 6 END)';
    22882289                        }
    22892290                } else {
    22902291                        // 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 { 
    178178                $this->assertNotContains( 'posts_search', $q->request );
    179179        }
    180180
     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
    181256        public function filter_posts_search( $sql ) {
    182257                return $sql . ' /* posts_search */';
    183258        }