WordPress自定义帖子类型分页链接返回404

zok*_*zok 7 php wordpress pagination http-status-code-404 custom-post-type

当我点击我的自定义帖子中的分页链接类型"工作"列表的帖子(或输入像"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;

否则:_e('这里没什么.'); 万一;

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

然后在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'];
Run Code Online (Sandbox Code Playgroud)

}}

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

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

另一方面,我希望返回一些帖子的URL"works/page/2"在404错误页面上结束.

为什么?

编辑:

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

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

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

编辑:

这是我通过Debug-this插件调试URL mysite.com/trabalhos/pagina/2得到的.这似乎是非常错误的:

Obs:trabalhos = works,pagina = page

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

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

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

在我的理解中,URL mysite.com/trabalhos/pagina/2应该指向以下URL(除了它不起作用 - 但如果我用'noticias'替换'trabalhos' - 我的slug为'博客' - 它的工作原理):

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

但是,URL mysite.com/trabalhos/pagina/2指向这个奇怪的网址:

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

令人惊讶的是,以下URL完全指向我期望的内容,即作品的第2页(trabalhos):

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

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

这是一些错误的配置?它会在哪里?

在此先感谢您的帮助!

小智 17

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

  • 事实证明这确实是 CPT/page slug 冲突。我在自定义帖子类型“重写”属性和列出该自定义帖子类型的所有帖子的页面上使用了相同的 slug,显然这完全搞乱了 WordPress 查询字符串。 (2认同)