繁体   English   中英

当前页超过9时,WordPress自定义重写规则将返回404

[英]Wordpress Custom Rewrite Rule Returns 404 When Current Page Past 9

我对网站上的“目录”页面有一个自定义的重写规则,以显示指定目录中的项目。 除分页之外,其他所有功能都可以正常工作,如果用户尝试导航到大于第9页的页面,分页会神秘地返回404错误页面。 该网站上的其他存档在第9页之后的页面都没有问题,因此我认为这与我的重写规则中的正则表达式有一定关系,但是我对它的含义迷失了。

function x_rewrite_rule_form_submissions()
{
    add_rewrite_tag('%catalog%', '([^&]+)');
    add_rewrite_rule('catalog/([^/]+)/page/([0-9]+)/?', 'index.php?catalog=$matches[1]&paged=$matches[2]', 'top' );
    add_rewrite_rule('catalog/([^/]+)/?', 'index.php?catalog=$matches[1]', 'top');
}
add_action('init', 'x_rewrite_rule_form_submissions', 10, 0);

更新:使用Debug此插件,我发现WP_Query尝试使用URL中的分页信息在post_type =“ post”上运行主查询。 我的理论是,正是此查询导致Wordpress返回404错误消息。 如何覆盖/禁用此主查询?

SELECT SQL_CALC_FOUND_ROWS  wp_posts.ID FROM wp_posts  WHERE 1=1  AND wp_posts.post_type = 'post' AND (wp_posts.post_status = 'publish' OR wp_posts.post_status = 'acf-disabled' OR wp_posts.post_status = 'private')  ORDER BY wp_posts.post_date DESC LIMIT 100, 10

好的,尽管我不确定这是否是最好的解决方案,但我已经解决了该问题,因此,感谢您提供任何反馈! 我最终要做的是使用pre_get_posts来更改post_type,以便主要的Wordpress查询请求在所有目录页面上都使用post_type =“ items”而不是post_type =“ post”。 因为数据库中有多少个“项目”,所以分页数量不会导致404。希望这对人们有所帮助!

function alter_catalog_query( $query ) {
    $uri = explode("/", $_SERVER['REQUEST_URI']);
    if ( $query->is_main_query() && isset($uri[1]) ) {
        if ( $uri[1] == 'catalog')
            $query->set('post_type','items');
    }
}
add_action( 'pre_get_posts', 'alter_catalog_query' );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM