在下一页上具有分页返回404的类别模板

时间:2018-03-12 作者:Run

我正在制作一个带有分页的类别模板页面,下面是我的代码:

<?php
$current_page = get_queried_object();
$category     = $current_page->slug;

$paged = get_query_var( \'paged\' ) ? get_query_var( \'paged\' ) : 1;
$query = new WP_Query(
    array(
        \'paged\'         => $paged,
        \'category_name\' => $category,
        \'order\'         => \'asc\',
        \'post_type\'     => \'page\',
        \'post_status\' => array(\'publish\'),
        \'posts_per_page\' => 6,
        \'post_parent\' => 2,
    )
);

if ($query->have_posts()) {
       while ($query->have_posts()) {
       $query->the_post(); ?>

        <article id="post-<?php the_ID(); ?>">
            <header class="entry-header">
                <?php the_title( sprintf( \'<h2 class="entry-title"><a href="%s" rel="bookmark">\', esc_url( get_permalink() ) ), \'</a></h2>\' ); ?>
            </header><!-- .entry-header -->

            <div class="entry-content">
                <?php the_content(); ?>
            </div><!-- .entry-content -->
        </article><!-- #post-## --><hr>

        <?php
    }

    // next_posts_link() usage with max_num_pages
    next_posts_link( \'Older Entries\', $query->max_num_pages );
    previous_posts_link( \'Newer Entries\' );

    wp_reset_postdata();
}
?>
因此,我有大约10页相同的类别(例如艺术)。

我将从中获取下一页链接next_posts_link( \'Older Entries\', $query->max_num_pages );. 它生成如下链接:

http://mywebsite.com/category/arts/page/2/

但我有一个404 当我点击上面的这个url时,页面会显示。它应该stays at the category template, 不是吗?

所以我添加了following fix 转换为函数。php:

add_action( \'init\', \'wpa58471_category_base\' );
function wpa58471_category_base() {
    // Remember to flush the rules once manually after you added this code!
    add_rewrite_rule(
        // The regex to match the incoming URL
        \'category/([^/]+)/page/([0-9]+)?/?$\',
        // The resulting internal URL
        \'index.php?category_name=$matches[1]&paged=$matches[2]\',
        // Add the rule to the top of the rewrite list
        \'top\' );
}
但我还是得到了404页。我做错了什么?

Even if I access it with the direct address, I still get 404:

http://mywebsite.com/index.php?category_name=arts&paged=2

有什么想法吗why?

2 个回复
SO网友:Milo

WordPress服务前端请求的步骤大致如下-

传入URL将被解析并转换为查询变量。

这些查询变量构成Main Query, 发送到数据库。

WordPress查看结果并确定请求是否成功,从而确定要发送的状态标头-200 OK或404 not found。

WordPress加载与此类请求相对应的模板,例如,如果是类别请求,则加载类别存档模板;如果主查询没有帖子,则加载404模板。

因此,对于您为什么看到404的问题,最简短的回答是,主查询没有帖子。

在模板中运行的查询及其生成的任何分页都与主查询无关。这就是为什么需要使用pre_get_posts 自定义存档页面的结果。

如果您只需要页面,可以将post type设置为page:

add_action( \'pre_get_posts\', function($q) {
    if( !is_admin() && $q->is_main_query() && !$q->is_tax() ) {
        $q->set (\'post_type\', array( \'page\' ) );
    }
});

SO网友:Run

我如何解决此问题:

// Fix 404 on category pagination.
// https://teamtreehouse.com/community/wordpress-pagination-gives-404-unless-i-set-blog-pages-show-at-most-to-1-in-reading
add_action( \'pre_get_posts\', function($q) {
    if( !is_admin() && $q->is_main_query() && !$q->is_tax() ) {
        $q->set (\'post_type\', array( \'post\', \'page\' ) );
    }
});
分页用于posts 只有我想。所以我必须补充pagepost_type.

结束

相关推荐

Pagination in Archives

你好,我是wordpress的新手,我很烂。我试图在wordpress中为我的博客页面添加编号分页。我下载了插件“page navi”,进入编辑器并更改了索引中的一个文件。php收件人: <?php if ( $wp_query->max_num_pages > 1 ) : ?> <div class=\"post-nav archive-nav\"> <?php wp_pagenavi();