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.