更新2016-01-21
我端的所有当前测试都是在新安装的4.4.1上进行的,设置如下:
Plain permalinks
Twentysixteen Theme
No plugins activated
If the post only has 1 page (即<!--nextpage-->
没有出现在帖子中)然后extra pages are appended successfully (即使附加了多个额外页面)。
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
If the post has 2+ pages 然后是额外的页面
404 and canonical redirect 转到帖子的第1页。
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
<!--nextpage-->
This is page 2
在第二种情况下
$wp_query->queried_object
一旦你点击了额外的页面,它就会是空的。您需要禁用规范重定向才能看到这一点
remove_filter(\'template_redirect\', \'redirect_canonical\');
以下两个核心修复程序已分别或一起尝试,但行为没有改变:https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
为了便于使用,这是我目前正在测试的代码:
add_action(\'template_redirect\', \'custom_content_one\');
function custom_content_one() {
global $post;
$content = "\\n<!--nextpage-->\\nThis is the extra page v1";
$post->post_content .= $content;
}
add_filter(\'content_pagination\', \'custom_content_two\', 10, 2);
function custom_content_two($pages, $post) {
if ( in_the_loop() && \'post\' === $post->post_type ) {
$content = "This is the extra page v2";
$pages[] = $content;
}
return $pages;
}
add_action(\'the_post\', \'custom_content_three\');
function custom_content_three() {
global $multipage, $numpages, $pages;
$content = "This is the extra page v3";
$multipage = 1;
$numpages++;
$pages[] = $content;
}
¹;这是我用来测试单页文章中多个额外页面的代码
add_action(\'template_redirect\', \'custom_content_one\');
function custom_content_one() {
global $post;
$content = "\\n<!--nextpage-->\\nThis is the extra page v1-1\\n<!--nextpage-->\\nThis is the extra page v1-2\\n<!--nextpage-->\\nThis is the extra page v1-3";
$post->post_content .= $content;
}
原始问题在4.4之前,我可以在多页面帖子中添加一个附加页面,内容如下:
add_action(\'template_redirect\', \'custom_content\');
function custom_content() {
global $post;
$content = html_entity_decode(stripslashes(get_option(\'custom_content\')));
$post->post_content .= $content;
}
get\\u选项(“自定义内容”)类似于:
<!--nextpage-->
Hello World
自升级到4.4后,该代码一直不起作用;导航到其他页面会触发404错误,并且
redirect_canonical 将它们发送回帖子的永久链接。禁用redirect\\u canonical允许我查看额外的页面和附加内容,但仍会触发404错误。
我尝试了许多解决方法,但没有一种解决404错误,包括:
add_action(\'the_post\', \'custom_content\');
function custom_content() {
global $multipage, $numpages, $pages;
$content = html_entity_decode(stripslashes(get_option(\'custom_content\')));
$multipage = 1; // ensure post is considered multipage: needed for single page posts
$numpages++; // increment number of pages
$pages[] = $content;
}
还尝试利用新的
content_pagination 4.4中添加的过滤器:
add_filter(\'content_pagination\', \'custom_content\', 10, 2);
function custom_content($pages, $post) {
$content = html_entity_decode(stripslashes(get_option(\'custom_content\')));
$pages[] = $content;
return $pages;
}
目前,我不知道如何恢复此功能,如有任何帮助,我将不胜感激。
最合适的回答,由SO网友:Pieter Goosen 整理而成
更新21-01-2016 19:35 SA时间-发现错误!!!!!是啊
我终于找到了bug。正如您在上次更新中所述,只有当
$post_content
有一个
<!--nextpage-->
内容中的标记。我测试了它,并确认了
<!--nextpage-->
返回404,然后页面重定向回第一页。
这是由于the following lines of code 在handle_404()
中介绍的方法WP
class 在WordPress 4.4中
// check for paged content that exceeds the max number of pages
$next = \'<!--nextpage-->\';
if ( $p && false !== strpos( $p->post_content, $next ) && ! empty( $this->query_vars[\'page\'] ) ) {
$page = trim( $this->query_vars[\'page\'], \'/\' );
$success = (int) $page <= ( substr_count( $p->post_content, $next ) + 1 );
}
此代码所做的是
<!--nextpage-->
标签设置在
post_content
, 当访问任何页面时,它将返回404,该页面通过
content_pagination
滤器由于设置了404,
redirect_canonical()
将任何附加页重定向回第一页
我已经提交了一份关于这个问题的trac记录单,你可以在这里查看
在撰写本文时,还没有任何反馈,因此请确保定期检查罚单的状态
当前解决方案-目前,在我们在将来的版本中获得任何反馈和可能的修复之前,只需从WP
上课时间另行通知
现在几点了。。。。。。调试时间到了
我有时间对此进行全面测试。我获取了您的代码并在以下平台上进行了测试:
我的v4。3本地安装
我的v4。4.0本地安装
我的v4。4.1本地安装
完成新v4。4.1仅使用Hello World
post和Sample Page
页
将我的永久链接设置为
这是我的测试代码,可以在我的测试帖子中创建4页。
add_filter(\'content_pagination\', \'custom_content\', 10, 2);
function custom_content($pages, $post) {
$pages_to_add = [
\'Hello World Page 2\',
\'Hello World Page 3\',
\'Hello World Page 4\',
];
foreach ( $pages_to_add as $page_to_add ){
$pages[] = html_entity_decode(
stripslashes(
$page_to_add
)
);
}
return $pages;
}
我还测试了
add_filter(\'content_pagination\', \'custom_content\', 10, 2);
function custom_content($pages, $post) {
$pages_to_add = [
\'<!--nextpage--> Hello World Page 2\',
\'<!--nextpage--> Hello World Page 3\',
\'<!--nextpage--> Hello World Page 4\',
];
foreach ( $pages_to_add as $page_to_add ){
$pages[] = html_entity_decode(
stripslashes(
$page_to_add
)
);
}
return $pages;
}
为了更好的衡量
在每个install和permalink结构上,所有代码都可以工作()content_pagination
在v4上。3这是预期的)。
我还设置Sample Page
作为一个静态首页,但在第2页上失败了,因为它符合我的ORIGINAL ANSWER and **EDIT
所以得出的结论是,这与core中的bug或core中的任何其他bug无关。从注释来看,有什么东西正在使分页帖子页面上的查询对象不稳定,这就是我们需要调试的东西。不幸的是,由于这个问题现在已本地化,我无法给出确切的解决方案。
调试问题您需要使用以下工作流来调试问题
给自己喝大量含大量糖的高咖啡因咖啡
备份数据库
下载并安装以下插件(我与任何插件都没有关联)
- Debug Objects 用于正常调试。一旦安装并安装,修复插件可能突出显示的所有明显错误。如果您有明显的错误,请不要继续讨论下一个要点。首先修复它们
- DB Manager 在继续下一个要点之前,您将使用它来修复和清理数据库
清除所有缓存、浏览器和插件
取消激活所有插件并再次清除所有缓存,以便更好地测量。因为这个问题看起来像是重定向问题,我可能会首先停用所有可能与重定向有关的插件。可能有一个插件尚未与v4兼容。检查问题是否持续存在,如果持续存在,请继续下一个要点,否则,让我们更详细地了解一下
从停用所有插件开始,您也可以从停用可能导致问题的插件开始。在激活每个插件后,正确测试您的安装。导致问题的第一个插件将是罪魁祸首。在这种情况下,请联系插件作者以了解调试详细信息。只需确保在每次插件激活后清除缓存,以便更好地衡量
如果您达到了这一点,那么前面的要点并不能解决您的问题。下一步应该是切换到捆绑主题,以消除作为问题的主题。再说一次,清除缓存。
如果一切都失败了,你还有两个选择
删除.htaccess
让WordPress创建一个新的
重新安装WordPress
这应该可以解决您的问题。如果没有,您需要考虑WordPress core中的一个bug,它可能会导致该问题。
我希望这有助于捕捉错误
更新
我实际上应该链接到下面的trac票证,它似乎更详细地解释了一切上述trac票据中有趣且非常相关的补丁程序目前我无法具体测试任何这样的东西,但您应该完成建议的补丁并进行测试。我能发现的是redirect_canonical()
它负责静态首页的分页,也负责单页的分页。原始答案
单页(类似静态首页)使用get_query_var( \'page\' )
分页。WordPress 4.4(和v4.4.1)出现了一个bug,在使用get_query_var( \'page\' )
用于分页。当前的bug报告,如trac ticket # 35365, 仅提及分页有问题的静态首页,但由于错误与get_query_var( \'page\' )
, 我认为这也会导致单页分页的问题,它也使用get_query_var( \'page\' )
.
您应该尝试trac票证中描述的修补程序。如果这起作用,您可以应用补丁并等待v4。4.2将修复此错误