WordPress.org

Make WordPress Core

Ticket #16022: 16022.diff

File 16022.diff, 2.1 KB (added by greuben, 7 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';