WordPress.org

Make WordPress Core

Ticket #10667: searchapi.diff

File searchapi.diff, 3.4 KB (added by jshreve, 5 years ago)

Makes the neccessary changes to convert the WPSearchAPI plugin to a working part of the core

  • wp-includes/query.php

     
    15631563         * @return array List of posts. 
    15641564         */ 
    15651565        function &get_posts() { 
    1566                 global $wpdb, $user_ID; 
     1566                global $wpdb, $user_ID, $wpsearch; 
     1567                 
     1568                if ( $this->is_search ) { 
     1569                        $wpsearch->init_search(); 
     1570                } 
    15671571 
    15681572                do_action_ref_array('pre_get_posts', array(&$this)); 
    15691573 
     
    17391743                        } 
    17401744                } 
    17411745 
    1742                 // If a search pattern is specified, load the posts that match 
    1743                 if ( !empty($q['s']) ) { 
    1744                         // added slashes screw with quote grouping when done early, so done later 
    1745                         $q['s'] = stripslashes($q['s']); 
    1746                         if ( !empty($q['sentence']) ) { 
    1747                                 $q['search_terms'] = array($q['s']); 
    1748                         } else { 
    1749                                 preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q['s'], $matches); 
    1750                                 $q['search_terms'] = array_map(create_function('$a', 'return trim($a, "\\"\'\\n\\r ");'), $matches[0]); 
    1751                         } 
    1752                         $n = !empty($q['exact']) ? '' : '%'; 
    1753                         $searchand = ''; 
    1754                         foreach( (array) $q['search_terms'] as $term) { 
    1755                                 $term = addslashes_gpc($term); 
    1756                                 $search .= "{$searchand}(($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}'))"; 
    1757                                 $searchand = ' AND '; 
    1758                         } 
    1759                         $term = $wpdb->escape($q['s']); 
    1760                         if (empty($q['sentence']) && count($q['search_terms']) > 1 && $q['search_terms'][0] != $q['s'] ) 
    1761                                 $search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')"; 
    1762  
    1763                         if ( !empty($search) ) { 
    1764                                 $search = " AND ({$search}) "; 
    1765                                 if ( !is_user_logged_in() ) 
    1766                                         $search .= " AND ($wpdb->posts.post_password = '') "; 
    1767                         } 
    1768                 } 
    1769  
    17701746                // Category stuff 
    17711747 
    17721748                if ( empty($q['cat']) || ($q['cat'] == '0') || 
  • wp-settings.php

     
    357357require (ABSPATH . WPINC . '/media.php'); 
    358358require (ABSPATH . WPINC . '/http.php'); 
    359359require (ABSPATH . WPINC . '/widgets.php'); 
     360require (ABSPATH . WPINC . '/search.php'); 
    360361 
    361362if ( !defined('WP_CONTENT_URL') ) 
    362363        define( 'WP_CONTENT_URL', get_option('siteurl') . '/wp-content'); // full url - WP_CONTENT_DIR is defined further up 
  • wp-admin/includes/schema.php

     
    163163  PRIMARY KEY  (umeta_id), 
    164164  KEY user_id (user_id), 
    165165  KEY meta_key (meta_key) 
     166) $charset_collate; 
     167CREATE TABLE $wpdb->search_index ( 
     168  id bigint(20) NOT NULL auto_increment, 
     169  object bigint(20) NOT NULL, 
     170  title text NOT NULL, 
     171  content text NOT NULL, 
     172  post_date datetime NOT NULL, 
     173  parent bigint(20) NOT NULL, 
     174  categories text NOT NULL, 
     175  tags text NOT NULL, 
     176  author text NOT NULL, 
     177  type varchar(50) NOT NULL, 
     178  protected smallint(6) NOT NULL, 
     179  PRIMARY KEY  (`id`), 
     180  FULLTEXT KEY `title` (`title`), 
     181  FULLTEXT KEY `content` (`content`), 
     182  FULLTEXT KEY `title_and_content` (`title`,`content`) 
    166183) $charset_collate;"; 
    167184 
    168185/** 
     
    305322        'widget_rss' => array(), 
    306323 
    307324        // 2.8 
    308         'timezone_string' => '' 
     325        'timezone_string' => '', 
     326         
     327        // 2.9 
     328        'searchapi_custom_options' => '', 
     329        'searchapi_plugin' => '', 
     330        'searchapi_help' => '', 
    309331        ); 
    310332 
    311333        // Set autoload to no for these options