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 :)

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

报告相同问题?

悬赏问题

  • ¥15 基于STM32心率血氧监测(OLED显示)相关代码运行成功后烧录成功OLED显示屏不显示的原因是什么
  • ¥15 Python动态规划:图2箭头指向的代码如何理解?太抽象了
  • ¥100 X轴为分离变量(因子变量),如何控制X轴每个分类变量的长度。
  • ¥30 求给定范围的全体素数p的(p-2)的连乘积
  • ¥15 VFP如何使用阿里TTS实现文字转语音?
  • ¥100 需要跳转番茄畅听app的adb命令
  • ¥50 寻找一位有逆向游戏盾sdk 应用程序经验的技术
  • ¥15 请问有用MZmine处理 “Waters SYNAPT G2-Si QTOF质谱仪在MSE模式下采集的非靶向数据” 的分析教程吗
  • ¥50 opencv4nodejs 如何安装
  • ¥15 adb push异常 adb: error: 1409-byte write failed: Invalid argument