WordPress.org

Make WordPress Core

Ticket #7394: 7394-3.patch

File 7394-3.patch, 2.3 KB (added by azaozz, 20 months ago)
  • wp-includes/query.php

     
    21852185                                preg_match_all('/".*?("|$)|((?<=[\r\n\t ",+])|^)[^\r\n\t ",+]+/', $q['s'], $matches); 
    21862186                                $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]); 
    21872187                        } 
     2188                        $q['search_terms'] = array_filter( (array) $q['search_terms'] ); 
     2189 
    21882190                        $n = !empty($q['exact']) ? '' : '%'; 
    21892191                        $searchand = ''; 
    2190                         foreach( (array) $q['search_terms'] as $term ) { 
     2192                        $search_orderby_title = array(); 
     2193                        foreach ( $q['search_terms'] as $term ) { 
    21912194                                $term = esc_sql( like_escape( $term ) ); 
     2195                                $search_orderby_title[] = "$wpdb->posts.post_title LIKE '%$term%'"; 
    21922196                                $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))"; 
    21932197                                $searchand = ' AND '; 
    21942198                        } 
     
    23772381                                $orderby .= " {$q['order']}"; 
    23782382                } 
    23792383 
     2384                // Order search results by relevance 
     2385                if ( !empty( $search_orderby_title ) && empty( $q['exact'] ) ) { 
     2386                        $num_terms = count($search_orderby_title); 
     2387 
     2388                        if ( $num_terms > 1 ) { 
     2389                                $search_orderby_s = esc_sql( like_escape( $q['s'] ) ); 
     2390 
     2391                                $search_orderby = '(CASE '; 
     2392                                // sentence match in title 
     2393                                $search_orderby .= "WHEN $wpdb->posts.post_title LIKE '%$search_orderby_s%' THEN 1 "; 
     2394 
     2395                                // sanity limit 
     2396                                if ( $num_terms < 7 ) { 
     2397                                        // all words in title 
     2398                                        $search_orderby .= 'WHEN ' . implode( ' AND ', $search_orderby_title ) . ' THEN 2 '; 
     2399                                        // any word in title 
     2400                                        $search_orderby .= 'WHEN ' . implode( ' OR ', $search_orderby_title ) . ' THEN 3 '; 
     2401                                } 
     2402 
     2403                                // sentence match in content 
     2404                                $search_orderby .= "WHEN $wpdb->posts.post_content LIKE '%$search_orderby_s%' THEN 4 "; 
     2405                                $search_orderby .= 'ELSE 5 END)'; 
     2406                        } else { 
     2407                                // single word or sentence search 
     2408                                $search_orderby = reset($search_orderby_title) . ' DESC'; 
     2409                        } 
     2410                        // Allow plugins to add/remove/modify the 'order by' for the search section of the database query 
     2411                        $search_orderby = apply_filters_ref_array( 'posts_search_orderby', array( $search_orderby, &$this ) ); 
     2412                        if ( $search_orderby ) 
     2413                                $orderby = $orderby ? $search_orderby . ', ' . $orderby : $search_orderby; 
     2414                } 
     2415 
    23802416                if ( is_array( $post_type ) ) { 
    23812417                        $post_type_cap = 'multiple_post_type'; 
    23822418                } else {