6
votes

Im have a loop with wp_query with the following code:

<?php
    $temp = $wp_query;
    $wp_query= null;
    $wp_query = new WP_Query();
    $wp_query->query("showposts=2&paged=$paged");
?>

<?php if ($wp_query->have_posts()) : while ($wp_query->have_posts()) : $wp_query->the_post(); ?>
    <?php the_title() ?>
<?php endwhile; ?>
<?php else: ?>
    <article>
        <h2><?php _e( 'Sorry, nothing to display.', 'theme' ); ?></h2>
    </article>
<?php endif;  my_pagination(); wp_reset_query()?>

with standard pagination :

<?php 
function my_pagination()
{
    global $wp_query;
    $big = 999999999;
    echo paginate_links(array(
        'base' => str_replace($big, '%#%', get_pagenum_link($big)),
        'format' => '?paged=%#%',
        'current' => max(1, get_query_var('paged')),
        'prev_text'    => __('<i class="fa fa-chevron-left"></i>'),
        'next_text'    => __('<i class="fa fa-chevron-right"></i>'),
        'total' => $wp_query->max_num_pages,
    ));
}
?>

The pagination is showing correctly on the page, but whenever I click on the pagination link it takes me to the error page.

Tried everything now and have no idea what can be the reason for it.

Amy help much apprecieated

3
When you hover over the pagination link for page 2 what is the URL?henrywright
So your pagination output looks good. The problem must be with your actual query. Can you try removing $wp_query->query("showposts=2&paged=$paged"); then see if you can access page 2henrywright
@henrywright, Ive done that bit it is then returning an empty loop. Whats interesting is that when I change Setting->Reading to smaller amount is seem to take impact on my loop. Ive set there 5 items per page. There is only 7 posts and the pagination is showing 3 pages. Seems that it is ignoring wp_query but the third page is showing 404. Im lost now.Dom
If you remove the code I suggested: $wp_query->query("showposts=2&paged=$paged"); and change $wp_query = new WP_Query(); to $wp_query = new WP_Query( 'posts_per_page=2' ); does that return some results? With that in place, your pagination should workhenrywright

3 Answers

14
votes

Had a hard time with it too :) Was easier to search when I realized it's wrong calculated post per page number, and here is a magic trick: (to be added to functions.php)

function my_post_count_queries( $query ) {
  if (!is_admin() && $query->is_main_query()){
    if(is_home()){
       $query->set('posts_per_page', 1);
    }
  }
}
add_action( 'pre_get_posts', 'my_post_count_queries' );
3
votes

Had same problem with custom post type. I had a query on 'page-template' where the pagination came with 404. I guess the main problem here is the 'slug' of custom post type identical to 'page-template' url. For example if you have a custom post type slug 'portfolio' and a page with the same name, pagination on that page gives a 404. So I just changed 'slug' to 'archives-portfolio' and it helped

0
votes

you can Change your query

$wp_query= null; $wp_query = new WP_Query();
$wp_query->query("showposts=2&paged=$paged");

to

$wp_query = new WP_Query("showposts=2");

It's shown 2 Post per page and you can see and access your page 2.