WordPress: So erstellst du Rewrite Rules mit PHP

Marc Wag­ner

Juli 14, 2022

2 min read|

In Word­Press kannst du mit­tels PHP eige­ne Rewri­te­Rules erstel­len, um so indi­vi­du­el­le URLs zu gene­rie­ren. Dafür sind ledig­lich 3 Schrit­te not­wen­dig. In die­sem Arti­kel erklä­re ich, wie du unkom­pli­ziert eige­ne Rewri­te­Rules über PHP für dei­ne Word­Press Web­sei­te erstel­len kannst.

Anlegen der Rewrite Rules #

Word­Press bie­tet für das anle­gen von Rewri­te­Rules die Funk­ti­on add_rewrite_rule an.

add_rewrite_rule(string $regex, string|array $query, string $after = 'bottom');

Dadurch kön­nen wir jeder­zeit eige­ne Rewri­te Rules erzeu­gen. Wir ver­wen­den die­se Funk­ti­on, indem wir sie in unse­rer functions.php imple­men­tie­ren.

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 unse­rem Bei­spiel oben erstel­len wir nun eine neue Rewri­te Rule, die beim Auf­ruf einer URL in die­sem For­mat ‘https://meine-domain-xyz.de/job/elektriker-m‑w‑d/bewerben’ den Inhalt der Sei­te ‘https://meine-domain-xyz.de/jetzt-bewerben’ aus­gibt. Hier­für dient der Para­me­ter “page­na­me”.

Zusätz­lich tei­len wir Word­Press mit, dass der Wert zwi­schen ‘job’ und ‘bewer­ben’ als GET Para­me­ter mit der Bezeich­nung ‘job-name’ über­ge­ben wer­den soll. Damit wir die­sen Par­am­ter in Word­Press ver­wen­den kön­nen, müs­sen wir dem Sys­tem mit­tei­len, dass die­ser Para­me­ter exis­tiert.

Ein eigenes Template laden

Alter­na­tiv kannst du über dei­ne Rewri­te Rule auch ein indi­vi­du­el­les Tem­p­la­te laden. Hier­für musst du ledig­lich den Action-Hook ‘template_include’ ver­wen­den und das Tem­p­la­te, das du ver­wen­den möch­test inte­grie­ren.

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 Abfra­ge der Para­me­ter ‘job-name’ vor­kommt, das Tem­p­la­te ‘page-job-name.php’ gela­den und aus­ge­ge­ben.

Anfrage Parameter (query vars) definieren #

In der oben erstell­ten Rewri­te Rule haben wir einen neu­en Para­me­ter ‘job-name’ defi­niert. Um die­sen ver­wen­den zu kön­nen, müs­sen wir ihn jedoch zunächst bei Word­Press regis­trie­ren. Dafür ver­wen­den wir den Fil­ter ‘query_vars’ und ergän­zen das Array um unse­ren eige­nen Para­me­ter.

add_filter('query_vars', function($query_vars){
    $query_vars[] = 'job-name';
    return $query_vars;
});

Über ‘get_query_var’ kön­nen wir dann unse­ren Para­me­ter ein­fach und unkom­pli­ziert abfra­gen.

Rewrite Rules Cache leeren #

Zuletzt müs­sen wir noch den Cache für die Rewri­te Rules neu laden. Hier­für kön­nen wir ent­we­der die Funk­ti­on flush_rewrite_rules ver­wen­den, oder aber ein­fach im Word­Press Dash­board > Ein­stel­lun­gen > Per­ma­links den “Spei­chern” But­ton betä­ti­gen.

Wich­tig: Falls du dich dafür ent­schei­dest, die Funk­ti­on flush_rewrite_rules zu ver­wen­den, soll­test du dar­auf ach­ten, die­se auch wie­der zu ent­fer­nen. Ansons­ten wer­den die Rewri­te Rules bei jedem Laden dei­ner Word­Press Web­sei­te neu erzeugt und beein­träch­ti­gen die Per­for­mance dei­ner Web­sei­te.

Fazit #

Das war es auch schon. Word­Press erlaubt es dank sei­ner Modu­la­ri­tät schnell und unkom­pli­ziert eige­ne Rewri­te Rules zu defi­nie­ren, die wir auf unse­re Bedürf­nis­se anpas­sen kön­nen. Hast du bereits ein­mal eige­ne Rewri­te Rules erzeugt oder hast du wei­te­re Anre­gun­gen, dann las es uns ger­ne wis­sen.

88e86fcb816eff22bc917094df2862d8dd5c0e978b333e6dd5f36f808990c261 96

Arti­kel von:

Marc Wag­ner

Hal­lo, Marc hier. Ich bin der Grün­der von Forge12 Inter­ac­ti­ve und bereits seit über 20 Jah­ren lei­den­schaft­lich dabei Web­sei­ten, Online­shops, Anwen­dun­gen und SaaS-Lösun­gen für Unter­neh­men zu ent­wi­ckeln. Vor der Grün­dung habe ich bereits in Bör­sen notier­ten Unter­neh­men gear­bei­tet und mir aller­lei Wis­sen ange­eig­net. Die­ses Wis­sen möch­te ich nun an mei­ne Kun­den wei­ter­ge­ben.

Hast du eine Fra­ge? Hin­ter­lass bit­te einen Kom­men­tar