Обновление 2016-01-21
Все мои текущие тесты выполняются на новых установках 4.4.1 со следующими настройками:
Plain permalinks
Twentysixteen Theme
No plugins activated
Если сообщение содержит только 1 страницу (то <!--nextpage-->
есть не отображается в сообщении), дополнительные страницы добавляются успешно (даже если вы добавляете несколько дополнительных страниц¹).
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
Если пост содержит 2+ страницы, то дополнительные страницы 404 и канонический редирект на страницу 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;
}
CodeЭто код, который я использовал для тестирования нескольких дополнительных страниц в одном посте
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_option ('custom_content') что-то вроде:
<!--nextpage-->
Hello World
Начиная с обновления до 4.4 код не работал; переход на дополнительную страницу вызывает ошибку 404 и redirect_canonical отправляет их обратно на постоянную ссылку сообщения. Отключение redirect_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;
}
На данный момент у меня нет идей о том, как восстановить эту функциональность, и любая помощь будет принята с благодарностью.
Ответы:
ОБНОВЛЕНИЕ 21-01-2016 19:35 SA TIME - ОШИБКА НАЙДЕНА !!!!! ДА!!!!!!
Я наконец нашел ошибку. Как вы указали в своем последнем обновлении, сбой происходит только тогда, когда в содержимом
$post_content
есть<!--nextpage-->
тег. Я проверил это и подтвердил, что любая другая страница после страницы<!--nextpage-->
возвращает 404, а затем страница перенаправляется обратно на первую страницу.Это связано со следующими строками кода в
handle_404()
методе, который был представлен вWP
классе в WordPress 4.4Этот код делает всякий раз, когда
<!--nextpage-->
тег установлен вpost_content
, он будет возвращать 404 при доступе к любой странице, которая добавляется после содержимого черезcontent_pagination
фильтр. Из-за установки 404redirect_canonical()
перенаправляет любую добавленную страницу обратно на первую страницуЯ отправил трек-тикет об этой проблеме, который вы можете проверить здесь
На момент написания статьи не было отзывов, поэтому регулярно проверяйте статус заявки.
ТЕКУЩЕЕ РЕШЕНИЕ - A / W TRAC БИЛЕТ ОБРАТНАЯ СВЯЗЬ
Пока, пока мы не получим какие-либо отзывы и возможные исправления в будущих выпусках, просто удалите эти строки из
WP
класса до дальнейшего уведомленияКАКОЕ ВРЕМЯ ЭТО ...... ЭТО ВРЕМЯ ОТЛАДКИ !!!!!
У меня было время, чтобы полностью проверить это. Я взял ваш код и проверил его:
Моя v4.3 локальная установка
Моя v4.4.0 локальная установка
Моя v4.4.1 локальная установка
Завершите новую локальную установку v4.4.1 только с
Hello World
постом иSample Page
страницейс моими постоянными ссылками на
default
иPost Name
Вот мой тестовый код для создания 4 страниц внутри моего тестового поста.
Я тоже проверял
для хорошей меры
На каждой установке и структуре постоянных ссылок работает весь ваш код ( кроме
content_pagination
ожидаемой версии v4.3 ).Я также установил
Sample Page
в качестве статической титульной страницы, но это не помогло на странице 2 как подтверждение ошибки, как описано в моем ОРИГИНАЛЬНОМ ОТВЕТЕ и ** РЕДАКТИРОВАТЬТаким образом, вывод заключается в том, что это не имеет ничего общего с ошибкой в ядре или любой другой ошибкой в ядре. Судя по комментариям, что-то сбрасывает запрашиваемый объект на страничных страницах постов, и это то, что нам нужно отладить. К сожалению, поскольку эта проблема теперь локализована, я не могу дать точных решений.
ОТЛАДКА ВОПРОСОМ
Для устранения проблемы необходимо использовать следующий рабочий процесс.
Получите себе огромное количество кофеина с высоким содержанием кофеина и большим количеством сахара
Сделай резервную копию своей базы данных
Скачайте и установите следующие плагины ( я не имею никакого отношения к любому плагину )
Объекты отладки для нормальной отладки. После установки и настройки исправьте все очевидные ошибки, которые могут быть выделены плагином. Не переходите к следующему пункту, если у вас есть явные ошибки. Исправить их в первую очередь
Менеджер БД, который вы будете использовать для восстановления и очистки БД перед переходом к следующему пункту.
Очистить все кеши, браузеры и плагины
Отключите все плагины и очистите все кеши снова для хорошей меры. Поскольку эта проблема выглядит как проблема перенаправления, я, вероятно, сначала отключил бы все плагины, которые могут иметь какое-то отношение к перенаправлению. Возможно, один плагин еще не совместим с v4.4. Проверьте, не устранена ли проблема, если она существует, перейдите к следующему пункту, в противном случае, давайте рассмотрим это более подробно.
Начните с деактивации всех плагинов, вы также можете начать с деактивации плагинов, которые могут быть очевидны для возникновения проблемы. Тщательно проверьте вашу установку после активации каждого плагина. Первым активированным плагином, который вызвал проблему, будет виновник. В этом случае обратитесь к автору плагина с подробностями отладки. Просто убедитесь, что очистили свои кеши после каждой активации плагина только для хорошей меры
Если вы достигли этой точки, предыдущий пункт не решил вашу проблему. Следующим шагом должно стать переключение на связанную тему, чтобы устранить вашу тему как проблему. Просто еще раз, очистите кеш.
Если все не удалось, у вас есть еще два варианта
Удалите
.htaccess
и позвольте WordPress создать новыйПереустановите WordPress
Это должно решить вашу проблему. Если это не так, вам нужно рассмотреть ошибку в ядре WordPress, которая может быть причиной проблемы.
Я надеюсь, что это помогает в обнаружении ошибки
ОБНОВИТЬ
Я должен был на самом деле связаться с билетом, который, кажется, объясняет все более подробно
Интересные и весьма актуальные патчи из вышеуказанного билета trac
https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Я не могу конкретно протестировать что-либо как таковое в данный момент, но вы должны проработать предложенные патчи и протестировать их. Что я могу понять, так это то, что тот же код,
redirect_canonical()
который отвечает за разбиение на страницы статических первых страниц, также отвечает за разбиение на страницы на отдельных страницах.ОРИГИНАЛЬНЫЙ ОТВЕТ
Отдельные страницы ( например, статические титульные страницы ) используются
get_query_var( 'page' )
для разбиения на страницы. В WordPress 4.4 ( и в v4.4.1 ) появилась ошибка, которая вызывает проблемы с разбиением на страницы при использованииget_query_var( 'page' )
для разбиения на страницы.В текущих отчетах об ошибках, таких как trac ticket # 35365 , упоминаются только статические первые страницы, у которых есть проблемы с разбиением на страницы, но поскольку ошибка связана с этим
get_query_var( 'page' )
, я думаю, что это также вызовет проблемы с одиночной пост-страницей, которая также используетget_query_var( 'page' )
.Вы должны попробовать патчи, как описано в trac tickets. Если это сработает, вы можете применить патч и ждать v4.4.2, в котором эта ошибка будет исправлена.
источник
Обратите внимание, что во всех трех приведенных вами примерах есть синтаксическая ошибка:
где добавлено дополнительное
)
.Замените эти строки на:
Я бы не рекомендовал возиться с глобальными объектами в целом, поэтому я думаю, что ваш последний пример с
content_pagination
фильтром - это то, что нужно.Вы также можете избежать добавления пустых страниц с помощью:
Там также отсутствует
)
здесь:источник