Aktualizacja 21.01.2016
Wszystkie bieżące testy po mojej stronie są wykonywane na nowych instalacjach 4.4.1 z następującymi ustawieniami:
Plain permalinks
Twentysixteen Theme
No plugins activated
Jeśli post ma tylko 1 stronę (tzn. <!--nextpage-->
Nie pojawia się w poście), dodatkowe strony są dodawane pomyślnie (nawet jeśli dodasz wiele dodatkowych stron¹).
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
Jeśli post ma ponad 2 strony, dodatkowe strony 404 i kanoniczne przekierowanie na stronę 1 postu.
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
<!--nextpage-->
This is page 2
W drugim przypadku $wp_query->queried_object
jest pusty po przejściu na dodatkowe strony. Aby to zobaczyć, musisz wyłączyć kanoniczne przekierowanieremove_filter('template_redirect', 'redirect_canonical');
Wypróbowano obie następujące podstawowe poprawki, oddzielnie i łącznie, bez zmiany zachowania: https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Dla ułatwienia użytkowania jest to kod, który obecnie testuję:
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;
}
¹ To jest kod, którego użyłem do przetestowania wielu dodatkowych stron na postie na jednej stronie
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;
}
Oryginalne pytanie
Przed wersją 4.4 byłem w stanie dodać dodatkową stronę do posta na mutlipage z następującymi informacjami:
add_action('template_redirect', 'custom_content');
function custom_content() {
global $post;
$content = html_entity_decode(stripslashes(get_option('custom_content')));
$post->post_content .= $content;
}
Z get_option („custom_content”) jest coś w stylu:
<!--nextpage-->
Hello World
Od aktualizacji do 4.4 kod nie działał; przejście do dodatkowej strony powoduje błąd 404 i redirect_canonical odsyła je z powrotem do bezpośredniego łącza do posta. Wyłączenie redirect_canonical pozwala mi wyświetlić dodatkową stronę i dodatkową zawartość tam jest, ale nadal powoduje błąd 404.
Próbowałem wielu obejść, z których żaden nie rozwiązuje błędu 404, w tym:
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;
}
Próbowałem także wykorzystać nowy filtr content_pagination, który został dodany w 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;
}
W tej chwili nie mam pomysłów na przywrócenie tej funkcjonalności i każda pomoc byłaby mile widziana.
Odpowiedzi:
AKTUALIZACJA 21-01-2016 19:35 SA TIME - BŁĄD ZNALEZIONO !!!!! TAK!!!!!!
W końcu znalazłem błąd. Jak stwierdzono w ostatniej aktualizacji, awaria występuje tylko wtedy, gdy w treści
$post_content
znajduje się<!--nextpage-->
znacznik. Przetestowałem to i potwierdziłem, że każda inna strona po stronie po<!--nextpage-->
zwróceniu 404, a następnie strona przekierowuje z powrotem na pierwszą stronę.Wynika to z następujących linii kodu w
handle_404()
metodzie, która została wprowadzona wWP
klasie w WordPress 4.4To, co robi ten kod, polega na tym, że za każdym razem, gdy
<!--nextpage-->
tag jest ustawiony napost_content
, zwraca 404 po wejściu na dowolną stronę, która jest dodawana po treści przezcontent_pagination
filtr. Ponieważ ustawiono 404,redirect_canonical()
przekierowuje każdą dołączoną stronę z powrotem na pierwszą stronęZłożyłem bilet trac dotyczący tego problemu, który możesz sprawdzić tutaj
W chwili pisania tego tekstu nie było jeszcze żadnych opinii, więc regularnie sprawdzaj status biletu
AKTUALNE ROZWIĄZANIE - INFORMACJE ZWROTNE BILETÓW TRAC
Na razie, dopóki nie otrzymamy opinii i możliwych poprawek w przyszłych wydaniach, po prostu usuń te wiersze z
WP
klasy do odwołaniaCO TO JEST CZAS ...... TO CZAS DEBUGOWANIA !!!!!
Miałem czas na pełne przetestowanie tego. Wziąłem twój kod i przetestowałem go na:
Moja lokalna instalacja v4.3
Moja lokalna instalacja v4.4.0
Moja lokalna instalacja v4.4.1
Wypełnij nową instalację lokalną v4.4.1 tylko
Hello World
postem iSample Page
stronąz moimi permalinkami ustawionymi na
default
iPost Name
Oto mój kod testowy, aby utworzyć 4 strony z moim postem testowym.
Też testowałem
na dokładkę
Na każdej instalacji i każdej strukturze permalink działa cały kod ( oprócz oczekiwanej wersji
content_pagination
v4.3 ).Ustawiłem również
Sample Page
jako statyczną stronę główną, ale to nie powiodło się na stronie 2 jako zgodność z błędem, jak opisano w mojej ORYGINALNEJ ODPOWIEDZI i ** EDYCJAWniosek jest taki, że nie ma to nic wspólnego z błędem w rdzeniu ani żadnym innym błędem w rdzeniu. Z komentarzy wynika, że coś niepokoi badany obiekt na stronach postu stronicowanych i to jest coś, co musimy debugować. Niestety, ponieważ problem ten jest teraz zlokalizowany, nie mogę podać dokładnych rozwiązań.
DEBUGOWANIE PROBLEMU
Aby debugować problem, musisz skorzystać z następującego przepływu prac
Zdobądź ogromną ilość kawy o wysokiej zawartości kofeiny z dużą ilością cukru
Zrób kopię zapasową db
Pobierz i zainstaluj następujące wtyczki ( nie mam powiązania z żadną wtyczką )
Obiekty debugowania do normalnego debugowania. Po zainstalowaniu i konfiguracji napraw wszystkie oczywiste błędy, które mogą zostać wyróżnione przez wtyczkę. Nie przechodź do następnego głównego punktu, jeśli masz oczywiste błędy. Napraw je najpierw
DB Manager, którego użyjesz do naprawy i czyszczenia DB przed przejściem do następnego punktu wypunktowania
Wyczyść wszystkie pamięci podręczne, przeglądarki i wtyczki
Dezaktywuj wszystkie wtyczki i ponownie wyczyść wszystkie pamięci podręczne, aby zachować dokładność. Ponieważ ten problem wygląda jak problem z przekierowaniem, prawdopodobnie najpierw dezaktywuję wszystkie wtyczki, które mogą mieć coś wspólnego z przekierowaniem. Być może jedna wtyczka nie jest jeszcze kompatybilna z wersją 4.4. Sprawdź, czy problem nadal występuje, jeśli tak, przejdź do następnego punktu wypunktowania, w przeciwnym razie spójrzmy na to bardziej szczegółowo
Zacznij od dezaktywacji wszystkich wtyczek, możesz też zacząć od dezaktywacji wtyczek, które mogą być oczywiste z powodu problemu. Prawidłowo przetestuj swoją instalację po aktywacji każdej wtyczki. Pierwszą aktywowaną wtyczką, która spowodowała problem, będzie winowajca. W takim przypadku skontaktuj się z autorem wtyczki ze szczegółami debugowania. Tylko pamiętaj, aby wyczyścić pamięć podręczną po każdej aktywacji wtyczki, dla dobrego pomiaru
Jeśli osiągnąłeś ten punkt, poprzedni punktor nie rozwiązał twojego problemu. Następnym krokiem powinno być przejście do motywu pakietowego, aby wyeliminować motyw jako problem. Jeszcze raz wyczyść pamięć podręczną.
Jeśli wszystko się nie powiedzie, masz jeszcze dwie opcje
Usuń
.htaccess
i pozwól WordPressowi utworzyć nowyPonownie zainstaluj WordPress
To powinno rozwiązać Twój problem. Jeśli nie, musisz rozważyć błąd w rdzeniu WordPress, który może być przyczyną problemu.
Mam nadzieję, że to pomoże złapać błąd
AKTUALIZACJA
Powinienem był faktycznie powiązać się z następującym po nim biletem trac, który wydaje się wyjaśniać wszystko bardziej szczegółowo
Ciekawe i dość odpowiednie łaty z powyższego biletu trac
https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
W tej chwili nie mogę konkretnie przetestować niczego jako takiego, ale powinieneś przejrzeć sugerowane łatki i przetestować je. Mogę odebrać to, że ten sam kod,
redirect_canonical()
który odpowiada za stronicowanie statycznych stron głównych, jest również odpowiedzialny za stronicowanie na pojedynczych stronach.ORYGINALNA ODPOWIEDŹ
Pojedyncze strony ( takie jak statyczne strony
get_query_var( 'page' )
początkowe ) służą do paginacji. W WordPress 4.4 ( i v4.4.1 ) pojawił się błąd, który powoduje problemy z paginacją podczas korzystaniaget_query_var( 'page' )
z paginacji.Obecne raporty o błędach, takie jak trac bilet # 35365 , wspominają tylko o statycznych stronach głównych , które mają problemy z paginacją, ale jeśli chodzi o błąd
get_query_var( 'page' )
, sądzę, że spowodowałoby to również problemy z paginacją pojedynczego postu, która również używaget_query_var( 'page' )
.Powinieneś wypróbować łaty zgodnie z opisem w biletach trac. Jeśli to zadziała, możesz zastosować łatkę i poczekać na wersję 4.4.2, która naprawi ten błąd
źródło
Pamiętaj, że istnieje błąd składniowy dla wszystkich trzech podanych przez Ciebie przykładów:
gdzie
)
dodaje się dodatkowe .Zamień te linie na:
Nie polecałbym ogólnie bałagania się z obiektami globalnymi, więc myślę, że twój ostatni przykład z
content_pagination
filtrem jest dobrym sposobem na przejście tutaj.Możesz także unikać dodawania pustych stron za pomocą:
Brakuje
)
tutaj również:źródło