2017-08-30 1 views
1

Ich arbeite derzeit an einem kleinen WP-Plugin, das einige Rewrite-Regeln enthalten sollte. Zu Testzwecken habe ich Setup die folgenden Funktionen:Hinzufügen von Rewrite-Regeln zu Wordpress-Plugin

function manufacturer_rewrite_add_var($vars) { 
    $vars[] = 'manufacturer'; 
    return $vars; 
} 
add_filter('query_vars', 'manufacturer_rewrite_add_var'); 

function add_manufacturer_rewrite_rule() { 
    add_rewrite_tag('%manufacturer%', '([^&]+)'); 
    add_rewrite_rule(
    '^manufacturer/([^/]*)/?', 
    'index.php?manufacturer=$matches[1]', 
    'top' 
); 
} 
add_action('init', 'add_manufacturer_rewrite_rule'); 

Wenn ich das Plugin aktivieren und geben Sie localhost/manufacturer/audi Ich erwarte, dass die folgenden weitergeleitet werden: localhost/index.php?manufacturer=audi. Stattdessen bleibt es auf der gleichen Seite. Was fehlt mir hier?

+0

Stellen Sie sicher, dass Sie nicht die Einstellung ** "Postname" ** in Permalinks verwenden und dass Sie sie seit der Codeänderung erneut gespeichert haben, um die Umschreibungsregeln zu löschen. – FluffyKitten

Antwort

0

Vom documentation:

Wichtig: Vergessen Sie nicht, die Regeln für das Umschreiben Datenbank nach der Änderung Regeln zu spülen und zu regenerieren. Wählen Sie in WordPress Administration Screens Einstellungen -> Permalinks und klicken Sie einfach auf Änderungen speichern, ohne Änderungen vorzunehmen.

Sie könnten versuchen, flush_rewrite_rules zu verwenden.

Das Leeren der Rewrite-Regeln ist eine teure Operation, es gibt Tutorials und Beispiele, die vorschlagen, es auf dem "Init" -Hook auszuführen. Das ist schlechte Praxis. Es sollte entweder auf dem 'Shutdown' Hook oder bei der Aktivierung von Plugins/Theme (De) ausgeführt werden.

So könnte man die Funktion register_activation_hook und register_desactivation_hook verwenden Sie es auf Plugin-Aktivierung und Deaktivierung zu spülen.

0

Nein, Sie werden nicht "umgeleitet". Es ist eine Rewrite-Regel, keine Umleitungsregel. Wordpress nimmt die passende Regex von Ihrer URL und schreibt sie intern in die 'Hersteller'-Abfrage var. Und dann können Sie den Wert "Hersteller" Ihrem Skript mit get_query_var() zugänglich machen.