Make use of apply_filters_ref_array() when running the query. Fixes #9886 props scribu.

git-svn-id: http://svn.automattic.com/wordpress/trunk@13758 1a063a9b-81f0-0310-95a4-ce76da25c4cd
This commit is contained in:
westi 2010-03-18 21:55:25 +00:00
parent 1e019112b8
commit b4b9f6075d
1 changed files with 33 additions and 34 deletions

View File

@ -1806,7 +1806,7 @@ class WP_Query {
$search .= " AND ($wpdb->posts.post_password = '') ";
}
}
$search = apply_filters('posts_search', $search, $this);
$search = apply_filters_ref_array('posts_search', array( $search, &$this ) );
// Category stuff
@ -2243,8 +2243,8 @@ class WP_Query {
// Apply filters on where and join prior to paging so that any
// manipulations to them are reflected in the paging by day queries.
if ( !$q['suppress_filters'] ) {
$where = apply_filters('posts_where', $where);
$join = apply_filters('posts_join', $join);
$where = apply_filters_ref_array('posts_where', array( $where, &$this ) );
$join = apply_filters_ref_array('posts_join', array( $join, &$this ) );
}
// Paging
@ -2278,11 +2278,11 @@ class WP_Query {
}
if ( !$q['suppress_filters'] ) {
$cjoin = apply_filters('comment_feed_join', $cjoin);
$cwhere = apply_filters('comment_feed_where', $cwhere);
$cgroupby = apply_filters('comment_feed_groupby', $cgroupby);
$corderby = apply_filters('comment_feed_orderby', 'comment_date_gmt DESC');
$climits = apply_filters('comment_feed_limits', 'LIMIT ' . get_option('posts_per_rss'));
$cjoin = apply_filters_ref_array('comment_feed_join', array( $cjoin, &$this ) );
$cwhere = apply_filters_ref_array('comment_feed_where', array( $cwhere, &$this ) );
$cgroupby = apply_filters_ref_array('comment_feed_groupby', array( $cgroupby, &$this ) );
$corderby = apply_filters_ref_array('comment_feed_orderby', array( 'comment_date_gmt DESC', &$this ) );
$climits = apply_filters_ref_array('comment_feed_limits', array( 'LIMIT ' . get_option('posts_per_rss'), &$this ) );
}
$cgroupby = ( ! empty( $cgroupby ) ) ? 'GROUP BY ' . $cgroupby : '';
$corderby = ( ! empty( $corderby ) ) ? 'ORDER BY ' . $corderby : '';
@ -2308,14 +2308,13 @@ class WP_Query {
// Apply post-paging filters on where and join. Only plugins that
// manipulate paging queries should use these hooks.
if ( !$q['suppress_filters'] ) {
$where = apply_filters('posts_where_paged', $where);
$groupby = apply_filters('posts_groupby', $groupby);
$join = apply_filters('posts_join_paged', $join);
$orderby = apply_filters('posts_orderby', $orderby);
$distinct = apply_filters('posts_distinct', $distinct);
$limits = apply_filters( 'post_limits', $limits );
$fields = apply_filters('posts_fields', $fields);
$where = apply_filters_ref_array( 'posts_where_paged', array( $where, &$this ) );
$groupby = apply_filters_ref_array( 'posts_groupby', array( $groupby, &$this ) );
$join = apply_filters_ref_array( 'posts_join_paged', array( $join, &$this ) );
$orderby = apply_filters_ref_array( 'posts_orderby', array( $orderby, &$this ) );
$distinct = apply_filters_ref_array( 'posts_distinct', array( $distinct, &$this ) );
$limits = apply_filters_ref_array( 'post_limits', array( $limits, &$this ) );
$fields = apply_filters_ref_array( 'posts_fields', array( $fields, &$this ) );
}
// Announce current selection parameters. For use by caching plugins.
@ -2323,13 +2322,13 @@ class WP_Query {
// Filter again for the benefit of caching plugins. Regular plugins should use the hooks above.
if ( !$q['suppress_filters'] ) {
$where = apply_filters('posts_where_request', $where);
$groupby = apply_filters('posts_groupby_request', $groupby);
$join = apply_filters('posts_join_request', $join);
$orderby = apply_filters('posts_orderby_request', $orderby);
$distinct = apply_filters('posts_distinct_request', $distinct);
$fields = apply_filters('posts_fields_request', $fields);
$limits = apply_filters( 'post_limits_request', $limits );
$where = apply_filters_ref_array( 'posts_where_request', array( $where, &$this ) );
$groupby = apply_filters_ref_array( 'posts_groupby_request', array( $groupby, &$this ) );
$join = apply_filters_ref_array( 'posts_join_request', array( $join, &$this ) );
$orderby = apply_filters_ref_array( 'posts_orderby_request', array( $orderby, &$this ) );
$distinct = apply_filters_ref_array( 'posts_distinct_request', array( $distinct, &$this ) );
$fields = apply_filters_ref_array( 'posts_fields_request', array( $fields, &$this ) );
$limits = apply_filters_ref_array( 'post_limits_request', array( $limits, &$this ) );
}
if ( ! empty($groupby) )
@ -2342,30 +2341,30 @@ class WP_Query {
$this->request = " SELECT $found_rows $distinct $fields FROM $wpdb->posts $join WHERE 1=1 $where $groupby $orderby $limits";
if ( !$q['suppress_filters'] )
$this->request = apply_filters('posts_request', $this->request);
$this->request = apply_filters_ref_array('posts_request', array( $this->request, &$this ) );
$this->posts = $wpdb->get_results($this->request);
// Raw results filter. Prior to status checks.
if ( !$q['suppress_filters'] )
$this->posts = apply_filters('posts_results', $this->posts);
$this->posts = apply_filters_ref_array('posts_results', array( $this->posts, &$this ) );
if ( !empty($this->posts) && $this->is_comment_feed && $this->is_singular ) {
$cjoin = apply_filters('comment_feed_join', '');
$cwhere = apply_filters('comment_feed_where', "WHERE comment_post_ID = '{$this->posts[0]->ID}' AND comment_approved = '1'");
$cgroupby = apply_filters('comment_feed_groupby', '');
$cjoin = apply_filters_ref_array('comment_feed_join', array( '', &$this ) );
$cwhere = apply_filters_ref_array('comment_feed_where', array( "WHERE comment_post_ID = '{$this->posts[0]->ID}' AND comment_approved = '1'", &$this ) );
$cgroupby = apply_filters_ref_array('comment_feed_groupby', array( '', &$this ) );
$cgroupby = ( ! empty( $cgroupby ) ) ? 'GROUP BY ' . $cgroupby : '';
$corderby = apply_filters('comment_feed_orderby', 'comment_date_gmt DESC');
$corderby = apply_filters_ref_array('comment_feed_orderby', array( 'comment_date_gmt DESC', &$this ) );
$corderby = ( ! empty( $corderby ) ) ? 'ORDER BY ' . $corderby : '';
$climits = apply_filters('comment_feed_limits', 'LIMIT ' . get_option('posts_per_rss'));
$climits = apply_filters_ref_array('comment_feed_limits', array( 'LIMIT ' . get_option('posts_per_rss'), &$this ) );
$comments_request = "SELECT $wpdb->comments.* FROM $wpdb->comments $cjoin $cwhere $cgroupby $corderby $climits";
$this->comments = $wpdb->get_results($comments_request);
$this->comment_count = count($this->comments);
}
if ( !$q['no_found_rows'] && !empty($limits) ) {
$found_posts_query = apply_filters( 'found_posts_query', 'SELECT FOUND_ROWS()' );
$found_posts_query = apply_filters_ref_array( 'found_posts_query', array( 'SELECT FOUND_ROWS()', &$this ) );
$this->found_posts = $wpdb->get_var( $found_posts_query );
$this->found_posts = apply_filters( 'found_posts', $this->found_posts );
$this->found_posts = apply_filters_ref_array( 'found_posts', array( $this->found_posts, &$this ) );
$this->max_num_pages = ceil($this->found_posts / $q['posts_per_page']);
}
@ -2398,7 +2397,7 @@ class WP_Query {
}
if ( $this->is_preview && current_user_can( $edit_cap, $this->posts[0]->ID ) )
$this->posts[0] = apply_filters('the_preview', $this->posts[0]);
$this->posts[0] = apply_filters_ref_array('the_preview', array( $this->posts[0], &$this ));
}
// Put sticky posts at the top of the posts array
@ -2447,7 +2446,7 @@ class WP_Query {
}
if ( !$q['suppress_filters'] )
$this->posts = apply_filters('the_posts', $this->posts);
$this->posts = apply_filters_ref_array('the_posts', array( $this->posts, &$this ) );
$this->post_count = count($this->posts);