Der grundlegende Unterschied ist:
- Das
add_rewrite_rule()
fügt eine bestimmte Regel hinzu, die interpretiert wird
- Das
add_rewrite_tag()
fügt einen Platzhalter hinzu , der in URL-Strukturen verwendet werden soll. Dieser Platzhalter wird dann verwendet, um mehrere Regeln zu generieren.
Angenommen, Sie sind ein Reisebüro, das Hotels in verschiedenen Ländern bewirbt. Vielleicht möchten Sie, dass die URL eines Hotels so aussieht
www.example.com/hotels/UK/Balmoral
Wo das Land (UK in diesem Beispiel) ein benutzerdefinierter Taxomony-Begriff ist und Balmoral ein Hotel (Post-Typ). Wir könnten dazu Umschreiberegeln hinzufügen, müssten dann aber eine Regel generieren für:
- das hotel selbst
- die Anhänge des Hotels
- Eine Regel für Hotels (Posts), bei denen es sich über mehrere Seiten usw. erstreckt.
Das Generieren dieser Regeln kann kompliziert werden. Darüber hinaus werden wir wahrscheinlich mit den WordPress-eigenen Regeln für diesen Beitragstyp konkurrieren - generiert aus der Permastruktur, die wir bei der Registrierung des Beitragstyps festgelegt haben. (In jedem Fall lassen Sie WordPress die Arbeit erledigen).
Diese 'Permastruktur' - ähnlich wie Sie sie für Posts in den Permalink-Einstellungen festgelegt haben - bestimmt die Umschreiberegeln, die WordPress generiert. Aber da wir eine Struktur wollen, die etwas Unbekanntes (das Land) enthält - was wir interpretieren wollen - müssen wir einen Platzhalter für das Formular bereitstellen %country%
. (Es ist fast identisch mit %category%
für Beiträge).
Beispielsweise:
add_action_init('init','wpse71305_register_types');
function wpse71305_register_types(){
//You'll need to register the country taxonomy here too.
//Add 'country' tag.
add_rewrite_tag('%country%', '([^&/]+)'));
//Register hotel post type with %country$ tag
$args = array(
...
'has_archive'=>true,
'rewrite' => array(
'slug'=>'hotels/%country%',
'with_front'=> false,
'feed'=> true,
'pages'=> true
)
...
);
register_post_type('hotel',$args);
}
Hinweis: WordPress weiß nicht, wie man die URL aus dem %country%
Tag generiert - Sie müssen ihm sagen, dass es das tun soll. (Ich beschreibe dies in einem Artikel, auf den ich unten verlinkt habe).
Schließlich speichert WordPress auch den übereinstimmenden Wert, über den Sie ihn abrufen können get_query_var()
(etwas, das Sie mit einer Standard-Umschreiberegel nicht tun).
Sie können auch Tags erstellen, die in der Permastruktur von Posts verwendet werden sollen (auf der Seite mit den Permalink-Einstellungen festlegen).
Durch Hinzufügen eines Tags können wir es in Permastrukturen verwenden. WordPress weiß es dann
- Was zu erwarten ist
- Wie wird die URL interpretiert?
- Wie ist der Wert zu interpretieren?
(Als Referenz siehe diesen Artikel, den ich geschrieben habe: http://wp.tutsplus.com/tutorials/creative-coding/the-rewrite-api-the-basics/ ).
Bearbeiten
Wie in den Kommentaren erwähnt, ist das obige Beispiel ein schlechter register_taxonomy()
Anruf add_rewrite_tag()
.
In Bezug auf die Codex-Dokumentation zur kombinierten Verwendung ist dies möglicherweise irreführend, da beide unabhängig voneinander verwendet werden können. Wie oben erwähnt, wird add_rewrite_tag()
der Tag-Name jedoch zu den WordPress-verständlichen "Abfragevariablen" hinzugefügt. In der Praxis können Sie den Wert mit abrufen get_query_var()
. Wenn add_rewrite_rule()
also mit verwendet wird add_rewrite_tag()
, wird die Variable von WordPress gespeichert. Es gibt aber auch andere Möglichkeiten, dies zu tun (siehe diese Antwort - beachten Sie auch Rob Vermeers Kommentar).
Außerdem: Wie kann man $ _GET-Variablen von umgeschriebenen URLs abrufen?
add_rewrite_tag()
dass Platzhalter für die Verwendung in verwendet werden könnenSettings->Permalinks
. Ist die Verwendung einer Taxonomie eine Voraussetzung für die Verwendungadd_rewrite_tag()
? Mein Eindruck von der Codex-Seite ist, dass es nicht so ist, aber es scheint allgemein verwendet zu werden. Ich habe meine Frage bezüglich der Verwendungadd_rewrite_tag()
in Verbindung mit erweitert,add_rewrite_rule()
wie auf der Codex-Seite vorgeschlagen .register_taxonomy()
. Ein besseres Beispiel wäre, wenn Sie etwas wie verwenden möchten,%country%
aber wenn country nur eine häufig verwendete Abfragevariable und keine Taxonomie ist. Diese Fälle sind selten - ich musste sie nie verwendenadd_rewrite_tag()
.