Jörg Kruse Webprogrammierung
und SEO seit 2005
☰ Menü

URL-Rewrite in WordPress

aktualisiert:

Während die URLs von Webseiten außerhalb von WordPress in der .htaccess Datei mithilfe von mod_rewrite suchmaschinenfreundlich umgeschrieben werden können, ist dies bei Webseiten, die durch WordPress erzeugt werden, so nicht möglich. Der Grund dafür ist, dass WordPress die URLs intern rewritet und die Regeln hierzu in der Datenbank ablegt. Diese Regeln lassen sich aber durchaus in einem eigenen Theme oder Plugin erweitern.

Möchte man eine URL https://example.org/abc/xyz/42/ server-intern auf die URL https://example.org/abc/?xyz=42 umleiten, wobei die Zahl 42 hier variabel sein soll, so gelingt dies außerhalb von WordPress mit mod_rewrite in der .htaccess Datei klassischerweise so:


RewriteEngine on
RewriteRule ^abc/xyz/([0-9]+)/?$ /abc/?xyz=$1 [L]

In der Datei /abc/index.php könnte dann z.B. folgendermaßen auf die Variable xyz zugegriffen werden:


$xyz = (int) $_GET['xyz'];

Innerhalb von WordPress legt man dagegen im Theme (in der Datei functions.php) oder in einem Plugin mit der Funktion add_rewrite_rule() eine entsprechende Regel an:


add_action('init', function () {
    add_rewrite_rule(
        '^abc/xyz/([0-9]+)/?',
        'index.php?pagename=abc&xyz=$matches[1]',
        'top'
    );
});

Der Parameter ‚xyz‘ muss hierbei WordPress noch bekannt gemacht werden:


add_filter('query_vars', function ($query_vars) {
    $query_vars[] = 'xyz';
    return $query_vars;
});

Damit die Regel wirksam wird, müssen die Permalinks einmal neu abgespeichert werden, im Dashboard unter Einstellungen -> Permalinks -> Änderungen speichern

Im Theme bzw. Plugin kann dann folgendermaßen auf die Variable xyz zugegriffen werden:


global $wp_query;
$xyz = (int) $wp_query->query_vars['xyz'];