子类别的分页返回404

时间:2014-07-08 作者:Arkuen

有人知道为什么在我的子类别中查看页面会导致404吗$paged 代码对我的索引文件运行良好?这属于我的15类。php(它将影响父类别ID 15下的所有子类别)。

  <?php
    $PostNum = 1;
    $paged = (get_query_var(\'paged\')) ? get_query_var(\'paged\') : 1;
    $args = array(
        \'cat\' => $cat,
        \'posts_per_page\' => 2,
        \'orderby\' => \'date\',
        \'order\' => \'ASC\',
        \'paged\' => $paged,
    );
    $CustomQueryIdentifier = new WP_Query($args);
  ?>

    <h1><a href="<?php the_permalink(); ?>"><?php the_category(\' \'); ?></a></h1>

    <?php
      if ( $CustomQueryIdentifier->have_posts() ) : while ( $CustomQueryIdentifier->have_posts() ) : $CustomQueryIdentifier->the_post();
    ?>
    <div class="container">
      <p class="number"><a href="<?php the_permalink(); ?>"><?php $postnumber = $CustomQueryIdentifier->current_post; echo $postnumber+1 ?></a></p>
      <?php the_content(\'\'); ?>
    </div>

  <?php endwhile; endif; ?>

  <div class="navigation">
    <?php next_posts_link(\'&laquo; Older Entries\', $CustomQueryIdentifier->max_num_pages) ?>
    <?php previous_posts_link(\'Newer Entries &raquo;\') ?>
  </div>

  <?php wp_reset_postdata(); ?>

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

这里有很多关于分页的问题,这绝对是WordPress内部工作方式中最不为人理解的方面之一。

为了理解为什么会得到404,我们将从Action Reference in Codex 要查看每个请求的过程,WordPress将遵循以下步骤。

这个过程首先加载插件和主题,然后进行一些初始化来设置所有内容,等等。。我们感兴趣的部分开始于parse_request, WordPress确定请求的页面类型时,以及parse_query, 当查询变量设置为生成Main Query.

下一个操作是pre_get_posts, 这使我们有机会修改主查询。这是您想要执行自己的代码来更改主查询的地方,例如,设置不同的posts_per_page 值(提示,提示)。

然后我们到达wp 操作,在运行主查询之后,最后是本说明中的重要信息—template_redirect 行动这是WordPress根据主查询结果确定加载哪个模板的操作。如果是类别,则加载类别模板;如果是存档,则加载存档模板,然后if it\'s a 404- the 404 template is loaded.

是的,加粗文本意味着最后一部分很重要,希望我们开始理解这个问题。WordPress在您的模板加载之前就决定请求是404。无论在模板中运行查询得到什么结果,都是无关紧要的。如果主查询没有返回post,则返回404。

在你的例子中,你得到的是404,因为主查询每页加载5篇文章,而你只有3篇,就主查询而言,没有第二页。

(但是等一下,你会说,为什么它在某些页面上有效,而在其他页面上无效?是的,令人困惑的是,它不会总是生成404,例如,当请求是单数页面时。)

您的类别问题的解决方案在前面的文章中有所暗示-如果要修改查询,请使用pre_get_posts 在运行主查询之前。

// modify main query for category ID 15 and all its children
function wpd_category_query( $query ) {
    if( $query->is_main_query() && $query->is_category() ) {
        $parent = 15; // your parent category
        $categories = get_term_children( $parent, \'category\' );
        $categories[] = $parent;

        if( is_category( $categories ) ) {
            $query->set( \'posts_per_page\', 2 );
        }
    }
}
add_action( \'pre_get_posts\', \'wpd_category_query\' );

结束

相关推荐

Adding pagination to WP_Query

我有以下循环(这是在single 页面,而不是index.php):$top_meta_cat_args = array( \'posts_per_page\' => 9, \'post_type\' => \'post\', \'meta_key\' => \'top-radio\', \'meta_value\' => \'top-yes\', \'post_status\' =&g