这一部分很容易,而这一部分却不那么容易。这取决于您所寻找的解决方案的完整程度。例如,修复本机分页函数可能需要付出更多的努力。问题是“第0页”和第1页是同一页这一事实被烘焙到了代码中。
无论如何,第一步是阻止WordPress从/post/1/
到/post/
. 这相当简单,使用redirect_canonical
滤器在这里,我们检查它是否是单数帖子,页码是否为1。那样的话,我们就回去false
为了防止重定向,否则我们将原封不动地返回重定向URL。
function wpd_disable_page1_redirect( $redirect ) {
if( is_singular(\'post\') && ( 1 == get_query_var( \'page\' ) ) ){
return false;
}
return $redirect;
}
add_filter( \'redirect_canonical\', \'wpd_disable_page1_redirect\' );
您还必须修改文档中打印的规范URL
head
在新的“首页”:
function wpd_page1_canonical( $canonical_url, $post ) {
if( is_singular(\'post\') && ( 1 == get_query_var( \'page\' ) ) ){
return $canonical_url . \'1/\';
}
return $canonical_url;
}
add_filter( \'get_canonical_url\', \'wpd_page1_canonical\', 10, 2 );
因此,现在页码起作用了,但除了登录页之外,显示的内容是错误的。
要解决这个问题,我们可以使用content_pagination
滤器这使我们能够以数组的形式访问从帖子内容解析出来的各个页面。我们可以洗牌页面,并添加或删除它们。对于我们来说,最简单的修复方法是,如果我们在登录页以外的任何页面上,将整个数组移动一个元素:
function wpd_content_pagination_filter( $pages, $post ){
if( 1 < count( $pages ) && get_query_var( \'page\' ) ){
array_shift( $pages );
}
return $pages;
}
add_filter( \'content_pagination\', \'wpd_content_pagination_filter\', 10, 2 );
但这再次突显了潜在的问题——我们在数组中返回的页面数量不同。我们可以做一些不同的事情并修复它(通过以不同的方式将其弄错),但必须在某个地方达成妥协,因为许多本机函数认为0和1是同一页。
这里当然有一些我遗漏了的细节,比如处理“丑陋”的永久链接,一个可以手动分页的“幻影”最后一页,当然还有分页,但希望这会让你走上正轨。