WordPress: So erstellst du Rewrite Rules mit PHP
Marc Wagner
Juli 14, 2022
In WordPress kannst du mittels PHP eigene RewriteRules erstellen, um so individuelle URLs zu generieren. Dafür sind lediglich 3 Schritte notwendig. In diesem Artikel erkläre ich, wie du unkompliziert eigene RewriteRules über PHP für deine WordPress Webseite erstellen kannst.
Anlegen der Rewrite Rules #
WordPress bietet für das anlegen von RewriteRules die Funktion add_rewrite_rule an.
add_rewrite_rule(string $regex, string|array $query, string $after = 'bottom');
Dadurch können wir jederzeit eigene Rewrite Rules erzeugen. Wir verwenden diese Funktion, indem wir sie in unserer functions.php implementieren.
Inhalte einer anderen Seite laden
add_action('init', function(){
add_rewrite_rule('job/([a-zA-Z0-9\-]+)/bewerben', 'index.php?pagename=jetzt-bewerben&job-name=$matches[1]','top');
});
In unserem Beispiel oben erstellen wir nun eine neue Rewrite Rule, die beim Aufruf einer URL in diesem Format ‘https://meine-domain-xyz.de/job/elektriker-m‑w‑d/bewerben’ den Inhalt der Seite ‘https://meine-domain-xyz.de/jetzt-bewerben’ ausgibt. Hierfür dient der Parameter “pagename”.
Zusätzlich teilen wir WordPress mit, dass der Wert zwischen ‘job’ und ‘bewerben’ als GET Parameter mit der Bezeichnung ‘job-name’ übergeben werden soll. Damit wir diesen Paramter in WordPress verwenden können, müssen wir dem System mitteilen, dass dieser Parameter existiert.
Ein eigenes Template laden
Alternativ kannst du über deine Rewrite Rule auch ein individuelles Template laden. Hierfür musst du lediglich den Action-Hook ‘template_include’ verwenden und das Template, das du verwenden möchtest integrieren.
add_action( 'template_include', function( $template ) {
if ( false == get_query_var( 'job-name' ) || '' == get_query_var( 'job-name' )) {
return $template;
}
return get_template_directory() . '/page-job-name.php';
});
Jetzt wird immer dann, wenn in der Abfrage der Parameter ‘job-name’ vorkommt, das Template ‘page-job-name.php’ geladen und ausgegeben.
Anfrage Parameter (query vars) definieren #
In der oben erstellten Rewrite Rule haben wir einen neuen Parameter ‘job-name’ definiert. Um diesen verwenden zu können, müssen wir ihn jedoch zunächst bei WordPress registrieren. Dafür verwenden wir den Filter ‘query_vars’ und ergänzen das Array um unseren eigenen Parameter.
add_filter('query_vars', function($query_vars){
$query_vars[] = 'job-name';
return $query_vars;
});
Über ‘get_query_var’ können wir dann unseren Parameter einfach und unkompliziert abfragen.
Rewrite Rules Cache leeren #
Zuletzt müssen wir noch den Cache für die Rewrite Rules neu laden. Hierfür können wir entweder die Funktion flush_rewrite_rules verwenden, oder aber einfach im WordPress Dashboard > Einstellungen > Permalinks den “Speichern” Button betätigen.
Wichtig: Falls du dich dafür entscheidest, die Funktion flush_rewrite_rules zu verwenden, solltest du darauf achten, diese auch wieder zu entfernen. Ansonsten werden die Rewrite Rules bei jedem Laden deiner WordPress Webseite neu erzeugt und beeinträchtigen die Performance deiner Webseite.
Fazit #
Das war es auch schon. WordPress erlaubt es dank seiner Modularität schnell und unkompliziert eigene Rewrite Rules zu definieren, die wir auf unsere Bedürfnisse anpassen können. Hast du bereits einmal eigene Rewrite Rules erzeugt oder hast du weitere Anregungen, dann las es uns gerne wissen.
Artikel von:
Marc Wagner
Hallo, Marc hier. Ich bin der Gründer von Forge12 Interactive und bereits seit über 20 Jahren leidenschaftlich dabei Webseiten, Onlineshops, Anwendungen und SaaS-Lösungen für Unternehmen zu entwickeln. Vor der Gründung habe ich bereits in Börsen notierten Unternehmen gearbeitet und mir allerlei Wissen angeeignet. Dieses Wissen möchte ich nun an meine Kunden weitergeben.