在一定页数之后分页显示404

时间:2017-05-27 作者:Daniele Squalo

这个问题在我的索引中。php(尽管我正在考虑将此代码移到home.php)。我有一个自定义WP\\U查询,它显示每页的一些帖子,并指定帖子类型(我有一个主查询无法显示的自定义类型)。我有42篇atm帖子(这是Wordpress主题单元加上我之前写的东西),我确实设置了每页3篇帖子,这意味着我应该有15页。但是从第6页开始,我得到了一个404错误。

索引中的代码。php

<?php
$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;

$args = array(
   \'posts_per_page\' => 3,
   \'paged\' => $paged,
   \'post_type\' => array(\'post\', \'blog_post\'),
);

$query = new WP_Query($args); ?>
<?php echo $query->max_num_pages ?>
<?php while ( $query->have_posts() ) : $query->the_post() ?>

<section class="article-container col-md-12">

<?php if (has_post_thumbnail()) the_post_thumbnail("post-thumbnail", array(\'class\' => \'img-responsive col-md-5\')); ?>
<article class="col-md-7">
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php the_excerpt(); ?>
<a href="<?php the_permalink(); ?>" class="article-read-more">LEGGI TUTTO</a>
</article>
</section>
<?php endwhile;  ?>
<?php wp_reset_postdata(); ?>

<?php if (function_exists("pagination")) {
    pagination($query->max_num_pages);
} ?>
分页函数(我自定义了它,因为我需要我的标记)

function pagination($pages = \'\', $range = 4) {  
     $showitems = ($range * 2)+1;  

     global $paged;
     if(empty($paged)) $paged = 1;

     if($pages == \'\') {
         global $wp_query;
         $pages = $wp_query->max_num_pages;
         if(!$pages) {
             $pages = 1;
         }
     }   

     if(1 != $pages) {
         echo \'<section class="text-center">\';
         echo \'<ul class="pagination">\';

         if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<li><a href=\'".get_pagenum_link(1)."\'>&laquo; First</a></li>";
         if($paged > 1 && $showitems < $pages) echo "<li><a href=\'".get_pagenum_link($paged - 1)."\'>&lsaquo; Previous</a></li>";

         for ($i=1; $i <= $pages; $i++) {
             if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems )) {
                 echo ($paged == $i)? "<li class=\\"active\\"><a href=\\"#\\">".$i."</a></li>":"<li><a href=\'".get_pagenum_link($i)."\'>".$i."</a></li>";
             }
         }

         if ($paged < $pages && $showitems < $pages) echo "<li><a href=\\"".get_pagenum_link($paged + 1)."\\">Next &rsaquo;</a></li>";  
         if ($paged < $pages-1 &&  $paged+$range-1 < $pages && $showitems < $pages) echo "<li><a href=\'".get_pagenum_link($pages)."\'>Last &raquo;</a></li>";

         echo "</ul>";
         echo "</section>";
     }
}
因此,考虑到我不能按原样使用主查询a solution with it 不适用,我能做什么?任何帮助都将不胜感激。

1 个回复
最合适的回答,由SO网友:Jared Cobb 整理而成

问题是WordPress在自定义查询之前执行主查询(主查询仅基于默认的帖子类型)。

您可以截取主查询,修改它,然后像这样使用它

function add_blog_post_to_query( $query ) {
    if ( $query->is_home() && $query->is_main_query() ) {
        $query->set( \'post_type\', array(\'post\', \'blog_post\') );
        $query->set( \'posts_per_page\', 3 );
    }
}
add_action( \'pre_get_posts\', \'add_blog_post_to_query\' );
如果你想继续使用你的自定义pagination 你可以这样称呼它

if ( function_exists( \'pagination\' ) ) {
    global $wp_query;
    pagination( $wp_query->max_num_pages );
}
现在,您可以使用以下标准函数,而不是使用自定义查询:

if ( have_posts() ) :

    /* Start the Loop */
    while ( have_posts() ) : the_post();

        // your markup here

    endwhile;

else :

    // no posts found

endif;

结束

相关推荐

Pagination custom query

我正在尝试制作一个自定义页面模板,以显示浏览次数最多的帖子。我可以回复帖子,但我很难弄清楚如何分页。以下是我所拥有的:$args = array(\'orderby\' => \'meta_value_num\', \'meta_key\' => \'post_views_count\', \'posts_per_page\' => 36 ); $loop = new WP_Query( $args ); while ( $