WordPress.org

Make WordPress Core

Changeset 15795


Ignore:
Timestamp:
10/13/10 16:37:01 (7 years ago)
Author:
scribu
Message:

Sacrifice DRY for readability in WP_Query. Props nacin for initial patch. See #14997

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/query.php

    r15794 r15795  
    21842184        $orderby = $q['orderby']; 
    21852185 
     2186        $pieces = array( 'where', 'groupby', 'join', 'orderby', 'distinct', 'fields', 'limits' ); 
     2187 
    21862188        // Apply post-paging filters on where and join.  Only plugins that 
    21872189        // manipulate paging queries should use these hooks. 
    21882190        if ( !$q['suppress_filters'] ) { 
    2189             $var_config = array( 
    2190                 'where'    => 'posts_where_paged', 
    2191                 'groupby'  => 'posts_groupby', 
    2192                 'join'     => 'posts_join_paged', 
    2193                 'orderby'  => 'posts_orderby', 
    2194                 'distinct' => 'posts_distinct', 
    2195                 'limits'   => 'post_limits', 
    2196                 'fields'   => 'posts_fields', 
    2197             ); 
    2198             $var_values = compact( array_keys( $var_config ) ); 
    2199             $result = $this->_filter_clause_variables( $var_config, $var_values, 'posts_clauses' ); 
    2200             extract( $result ); 
     2191            $where      = apply_filters_ref_array( 'posts_where_paged', array( $where, &$this ) ); 
     2192            $groupby    = apply_filters_ref_array( 'posts_groupby',     array( $groupby, &$this ) ); 
     2193            $join       = apply_filters_ref_array( 'posts_join_paged',  array( $join, &$this ) ); 
     2194            $orderby    = apply_filters_ref_array( 'posts_orderby',     array( $orderby, &$this ) ); 
     2195            $distinct   = apply_filters_ref_array( 'posts_distinct',    array( $distinct, &$this ) ); 
     2196            $limits     = apply_filters_ref_array( 'post_limits',       array( $limits, &$this ) ); 
     2197            $fields     = apply_filters_ref_array( 'posts_fields',      array( $fields, &$this ) ); 
     2198 
     2199            // Filter all clauses at once, for convenience 
     2200            $clauses = apply_filters_ref_array( 'posts_clauses', array( compact( $pieces ), &$this ) ); 
     2201            foreach ( $pieces as $piece ) 
     2202                $$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : ''; 
    22012203        } 
    22022204 
     
    22062208        // Filter again for the benefit of caching plugins.  Regular plugins should use the hooks above. 
    22072209        if ( !$q['suppress_filters'] ) { 
    2208             $var_config = array( 
    2209                 'where'    => 'posts_where_request', 
    2210                 'groupby'  => 'posts_groupby_request', 
    2211                 'join'     => 'posts_join_request', 
    2212                 'orderby'  => 'posts_orderby_request', 
    2213                 'distinct' => 'posts_distinct_request', 
    2214                 'fields'   => 'posts_fields_request', 
    2215                 'limits'   => 'post_limits_request', 
    2216             ); 
    2217             $var_values = compact( array_keys( $var_config ) ); 
    2218             $result = $this->_filter_clause_variables( $var_config, $var_values, 'posts_clauses_request' ); 
    2219             extract( $result ); 
     2210            $where      = apply_filters_ref_array( 'posts_where_request',       array( $where, &$this ) ); 
     2211            $groupby    = apply_filters_ref_array( 'posts_groupby_request',     array( $groupby, &$this ) ); 
     2212            $join       = apply_filters_ref_array( 'posts_join_request',        array( $join, &$this ) ); 
     2213            $orderby    = apply_filters_ref_array( 'posts_orderby_request',     array( $orderby, &$this ) ); 
     2214            $distinct   = apply_filters_ref_array( 'posts_distinct_request',    array( $distinct, &$this ) ); 
     2215            $fields     = apply_filters_ref_array( 'posts_fields_request',      array( $fields, &$this ) ); 
     2216            $limits     = apply_filters_ref_array( 'post_limits_request',       array( $limits, &$this ) ); 
     2217 
     2218            // Filter all clauses at once, for convenience 
     2219            $clauses = apply_filters_ref_array( 'posts_clauses_request', array( compact( $pieces ), &$this ) ); 
     2220            foreach ( $pieces as $piece ) 
     2221                $$piece = isset( $clauses[ $piece ] ) ? $clauses[ $piece ] : ''; 
    22202222        } 
    22212223 
     
    23582360        return $this->posts; 
    23592361    } 
    2360      
    2361     /** 
    2362      * Filter clause variables based on configuration. Once per clause and  
    2363      * then all clauses at once. 
    2364      *  
    2365      * @access private 
    2366      * @param array $config filternames keyed with their variable names 
    2367      * @param array $values values keyed with their variable names 
    2368      * @param string $all_filter_name for the "single filter" 
    2369      * @return array filtered values keyed with their names 
    2370      */ 
    2371     function _filter_clause_variables( $config, $values, $all_filter_name ) { 
    2372         $clauses = array(); 
    2373         foreach ( $config as $variable_name => $filter ) { 
    2374             $clauses[$variable_name] = apply_filters_ref_array( $filter, array( $values[$variable_name], &$this ) ); 
    2375         } 
    2376         // run filter for all clauses at once 
    2377         $clauses = apply_filters_ref_array( $all_filter_name, array( $clauses, &$this ) ); 
    2378         $is_array = is_array( $clauses ); 
    2379         $filtered = array(); 
    2380         foreach ( $config as $variable_name => $filter ) { 
    2381             if ( $is_array && isset( $clauses[$variable_name] ) ) { 
    2382                 $filtered[$variable_name] = $clauses[$variable_name]; 
    2383             } else { 
    2384                 $filtered[$variable_name] = ''; 
    2385             } 
    2386         } 
    2387         return $filtered; 
    2388     } 
    23892362 
    23902363    /** 
Note: See TracChangeset for help on using the changeset viewer.