很高兴你找到了一个解决方案,是的,确实有效。但您可以通过使用is_single( \'<parent slug>/<child slug>\' )
, e、 g。is_single( \'family-law/success-stories\' )
在你的情况下。
其次,这不完全是redirect_canonical
<钩子(hook)导致在单数分页的贴子页面上进行(301)重定向(URL具有/page/<number>
). 相反,它是the $addl_path
part 在redirect_canonical()
函数redirect_canonical
钩更具体地说,该零件仅在以下情况下运行! is_single()
为true(当前页码为2或更多),因此:
如果请求(即当前页面)URL用于example.com/practice-areas/family-law/success-stories/page/2/
哪里practice-areas
是CPT段塞和success-stories
是的孩子family-law
, 重定向/规范URL将not 包含page/2/
因为! is_single()
是假的,因此$addl_path
将为空。
同样的情况也会发生在example.com/practice-areas/family-law/page/2/
(即父帖子的第2页)和其他单数CPT页面,包括常规帖子(默认情况下post
类型),例如atexample.com/hello-world/page/2/
, 但不在单数页上(帖子类型page
) 因为! is_single()
为false-因为is_single()
适用于任何立柱类型,但attachment
和page
.
因此,如果请求URL与规范URL不匹配,则WordPress会运行(301)重定向,这解释了为什么会发生这种情况:每次我尝试导航到/page/child-page/page/2/
WordPress将我发送回/page/child-page/
使用301重定向;。
此外,redirect_canonical()
被钩住了template_redirect
, 因此,与其让函数运行确定重定向/规范URL的各种逻辑,但最终返回一个空字符串,不如像这样禁用该函数:
add_action( \'template_redirect\', \'my_template_redirect\', 1 );
function my_template_redirect() {
if ( is_paged() && is_single( \'family-law/success-stories\' ) ) {
remove_action( \'template_redirect\', \'redirect_canonical\' );
}
}
是的,不需要额外的重写规则,因为WordPress已经生成了它们(处理
/page/<number>
) 用于您的CPT。但我不知道WordPress为什么会这样做
! is_single()
检查
最后但并非最不重要的是,在我最初的回答和评论中,我建议您删除$temp_query
部分内容,您的回答是:“我将保留$temp\\u查询位,因为它允许分页组件工作,而无需重写或使事情复杂化;和<我想你只是说不需要它;。
是的,第二句话你说得对。但更准确地说,我实际上测试了您的模板代码single-practice-areas.php
然后移除$temp_query
零件(和使用的$total_pages = $practice_area_query->max_num_pages;
), 以及/page/<number>
在上面的帮助下,分页对我来说很好my_template_redirect()
作用
所以我想知道$temp_query
修复,或者为什么必须分配$wp_query
到$practice_area_query
?
但如果你真的必须保留它,那么你需要移动wp_reset_postdata();
至之后$wp_query = $temp_query;
, i、 e.恢复全局$wp_query
变量返回到实际的主查询。否则,如果你the_title()
, 您将在自定义查询中看到最后一篇文章的标题,而不是主查询中当前(也是唯一)的标题。