webentwicklung-frage-antwort-db.com.de

Hübsche URL mit add_query_var

Ich versuche, jedem Beitrag auf meiner Website einen "Unterbeitrag" hinzuzufügen, z

site.com/product-one/changelog site.com/product-two/changelog site.com/product-three/changelog

Dies ist der Code, den ich mit atm verwende, den ich hier irgendwo gefunden habe:

global $wp,$wp_rewrite;
$wp->add_query_var('sub-page');
$wp_rewrite->add_rule('([^/]+)/(changelog)','index.php?pagename=$matches[1]&sub-page=$matches[2]', 'top');
$wp_rewrite->flush_rules(false);  // This should really be done in a plugin activation

Dies funktioniert gut, wenn ich zu site.com/product-one?sub-page=changelog navigiere, aber wenn ich zu site.com/product-one/changelog gehe, werde ich einfach zurück zu site.com/product-one geleitet

Deshalb habe ich die kanonische Weiterleitung als Test deaktiviert:

remove_filter('template_redirect', 'redirect_canonical'); 

site.com/product-one/changelog leitet dann nicht um, sondern gibt 404 zurück, und site.com/product-one?sub-page=changelog funktioniert weiterhin.

Gibt es etwas, das ich durch mein Umschreiben ändern kann, damit dies funktioniert?

Hinweis: Ich weiß, dass ich dies mit benutzerdefinierten Beitragstypen leicht tun kann, und habe begonnen, diesen Weg zu beschreiten. Da die Site jedoch bereits die% postname% -Permalink-Struktur verwendet, kann ich den benutzerdefinierten Beitragstyp dann nicht mehr verwenden diese Struktur sowie die Seiten der Websites.

4
Adam Dempsey
add_rewrite_endpoint( 'changelog', EP_ROOT ); 

Fügt den Endpunkt changelog hinzu, den Sie dann am Hook template_redirect überprüfen können.

Bei Übereinstimmung sollte das Array der Abfragevariablen ($wp_query->query) den Schlüssel changelog enthalten, der alles enthält, was nach dem Wert für / in steht. Für URL example.com/product1/changelog/5 hätten Sie also eine Abfragevariable namens changelog mit dem Wert 5.

Wenn hinter dem Endpunkt nichts steht, ist die Variable vorhanden, enthält jedoch eine leere Zeichenfolge. Beachten Sie, dass get_query_var() für eine solche Verwendung nicht funktioniert, da es hartcodiert ist, eine leere Zeichenfolge zurückzugeben, wenn die Abfragevariable überhaupt nicht festgelegt ist.

Es kann ausreichen, einfach zu überprüfen, ob eine Variable vorhanden ist, und in diesem Fall die Abfragevariablen in den Abfrage-Hooks (wie z. B. pre_get_posts) zu ändern und Ihren eigenen Unterbeitrag mit der Changelog-Vorlage zu laden.

Möglicherweise möchten Sie auch mit verschiedenen Permalink-Endpunktmasken experimentieren, z. EP_PAGES

Verweise:

6
Tom J Nowell