如何使用<!--NextPage-->创建页面/1?

时间:2018-08-16 作者:Castiblanco

我在一篇帖子上这样做:

Content 1
<!--nextpage-->
Content 2
<!--nextpage-->
Content 3
<!--nextpage-->
Content 4
<!--nextpage-->
将我的帖子/页面的内容分为以下几页:Pages: 1 2 3 4, 当您更改页面时,帖子的URL也会更改:

mysite/post 
mysite/post/2
mysite/post/3
mysite/post/4
正如你所看到的,没有mysite/post/1, 如果我想访问第1页更改URL,它会将我重定向到mysite/post/, 看来他们是一样的。

然而,我发现一个网站做了一些不同的事情,我想知道他们是如何做到的,this one, 正如你所看到的,你从mysite/post 点击按钮后,下一个“页面”是mysite/post/1.

因此,在所有这些之前似乎有一个页面/0,或者他们改变了每个页面的slug,无论在什么情况下,我都想知道如何实现这种行为,不幸的是,我找不到太多关于它的文档<!--nextpage-->

1 个回复
最合适的回答,由SO网友:Milo 整理而成

这一部分很容易,而这一部分却不那么容易。这取决于您所寻找的解决方案的完整程度。例如,修复本机分页函数可能需要付出更多的努力。问题是“第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\' );
您还必须修改文档中打印的规范URLhead 在新的“首页”:

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是同一页。

这里当然有一些我遗漏了的细节,比如处理“丑陋”的永久链接,一个可以手动分页的“幻影”最后一页,当然还有分页,但希望这会让你走上正轨。

结束