Update 21.01.2016
Alle aktuellen Tests auf meiner Seite werden bei Neuinstallationen von 4.4.1 mit den folgenden Einstellungen durchgeführt:
Plain permalinks
Twentysixteen Theme
No plugins activated
Wenn der Beitrag nur 1 Seite hat (dh <!--nextpage-->
nicht im Beitrag erscheint), werden die zusätzlichen Seiten erfolgreich angehängt (auch wenn Sie mehrere zusätzliche Seiten anhängen¹).
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
Wenn der Beitrag mehr als 2 Seiten umfasst, werden die zusätzlichen Seiten 404 und die kanonische Weiterleitung auf Seite 1 des Beitrags weitergeleitet.
Welcome to WordPress. This is your first post. Edit or delete it, then start writing!
<!--nextpage-->
This is page 2
Im zweiten Fall $wp_query->queried_object
ist leer, sobald Sie die zusätzlichen Seiten getroffen haben. Sie müssen die kanonische Umleitung deaktivieren, um dies zu sehenremove_filter('template_redirect', 'redirect_canonical');
Die beiden folgenden Hauptkorrekturen wurden separat und zusammen ohne Änderung des Verhaltens ausprobiert: https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Der Einfachheit halber ist dies der Code, mit dem ich gerade teste:
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;
}
¹Dies ist der Code, mit dem ich mehrere zusätzliche Seiten auf einem einzelnen Seitenbeitrag getestet habe
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;
}
Ursprüngliche Frage
Vor 4.4 konnte ich eine zusätzliche Seite mit folgendem Inhalt an einen Mehrseiten-Post anhängen:
add_action('template_redirect', 'custom_content');
function custom_content() {
global $post;
$content = html_entity_decode(stripslashes(get_option('custom_content')));
$post->post_content .= $content;
}
Mit get_option ('custom_content') ist so etwas wie:
<!--nextpage-->
Hello World
Seit dem Upgrade auf 4.4 hat der Code nicht funktioniert. Das Navigieren zu der zusätzlichen Seite löst einen 404-Fehler aus und redirect_canonical sendet sie zurück an den Permalink des Posts. Durch Deaktivieren von redirect_canonical kann ich die zusätzliche Seite anzeigen und der zusätzliche Inhalt ist vorhanden, es wird jedoch weiterhin ein 404-Fehler ausgelöst.
Ich habe eine Reihe von Problemumgehungen versucht, von denen keine den 404-Fehler behebt, einschließlich:
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;
}
Es wurde auch versucht, den neuen content_pagination- Filter zu nutzen, der in 4.4 hinzugefügt wurde:
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;
}
An diesem Punkt habe ich keine Ideen, wie diese Funktionalität wiederhergestellt werden kann, und ich würde mich über jede Unterstützung freuen.
Antworten:
UPDATE 21-01-2016 19:35 SA TIME - BUG FOUND !!!!! JA!!!!!!
Endlich habe ich den Fehler gefunden. Wie Sie in Ihrem letzten Update angegeben haben, tritt der Fehler nur auf, wenn der Inhalt
$post_content
ein<!--nextpage-->
Tag enthält. Ich habe es getestet und bestätigt, dass jede andere Seite nach der Seite nach dem<!--nextpage-->
einen 404 zurückgibt und die Seite dann zur ersten Seite zurückgeleitet wird.Dies liegt an den folgenden Codezeilen in der
handle_404()
Methode, die in derWP
Klasse in WordPress 4.4 eingeführt wurdeDieser Code gibt beim
<!--nextpage-->
Aufrufenpost_content
einer Seite, die nach dem Inhalt über dencontent_pagination
Filter angehängt wird, immer dann eine 404 zurück , wenn das Tag in gesetzt ist .redirect_canonical()
Leitet eine angehängte Seite aufgrund eines gesetzten 404 auf die erste Seite zurückIch habe ein Trac-Ticket zu diesem Problem eingereicht, das Sie hier einsehen können
Zum Zeitpunkt des Schreibens gab es noch keine Rückmeldungen. Überprüfen Sie daher regelmäßig den Status des Tickets
AKTUELLE LÖSUNG - A / W-TRAC-TICKET-FEEDBACK
Löschen Sie vorerst einfach diese Zeilen aus der, bis wir Feedback und mögliche Korrekturen in zukünftigen Versionen erhalten
WP
vorerst bis auf weiteres KlasseWAS IST ES ...... ES IST DEBUGGING-ZEIT !!!!!
Ich hatte Zeit, dies vollständig zu testen. Ich habe Ihren Code genommen und getestet:
Meine v4.3 lokale Installation
Meine v4.4.0 lokale Installation
Meine v4.4.1 lokale Installation
Schließen Sie die lokale Installation von Version 4.4.1 nur mit dem
Hello World
Beitrag und derSample Page
Seite abmit meinen permalinks auf
default
undPost Name
Hier ist mein Testcode, um 4 Seiten mit meinem Testbeitrag zu erstellen.
Habe ich auch getestet
für ein gutes Maß
Bei jeder Installation und bei jeder Permalink-Struktur funktioniert der
content_pagination
gesamte Code (mit Ausnahme der erwarteten Version 4.3 ).Ich habe es auch
Sample Page
als statische Startseite festgelegt, aber dies ist auf Seite 2 als Bestätigung für den in my beschriebenen Fehler fehlgeschlagen ORIGINALANTWORT und in ** EDIT beschriebenDie Schlussfolgerung lautet also, dass dies nichts mit dem Fehler im Kern oder einem anderen Fehler im Kern zu tun hat. Aus Kommentaren geht hervor, dass das abgefragte Objekt auf Seiten mit Seitenposts nicht mehr gesetzt ist, und das müssen wir debuggen. Da dieses Problem jetzt lokalisiert ist, kann ich leider keine genauen Lösungen geben.
DEBUGGING THE ISSUE
Sie müssen den folgenden Arbeitsablauf verwenden, um das Problem zu debuggen
Holen Sie sich eine große Menge Kaffee mit hohem Koffeingehalt und viel Zucker
Erstellen Sie eine Sicherungskopie Ihrer Datenbank
Laden Sie die folgenden Plugins herunter und installieren Sie sie ( ich bin keinem Plugin zugeordnet )
Debug-Objekte für das normale Debuggen. Reparieren Sie nach der Installation und Einrichtung alle offensichtlichen Fehler, die vom Plugin hervorgehoben werden könnten. Fahren Sie nicht mit dem nächsten Aufzählungspunkt fort, wenn Sie offensichtliche Fehler haben. Repariere sie zuerst
DB Manager, mit dem Sie Ihre Datenbank reparieren und bereinigen, bevor Sie mit dem nächsten Aufzählungspunkt fortfahren
Löschen Sie alle Caches, Browser und Plugins
Deaktivieren Sie alle Plugins und löschen Sie alle Caches für eine gute Maßnahme erneut. Da dieses Problem wie ein Umleitungsproblem aussieht, würde ich wahrscheinlich zuerst alle Plugins deaktivieren, die möglicherweise etwas mit Umleitung zu tun haben. Es kann sein, dass ein Plugin noch nicht mit v4.4 kompatibel ist. Überprüfen Sie, ob das Problem weiterhin besteht. Wenn dies der Fall ist, fahren Sie mit dem nächsten Aufzählungspunkt fort. Andernfalls können Sie dies genauer untersuchen
Deaktivieren Sie zunächst alle Plugins. Sie können auch zunächst nur die Plugins deaktivieren, die für die Ursache des Problems offensichtlich sind. Testen Sie Ihre Installation nach der Aktivierung jedes einzelnen Plugins ordnungsgemäß. Das erste aktivierte Plugin, das das Problem verursacht hat, ist der Schuldige. Wenden Sie sich in diesem Fall an den Autor des Plugins, um Einzelheiten zum Debuggen zu erfahren. Stellen Sie einfach sicher, dass Sie Ihre Caches nach jeder Aktivierung des Plugins löschen, nur für eine gute Maßnahme
Wenn Sie diesen Punkt erreicht haben, hat der vorherige Aufzählungspunkt Ihr Problem nicht gelöst. Der nächste Schritt sollte darin bestehen, zu einem gebündelten Thema zu wechseln, um Ihr Thema als Problem zu beseitigen. Nur nochmal, Caches löschen.
Wenn alles fehlgeschlagen ist, stehen Ihnen zwei weitere Optionen zur Verfügung
Löschen Sie
.htaccess
und lassen Sie WordPress ein neues erstellenInstallieren Sie WordPress neu
Dies sollte Ihr Problem lösen. Wenn dies nicht der Fall ist, müssen Sie einen Fehler im WordPress-Kern berücksichtigen, der das Problem verursachen könnte.
Ich hoffe, das hilft, den Fehler zu beheben
AKTUALISIEREN
Ich hätte eigentlich auf das folgende Trac-Ticket verweisen sollen, das alles genauer zu erklären scheint
Interessante und durchaus relevante Patches aus dem obigen Trac-Ticket
https://core.trac.wordpress.org/ticket/35344#comment:16
https://core.trac.wordpress.org/ticket/35344#comment:34
Ich kann im Moment noch nichts konkret testen, aber Sie sollten die vorgeschlagenen Patches durcharbeiten und testen. Was ich herausfinden kann, ist, dass derselbe Code,
redirect_canonical()
der für die Paginierung von statischen Titelseiten verantwortlich ist, auch für die Paginierung auf einzelnen Seiten verantwortlich ist.URSPRÜNGLICHE ANTWORT
Einzelne Seiten ( wie statische Titelseiten ) werden
get_query_var( 'page' )
zum Paginieren verwendet. Mit WordPress 4.4 ( und in v4.4.1 ) ist ein Fehler aufgetreten , der Probleme mit der Paginierung bei der Verwendungget_query_var( 'page' )
für die Paginierung verursacht.In den aktuellen Fehlerberichten, wie dem Trac-Ticket Nr. 35365 , werden nur statische Titelseiten erwähnt, die Probleme mit der Paginierung haben. In Bezug auf den Fehler
get_query_var( 'page' )
würde dies jedoch zu Problemen mit der Paginierung einzelner Posts führen, die ebenfalls verwendet wirdget_query_var( 'page' )
.Sie sollten die Patches wie in den Trac-Tickets beschrieben ausprobieren. Wenn dies funktioniert, können Sie den Patch anwenden und auf v4.4.2 warten, bei dem dieser Fehler behoben ist
quelle
Beachten Sie, dass für alle drei von Ihnen angegebenen Beispiele ein Syntaxfehler vorliegt:
wo ein Extra
)
hinzugefügt wird.Ersetzen Sie diese Zeilen durch:
Ich würde generell nicht empfehlen, mit globalen Objekten herumzuspielen. Ich denke, Ihr letztes Beispiel mit dem
content_pagination
Filter ist der richtige Weg, um hier voranzukommen.Möglicherweise möchten Sie auch vermeiden, leere Seiten anzufügen mit:
Es fehlt
)
hier auch ein :quelle