WordPress Logo

WordPress Pagination Breaks when Custom Posts are Included in the Query

I’ve been using All-in-One Event Calender for a recent client project. They would like to show both recent blog posts and ai1ec_event (custom) posts in one blog feed style page.

If I disable pagination (increase the limit) they all display fine, but as soon as I enable pagination I see 404 when I try to access page 3, sometimes I can get page 2 to work. You would think if pagination was not working it would 404 on page 2 every time.

Here is the query I was trying.

$wp_query =  new WP_Query(array('post_type' => array('post', 'ai1ec_event'), 'paged' => $paged));

// Proceed with the loop.

After a few days of persistent searching, I found a similar solution for custom post types. It turned out to be a WordPress 3.4 bug.

The below code needs to be added to your functions.php if you are experiencing this bug. What triggered me to believe it isn’t the plugin, was that pagination worked fine in the search result output.

/**
 * Fixes pagination bug with WP 3.4 and the homepage when using 
 * custom post types (latest posts).
 */
add_action( 'pre_get_posts', 'custom_query_for_homepage' );
function custom_query_for_homepage( $query )
{
    if( $query->is_main_query() && $query->is_home() )
        $query->set( 'post_type', array( 'post', 'ai1ec_event' ) );
}

Hopefully this helps a few people.