【发布时间】: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