Ich versuche, add_rewrite_rule
einen Parameter aus der URL zu extrahieren und an die Anfrage weiterzuleiten. Ich habe eine Reihe von Posts darüber gesehen, aber es scheint nicht zu funktionieren.
Wenn eine URL mit einer bestimmten Zeichenfolge beginnt, möchte ich sie aus der URL entfernen und als Abfrageparameter übergeben.
Beispielanforderungs-URL:
http://domain.com/foo/my_page
Dies würde sich verwandeln in
http://domain.com/my_page?param=foo
Wenn 'foo' nicht vorhanden ist, sollte es nur als normale Anfrage durchlaufen werden. Diese Logik sollte für jede Seiten-URL oder benutzerdefinierte Post-Typ-URL auf meiner Website gelten (im Grunde foo / *). Ich denke, es würde wie ein Durchgang wirken, wenn die URL 'foo' entfernt und dann einfach an Wordpress weitergegeben wird, um es normal zu machen.
Ich habe bereits 'param' als zulässige query_vars.
Insgesamt müsste es für Folgendes funktionieren:
- / foo / my_page (Seite)
- / foo / my_folder / my_page (Unterseite)
- / foo / example_type (Benutzerdefiniertes Post-Archiv)
- / foo / example_type / example_post (Benutzerdefinierte Post Single)
quelle
page
Beitragstyp oder nur eine Seite? Was ist mit übergeordneten / untergeordneten Seiten in der Hierarchie?Antworten:
Eine Grundregel, die für Ihr Beispiel funktionieren würde:
Dies nimmt alles, was danach kommt,
foo/
und setzt das wiepagename
für die Abfrage undparam
erhält dann den statischen Wertfoo
. Wenn Sie unterschiedliche URL-Muster benötigen, benötigen Sie zusätzliche Regeln für jedes eindeutige Muster. In denWP_Query
Dokumenten finden Sie die verschiedenen Abfragevariablen, die innerhalb der Umschreiberegeln festgelegt werden können. Vergessen Sie nicht, die Umschreiberegeln nach dem Hinzufügen neuer Regeln zu löschen. Dies kann durch Aufrufen der Seite Permalinks-Einstellungen erfolgen.Besuchen Sie jetzt Ihre Beispiel-URL:
lädt die richtige Seite, verhält sich aber nicht genau wie ein Besuch:
Denn bei Verwendung interner Umschreibungen
param
wird innerhalb des$wp_query
Abfrageobjekts nicht das$_GET
Superglobal festgelegt. Wenn Sie mit Code arbeiten müssen, der nach einem Wert in sucht$_GET
, benötigen Sie einen zusätzlichen Schritt, um diesen Wert festzulegen:Eine andere zu berücksichtigende Methode ist die Verwendung von Endpunkten,
/foo/
die sich eher am Ende von URLs als als Präfix befinden. Dies hat den Vorteil, dass die APIs dasadd_rewrite_endpoint
Hinzufügen aller benötigten Regeln vereinfachen, einschließlich der Aktivierung der Paginierung.quelle
Ok, ich habe Arbeitsbeispiele für alle drei Arten von Anfragen erhalten. Es dauerte eine Menge Experimentieren und Herumspielen, um sie zum Laufen zu bringen. Ich denke, Milo ist gut darin, Leute dazu zu bringen, ihre eigenen Fragen zu beantworten.
Nach unzähligen Änderungen und dem Aktualisieren der Permalinks wurde mir klar, dass es viel einfacher war, die URLs außerhalb von add_rewrite_url herauszufinden, und sobald sie funktionierten, definieren Sie das Umschreiben. Beispiel dafür
index.php?param=foo&post_type=example_type
.Eine andere offensichtliche Sache, aber fügen Sie es hier hinzu, damit es jemand anderem helfen kann. Sie müssen die Regeln für den benutzerdefinierten Beitragstyp add_rewrite_rule definieren, bevor Sie die Platzhalterregeln für Seiten / Unterseiten definieren. Ich habe ziemlich viel Zeit damit verschwendet und denke, es ist die Hauptsache, die mich dazu gebracht hat, nicht zu verstehen, warum die Regeln nicht funktionierten.
Hier sind die 3 Regeln, die für alle meine Bedürfnisse gelten. Die Seiten- / Unterseitenregel wurde zu einer einzigen zusammengefasst.
Außerdem habe ich eine Schleife eingerichtet, um mehrere benutzerdefinierte Regeln für Post-Typen hinzuzufügen. Denken Sie daran, dass Sie die benutzerdefinierten Regeln für den Beitragstyp add_rewrite_rule definieren müssen, bevor Sie die Platzhalterregeln für Seiten / Unterseiten definieren.
Der Rewrite Analyzer, den Milo weitergegeben hat, war sehr hilfreich, um besser zu verstehen, wie Wordpress Seiten / Beiträge abfragt.
quelle