【问题标题】:WordPress pagination links return 404 error on custom post types (only)?WordPress 分页链接在自定义帖子类型上返回 404 错误(仅)?
【发布时间】:2014-05-20 03:36:09
【问题描述】:

当我点击自定义帖子类型“作品”帖子列表中的分页链接(或输入“mysite.com/works/page/2”之类的 URL)时,我会看到 404 页面。

常规帖子类型分页(博客)正常工作。另外,关于我的自定义帖子类型“作品”的所有其他内容似乎都可以正常工作。

我的template-works.php 文件有这个:

    get_home_pagination();
        
    $args = array( 'post_type' => 'works', 'posts_per_page' => 10, 'paged' => $paged ); $wp_query = new WP_Query( $args );
    
    if ( $wp_query->have_posts() ) :
        while ($wp_query->have_posts()) :
            $wp_query->the_post();
            get_template_part( 'loop', 'works' );
        endwhile;      
    else:
        _e( 'Nothing here.' );
    endif;

template-blog.php 中使用了相同的代码(当然,替换了 post 类型),其中分页链接正常工作。

然后在functions.php 我得到了:

function get_home_pagination() {
 
    global $paged, $wp_query, $wp;
    $args = wp_parse_args($wp->matched_query);

    if ( !empty ( $args['paged'] ) && 0 == $paged ) {
        $wp_query->set('paged', $args['paged']);
        $paged = $args['paged'];
    }
}

我一度认为这是因为 WordPress 在循环中找不到任何帖子:它试图在没有帖子时获取帖子 ID,如 post-template.php 的第 29 行。但后来我意识到了这一点:

例如,如果我键入 URL“(...)/blog/page/456”,则博客模板会加载“Nothing here”消息。没有 404 错误页面。

另一方面,我希望返回一些帖子的 URL“works/page/2”以 404 错误页面结束。

为什么?

编辑:

在 404 页面上我也收到此错误:

试图获取非对象的属性 (...)/wordpress/wp-includes/post-template.php 在第 29 行。

...但它可能与分页问题无关。我设法删除了导致此错误的代码(来自我自定义的插件)并且分页仍然不起作用。

编辑:

这是我用 Debug-this 插件调试 URL mysite.com/trabalhos/pagina/2 得到的。好像很不对劲:

Obs:trabalhos = 作品,pagina = 页

匹配规则:trabalhos/([^/]+)(/[0-9]+)?/?$

匹配的查询:works=pagina&page=%2F2

查询字符串: page=%2F2&name=pagina&post_type=works&works=pagina&debug-this=rewrites

据我了解,网址 mysite.com/trabalhos/pagina/2 应该指向以下网址(除非它不起作用 - 但如果我将 'trabalhos' 替换为 'noticias' - 我的 'blog' 蛞蝓 - 它有效):

mysite.com/trabalhos/pagina/2/?pagename=trabalhos

然而,网址 mysite.com/trabalhos/pagina/2 指向这个奇怪的网址:

mysite.com/trabalhos/pagina/2?page=%2F2&works=pagina&post_type=works&name=pagina

令人惊讶的是,以下 URL 恰好指向了我所期待的内容,即作品 (trabalhos) 的第 2 页:

mysite.com/noticias/pagina/2/?pagename=trabalhos

我似乎接近解决方案...但是我尝试停用所有插件,删除几乎所有主题 php 代码,每次重置管理面板中的永久链接设置等等,但错误仍然存​​在。

是不是配置错误?会在哪里?

提前感谢您的帮助!

【问题讨论】:

  • 再次保存永久链接按钮,可能会解决这个问题
  • 我使用了一个插件来调试查询和重写。作品分页链接的匹配查询和查询字符串显然搞砸了,匹配规则似乎错误。我已经有一段时间了,无法弄清楚。有很多信息可以放在评论中。我可以编辑我的帖子,但我想我最好开一个新帖子……

标签: php wordpress pagination http-status-code-404 custom-post-type


【解决方案1】:

这听起来像是您的自定义帖子类型中的 slug 冲突。 尝试将 post slug 重命名为任何其他名称,然后再次转到永久链接以重新生成重写规则。

【讨论】:

  • 原来这确实是 CPT/page slug 冲突。我在我的自定义帖子类型“重写”属性和列出来自该自定义帖子类型的所有帖子的页面上使用了相同的 slug,显然这完全弄乱了 WordPress 查询字符串。
  • 这篇文章也给了我很好的见解:code.tutsplus.com/tutorials/…
  • 你救了我!浪费了 4 小时
猜你喜欢
  • 2020-03-22
  • 1970-01-01
  • 2015-06-07
  • 1970-01-01
  • 1970-01-01
  • 2014-09-29
  • 1970-01-01
  • 1970-01-01
  • 2017-09-22
相关资源
最近更新 更多