dtyqflrr775518 2015-04-06 09:02 采纳率: 100%
浏览 201
已采纳

Wordpress category.php页面分页显示404页面

In category.php page default posts are shown from certain category with pagination, and 'category' is removed in url from permalinks settings.

Unfortunately it redirects to 404 page while paginating to second page.

I even tried to check category pagination in wordpress default 2015 theme it wont work in there too.

Here is my category.php just with wordpress loop for testing.

if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        the_title(); 
    endwhile;
endif;

next_posts_link( 'Older posts' );
previous_posts_link( 'Newer posts' );

Note: everything works well if category is not removed from url.

http://www.domain.com/category/my_category/page/2  (works)
http://www.domain.com/my_category/page/2  (doesnt work)

Do i need to add/modify anything to make it work ?

  • 写回答

1条回答 默认 最新

  • douxian7534 2015-07-14 02:11
    关注

    This is normal, please try using code below:

    add_filter( 'category_rewrite_rules', 'vipx_filter_category_rewrite_rules' );
    function vipx_filter_category_rewrite_rules( $rules ) {
        $categories = get_categories( array( 'hide_empty' => false ) );
    
        if ( is_array( $categories ) && ! empty( $categories ) ) {
            $slugs = array();
            foreach ( $categories as $category ) {
                if ( is_object( $category ) && ! is_wp_error( $category ) ) {
                    if ( 0 == $category->category_parent ) {
                        $slugs[] = $category->slug;
                    } else {
                        $slugs[] = trim( get_category_parents( $category->term_id, false, '/', true ), '/' );
                    }
                }
            }
    
            if ( ! empty( $slugs ) ) {
                $rules = array();
    
                foreach ( $slugs as $slug ) {
                    $rules[ '(' . $slug . ')/feed/(feed|rdf|rss|rss2|atom)?/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
                    $rules[ '(' . $slug . ')/(feed|rdf|rss|rss2|atom)/?$' ] = 'index.php?category_name=$matches[1]&feed=$matches[2]';
                    $rules[ '(' . $slug . ')(/page/(\d+)/?)?$' ] = 'index.php?category_name=$matches[1]&paged=$matches[3]';
                }
            }
        }
        return $rules;
    }
    

    IMPORTANT EDIT: There was a bug in pagination, pages 10+ didn't work properly.
    Now fixed: (\d)+ changed to (\d+) .

    Hope this will be helpful :)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

    报告相同问题?

    悬赏问题

    • ¥20 powerbulider 导入excel文件,显示不完整
    • ¥20 #关于multisim绘图遇到的问题
    • ¥15 用keil调试程序保证结果进行led相关闪烁
    • ¥15 paddle训练自己的数据loss降不下去
    • ¥20 用matlab的pdetool解决以下三个问题
    • ¥15 单个福来轮的平衡与侧向滑动是如何做到的?
    • ¥15 嵌入式Linux固件,能直接告诉我crc32校验的区域在哪不,内核的校验我已经找到了,uboot没有
    • ¥20 h3c静态路要求有详细过程
    • ¥15 调制识别中输入为时频图,星座图,眼图等
    • ¥15 数据结构C++的循环、随机数问题