【问题标题】:Wordpress Custom Rewrite Rule Returns 404 When Current Page Past 9当前页面超过 9 时,Wordpress 自定义重写规则返回 404
【发布时间】:2017-05-17 16:14:43
【问题描述】:

我的网站上的“目录”页面有一个自定义重写规则,以显示指定目录中的项目。一切都很好,除了如果用户尝试导航到大于第 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);

更新:使用调试这个插件,我发现 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

【问题讨论】:

  • 当您有 404 时,实际请求的 URL 是什么? (重写的)
  • 作为一个快速更新,我认为这个问题与 Wordpress 试图在帖子查询中使用分页号但帖子不超过 9 页这一事实有关。所以也许我需要弄清楚如何阻止 Wordpress 在 /catalog 页面上运行其正常查询?
  • 这是原网址,改写后的网址应以index.php?catalog=...开头。当您有 404 时,您可以在控制台中读取请求的 url
  • 抱歉,这里是重写的:index.php?catalog=example-catalog-entry-name&paged=11

标签: php regex wordpress


【解决方案1】:

好的,我已经解决了这个问题,但我不确定它是否是最好的解决方案,因此感谢任何反馈!我最终做的是使用 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' );

【讨论】:

  • 啊,我不明白重写的 URL 是用于自定义查询的。我猜你的解决方案有效,但也许它依赖于某天可能出错的东西(wp 项目多于目录项目)。在代码重用方面,有朝一日可能会导致问题.. 像$query->set( 'posts_per_page', 0 ); 这样的东西如果可行的话会更干净吗?
猜你喜欢
  • 1970-01-01
  • 2023-01-27
  • 2013-11-23
  • 2017-02-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-10
  • 2011-11-30
相关资源
最近更新 更多