WordPress.org

Make WordPress Core

Ticket #16022: 16022.diff

File 16022.diff, 2.1 KB (added by greuben, 3 years ago)
  • wp-includes/query.php

     
    17311731                                'operator' => 'NOT IN', 
    17321732                        ); 
    17331733                } 
     1734                 
     1735                // Search 
     1736                if( !empty( $q['s'] ) ){ 
     1737                        if ( !empty($q['sentence']) ) { 
     1738                                $q['search_terms'] = array($q['s']); 
     1739                        } else { 
     1740                                preg_match_all('/".*?("|$)|((?<=[\\s",+])|^)[^\\s",+]+/', $q['s'], $matches); 
     1741                                $q['search_terms'] = array_map('_search_terms_tidy', $matches[0]); 
     1742                        } 
     1743                         
     1744                        $tax_query[] = array( 
     1745                                'taxonomy' => 'post_tag', 
     1746                                'terms' => $q['search_terms'], 
     1747                                'field' => 'name', 
     1748                        ); 
     1749                         
     1750                        $this->is_category = $this->is_tag = false; 
     1751                        $this->is_search = true; 
     1752                } 
    17341753 
    17351754                $this->tax_query = new WP_Tax_Query( $tax_query ); 
    17361755        } 
     
    20342053                                $where = " AND {$wpdb->posts}.ID = " . $q['page_id']; 
    20352054                        } 
    20362055                } 
     2056                 
     2057                // Taxonomies 
     2058                $this->parse_tax_query( $q ); 
    20372059 
     2060                $clauses = $this->tax_query->get_sql( $wpdb->posts, 'ID' ); 
     2061 
     2062                $join .= $clauses['join']; 
     2063                $where .= $clauses['where']; 
     2064 
    20382065                // If a search pattern is specified, load the posts that match 
    20392066                if ( !empty($q['s']) ) { 
    20402067                        // added slashes screw with quote grouping when done early, so done later 
     
    20572084                                $search .= " OR ($wpdb->posts.post_title LIKE '{$n}{$term}{$n}') OR ($wpdb->posts.post_content LIKE '{$n}{$term}{$n}')"; 
    20582085 
    20592086                        if ( !empty($search) ) { 
    2060                                 $search = " AND ({$search}) "; 
     2087                                if( empty( $clauses['where'] ) ) 
     2088                                        $search = " AND ({$search}) "; 
     2089                                else 
     2090                                        $search = " OR ({$search}) "; 
    20612091                                if ( !is_user_logged_in() ) 
    20622092                                        $search .= " AND ($wpdb->posts.post_password = '') "; 
    20632093                        } 
     
    20662096                // Allow plugins to contextually add/remove/modify the search section of the database query 
    20672097                $search = apply_filters_ref_array('posts_search', array( $search, &$this ) ); 
    20682098 
    2069                 // Taxonomies 
    2070                 $this->parse_tax_query( $q ); 
    2071  
    2072                 $clauses = $this->tax_query->get_sql( $wpdb->posts, 'ID' ); 
    2073  
    2074                 $join .= $clauses['join']; 
    2075                 $where .= $clauses['where']; 
    2076  
    20772099                if ( $this->is_tax ) { 
    20782100                        if ( empty($post_type) ) { 
    20792101                                $post_type = 'any';