WordPress Development Stack Exchange is a question and answer site for WordPress developers and administrators. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I'm creating a featured post slider which takes 4 pages or posts from the 'featured' category. I'm trying to use WP_Query, but am having no joy :(

my slider query is:

$ml_featured = new WP_Query( 

        'posts_per_page' => 4,
        'post_type' => array('page', 'post'),
        'category__in' => 22

if( $ml_featured->have_posts() ) {
    while( have_posts() ) : $ml_featured->the_post();

        // looping

else {
    // no posts

fire_PHP shows the WP_Query contains:

    query =
        ['posts_per_page'] => 4
        ['post_type'] =>
                [0] => 'page'
                [1] => 'post'
        ['category__in'] => 22

    query_vars =

        ['posts_per_page'] => 4
        ['post_type'] =>
                [0] => 'wod'
                [1] => 'attachment'
        ['category__in'] =>
                [0] => 22

I'm using Genesis, building upon the sample child theme. In order to display my custom post type 'WOD' on the homepage I've added to functions.php:

add_filter( 'pre_get_posts', 'ml_wods_home' );
function ml_wods_home( $query ) {

    if ( is_home() && false == $query->query_vars['suppress_filters'] )
        $query->set( 'post_type', array( 'wod', 'attachment' ) );

    return $query;

as suggested at Justin Tadlock. This works well on its own, but seems to be interfering with the slider query:

Please note that query['post_type'] is overwritten by query_vars['post_type']. In addition, the browser is timing out frequently as I mess around...

I found that Michael Fields had a related issue , posted a solution, (which I think I'm implementing) but its not working for me, and I don't understand it..

What am I missing?! TIA, Tim

share|improve this question
I guess your condition fails... – Rutwick Gangurde Mar 12 '12 at 5:43
Hi Rutwick, are you referring to the condition in ml_wods_home()? this runs fine, but I think it interferes with the feature-slider.. i'll clarify the question! – ptim Mar 12 '12 at 7:45
up vote 3 down vote accepted

First of all,while( have_posts()): should be while( $ml_featured->have_posts()):

And secondly, in your pre_get_posts callback you check:

false == $query->query_vars['suppress_filters']

But this returns true for every WP_Query query and any get_posts query where 'supress_filters' is explicitly set to false. If you want to check if the query is the 'main' query (i.e. query associated with the global $wp_query), you can use:


(see documentation here). This returns true if $query is the main query and false otherwise. This function was introduced in 3.3. Before 3.3 you can probably check (untested):

global $wp_the_query;
if($query === $wp_the_query){
  //is main query
  // is not main query

Alternatively (but preferably use the methods above), to alter the main query only:

 global $wp_query;
 $wp_query->set( 'post_type', array( 'wod', 'attachment' ) );
share|improve this answer
oh, man - all the options - thanks a million I was going mad! – ptim Mar 12 '12 at 23:25

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.