Ich habe eine statische Startseite für mein WP-Installationsset von settings > reading
. Dann habe ich mit einen URL-Endpunkt hinzugefügt.
add_rewrite_endpoint('foo', EP_ALL);
Die Titelseite sollte also über zugänglich sein
http://example.com/
http://example.com/foo
http://example.com/foo/bar
Für # 1 funktioniert alles einwandfrei, aber für # 2 und # 3 home.php
wird anstelle der statischen Homepage die Standardeinstellung angezeigt. Lokal in Einzel- und Multisite-Installation getestet.
Ist es ein gewünschtes Verhalten oder treffe ich etwas Ungewöhnliches? Noch wichtiger ist, wie kann ich WP dazu bringen, die statische Homepage unter den gegebenen Bedingungen anzuzeigen?
Lösung
Ich habe mich bereits eingehakt parse_request
, um einen Teil des Codes zu verarbeiten, falls foo
vorhanden. Also, gemäß der Lösung von @ gmazzap. Ich muss es erst danach deaktivieren. Es ist keine zusätzliche Hakenfunktion erforderlich, um den Fehler zu umgehen.
add_action('parse_request', function(&wp){
$key = 'foo';
if (!array_key_exists( $key, $wp->query_vars ) ) {
return;
}
// do things when foo exists
// we no longer need 'foo'
unset($wp->query_vars[$key]);
});
quelle
Antworten:
Vielleicht habe ich das nicht sehr gut verstanden, aber wenn Sie nur
'foo'
aus der Abfrage entfernen müssen, wäre es nicht viel einfacher, den'request'
Filter zu verwenden und die Variable von dort zu entfernen?Code benötigt:
Es:
$wp
Objekt$wp_query
, sodass die Abfrage nicht von dort entfernt werden mussBearbeiten:
Ein Problem dieses Codes besteht darin, dass er sehr früh ausgeführt wird, so dass es schwierig ist, das Vorhandensein der Abfragevariablen zu erfassen und etwas basierend auf ihrem Vorhandensein / Wert zu tun.
Eine Lösung kann darin bestehen, die Bedingungen auf demselben
'request'
Filter auszuführen , kurz bevor die Abfragevariable entfernt wird (z. B. mit demselben Hook mit höherer Priorität).Eine andere Lösung kann darin bestehen, dem
$wp
Objekt ein Flag hinzuzufügen :Danach wäre es möglich, die Variable 'foo' in jedem Hook zu überprüfen, der danach ausgelöst
'request'
wird'parse_request'
Der letzte ist
'shutdown'
:quelle
foo
von$wp->query_vars
aufparse_request
Action? Ich führe bedingten Code aus,parse_request
wennfoo
vorhanden.'request'
Haken zuvor ausgelöst'parse_request'
. Sie können Ihre Bedingung in denrequest
Hook verschieben oder'parse_request'
zum Entfernen der Variablen verwenden, nachdem Sie etwas basierend auf der'foo'
Präsenz getan haben . Ich habe auch das A bearbeitet, um einen dritten Ansatz aufzunehmen.parse_request
. Das Entfernenfoo
aus der Abfrage var, nachdem ich damit fertig bin, erscheint angemessener. Ich braucheunset($wp->query_vars['foo']);
nur kurz bevor ich meine Hook-Funktion in beendeparse_request
. Vielen Dank für Ihre Hilfe.Dies ist ein Fehler 25143, wie @toscho hervorhob und in 4.3 behoben wird
Problemumgehung Im Ticket gefunden und ein wenig geändert
WordPress fügt
foo
als Abfragevariable hinzu , die das Problem verursacht. Wir müssen es also entfernen, bevor WP die Datenbank abfragtquelle