URLs in WordPress umschreiben

10. März 2022, Tags:

Auf meinen WordPress-Seiten nutze ich eigene Module, die ich meist direkt in meine Themes einbinde. Diese Module übergeben in Links natürlich Werte als Parameter. Die Übersichtsseite Know-How zum Beispiel übergibt die Auswahl der Tags (zum Beispiel: #Wordpress) in meinem Modul über die tatsächliche URL https://blog.gestreift.net/know-how/?knowhow_tags=wordpress. Das kann man so machen. Nur ist es dann ganz und gar nicht SEO-freundlich. Suchmaschinen wünschen sich zum Indizieren eher eine URL wie https://blog.gestreift.net/knowhow_tags/wordpress/. Ich habe beides verlinkt und beides funktioniert. Willst Du URLs in WordPress umschreiben,  dann lies weiter 🙃.

URLS umschreiben: der ‚mod_rewrite‘-Weg

Gleich vorweg: Diesen Weg empfehle ich nicht 🙃. Aber es ist für viele Webserver der Standardweg: Nutzt man den Apache-Webserver, so kann man dort das Modul ‚mod_rewrite‘ aktivieren. Im Basisverzeichnis meiner Website würde ich dann die Datei .htaccess (PUNKT htaccess 😉) anlegen. Sofern das Modul aktiv ist, kann man darin dann sogenannte RewriteRules anlegen. Ganze Webseiten wie zum Beispiel der kostenfreie ModRewrite Generator von Webcellent beschäftigen sich damit. Das eingangs erwähnte Beispiel wird dann zu:

Mit regulären Ausdrücken könnte man das noch verallgemeinern und gewiss gänge das alles. Aber …

Warum man das nicht machen sollte

Es gibt Gründe, die dagegen sprechen. Zum Einen gibt es verschiedenste Webserver, die von den verschiedensten Hostern eingesetzt werden. Manche aktivieren das mod_rewrite-Modul auch nicht. Es ist in jedem Fall auch nicht so richtig eingänglich und leicht zu verwalten. Und nicht zuletzt müsste diese Datei immer parallel und jenseits des eigentlichen WordPress gepflegt werden. Das ist ja nicht wirklich im Sinne eines CMS.

URLs in WordPress umschreiben

WordPress bietet mit den Funktionen add_rewrite_tag() und add_rewrite_rule() komfortable Möglichkeiten, um URLs in WordPress umschreiben zu können. Mit der ersten Funktion registriert man „seine“ Variable, so dass WordPress diese kennt und auch über die Funktion get_query_var() abrufen kann. In meinem Fall registriere ich die Variable %knowhow_tags%. Dann definiere ich, dass knowhow-tags/XYZ/ auf knowhow_tags=XYZ umgeschrieben wird. Hierzu nutze ich den regulären Ausdruck ([^/]+), der auf alle Zeichen die nicht das abschließende Slash (‚/‘) sind reagiert und dieses in der Variable $matches speichert. Weil es der erste Fund ist, steht dahinter eine [1]. In meiner functions.php landet dann folgender Code:

Die letzte Zeile fügt die Funktion rewrite_my_url() in den init-Lauf mit der Priorität 10 (normal) ein. Spannend ist vielleicht noch die globale Variable $wp_rewrite, deren Funktion flush_rules() ich am Ende der Funktion aufrufe. Damit lasse ich die Regeln einmal aktualisieren. Das könnte ich mir auch sparen und schlicht im Backend Einstellungen -> Permalinks aufrufen und ohne Änderungen auf ‚Speichern‘ klicken. Aber mit dieser Funktion spare ich mir das bei Änderungen und muss nicht daran denken 🙃.

Test auf der Kommandozeile

Da ich mich per SSH auf meinem Webserver anmelden kann und mein Provider das WordPress-Kommando ‚wp‘ anbietet, kann ich dieses mit dem passenden Parameter aufrufen: wp rewrite list –source=other. In der nun ausgegebenen Liste taucht meine Regeln auf:

Die Parameter in WordPress nutzen

Aus alter PHP-Manier nutze ich hin und wieder noch die $_POST- und $_GET-Variablen, um übergebene Parameter zu lesen. Im Sinne von WordPress ist das nicht und mit den hier  beschriebenen Parametern funktioniert es auch nicht. Um meine knowhow_tags abzurufen, nutze ich die Funktion get_query_var(). Das ist total einfach:

 

Keine Antworten

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.