Dies ist Teil zwei einer Serie, die sich mit der Rewrite-API von WordPress befasst. Im ersten Teil haben wir eine Pfeifenstopp-Tour durch die Grundlagen der Rewrite-API von WordPress gemacht. In diesem Tutorial werden wir uns die Einstellungen für das Umschreiben ansehen, die uns zur Verfügung stehen, wenn Sie einen Beitragstyp oder eine Taxonomie registrieren. Während benutzerdefinierte Posttypen und Taxonomien (im Gegensatz zu den Standardposts, Kategorien und Tags) nicht von Einstellungen -> Permalink-Benutzeroberfläche profitieren, ist das Einrichten von Überschreibungen für benutzerdefinierte Typen immer noch recht unkompliziert. Wir werden auch die im ersten Teil eingeführten Methoden verwenden. Wenn Sie dies noch nicht getan haben, empfehle ich Ihnen, die Rewrite-API von Teil 1: Grundlagen zu lesen.
Wenn Sie einen benutzerdefinierten Typ registrieren, registriert WordPress auch Regeln zum Umschreiben (eigentlich, nicht ganz, und ich erkläre warum im Abschnitt "Permastrukturen". Wie bereits in Teil 1 erwähnt, werden diese Regeln nur aufgenommen, wenn die Umschreiberegeln "geleert" werden. Themes und Plug-Ins können dieses 'Flushing' durch Aufruf erzwingen flush_rewrite_rules ()
. Dies muss und sollte nur einmal bei der Aktivierung und dann bei der Deaktivierung erfolgen (zum Aufräumen nach dem Aufräumen).
Bevor Sie die Regeln zum Umschreiben leeren, müssen Sie sie natürlich hinzugefügt haben. Jedoch die drin
Wenn Sie festlegen möchten, welche Beitragstypen registriert werden sollen, wurde bereits gefeuert, und als dies der Fall war, war Ihr Plug-In oder Thema noch nicht aktiv, sodass Ihre Beitragstypen und Taxonomien noch nicht registriert sind. Um die mit Ihren Beitragstypen und Taxonomien gelieferten Umschreiberegeln zu registrieren, müssen Sie sie bei der Aktivierung manuell registrieren, bevor Sie die Umschreiberegel leeren. Also sollte dies Ihr Aufbau sein:
function wptuts_register_types () // Funktion, die Ihren benutzerdefinierten Beitragstyp und Ihre Taxonomien registriert add_action ('init', 'wptuts_register_types'); function wptuts_plugin_activation () // Registrieren Sie Typen, um die Umschreiberegeln zu registrieren. wptuts_register_types (); // dann spülen sie flush_rewrite_rules (); register_activation_hook (__FILE__, 'wptuts_plugin_activation'); Funktion wptuts_plugin_deactivation () flush_rewrite_rules (); register_activation_hook (__FILE__, 'wptuts_plugin_activation');
Themen können die Haken verwenden after_switch_theme
zur Aktivierung und switch_theme
zur Deaktivierung.
Wenn Sie einen Beitragstyp mit registrieren register_post_type
Eines der verfügbaren Argumente ist das Umschreibungsargument. Dies sollte ein Array mit den folgenden Schlüsseln sein:
Schnecke
- ein Slug, mit dem der Beitragstyp in URLs identifiziert wird. Der Posten des Postens wird hieran angehängt, um die Post des Postens zu erhalten, z. www.example.com/Bücher/der Zauberer von Oz
mit_front
- richtig oder falsch. Wenn die Permalink-Struktur Ihres Beitrags mit einer konstanten Basis beginnt, z. B. "/ blog" - kann dies auch zur Permalink-Struktur Ihres benutzerdefinierten Posttyps hinzugefügt werden, indem Sie ihn auf true setzen, z. wahr wird geben www.example.com/blog/books/
und falsch www.example.com/books/
Einspeisungen
- richtig oder falsch. Ob Feed-Überschreibregeln erzeugt werden sollen, z. www.example.com/books/feed/rss
und www.example.com/book/rss
. Der Standardwert ist der Wert von has_archive
.Seiten
- richtig oder falsch. Ob eine Regel für eine "hübsche" Paginierung für das Archiv des Nachtyps erzeugt werden soll, z. www.example.com/books/page/2
anstatt www.example.com/books?page=2
. Der Standardwert ist "true".ep_mask
- Dies war früher ein separates Argument: permalink_epmask
. Ab 3.4 wird es in das Umschreibungsfeld verschoben. Der Standardwert ist EP_PERMALINK
.Die Tasten "Feeds" und "Pages" beziehen sich nur auf die Archivseite des Post-Typs (für die Sie die festlegen müssen.) has_archive
Argument auf wahr). Von diesem Umschreibungsarray aus übernimmt WordPress die Generierung der Umschreiberegeln für Ihre Beitragstypen automatisch. Als Beispiel:
$ labels = array ('name' => __ ('Books', 'your-plugins-translation-domain'), // Array von Labels); $ args = array ('labels' => $ labels, 'has_archive' => true, 'umschreiben' => array ('slug' => 'books', 'with_front' => false, 'feed' => true, 'pages' => true)); register_post_type ('book', $ args);
Würde die folgenden Regeln zum Umschreiben geben:
der Zauberer von Oz
': www.example.com/books/the-wizard-of-oz
www.example.com/books
(und www.example.com/books/page/2
)www.example.com/books/feed/rss
(und www.example.com/books/rss
)Das register_taxonomy ()
Funktion bietet weniger Optionen:
Schnecke
- ein Slug zum Identifizieren der Taxonomie, z. www.example.com/Genre/Geschichte
mit_front
- Wie oben.hierarchisch
- richtig oder falsch. Wenn true festgelegt ist und die Taxonomie hierarchisch ist, spiegelt der Begriff Permalink die Hierarchie wider. Der Standardwert ist "false".ep_mask
- Hinzugefügt in 3.4. Siehe den Abschnitt "EP-Maske".Die ersten beiden Optionen sind ähnlich wie oben. Die hierarchische Option gibt dem Begriff Permalinks die gleiche Struktur wie Seiten. Lassen Sie beispielsweise "History" ein Genre und "Military History" ein Unter-Genre sein. Wenn die Hierarchie auf "false" gesetzt ist, hat 'Military History' den Permalink:
www.example.com/genre/military-history
Wenn dies auf true gesetzt ist, wird es Folgendes haben:
www.example.com/genre/military/military-history
Durch das Registrieren einer Taxonomie werden die Feeds Ihrer Taxonomie-Begriffe automatisch registriert:
www.example.com/genre/military-history/feed
Sie können den Feed-Link-Permalink zu jedem Taxonomiebegriff mit erhalten
$ feed_link = get_term_feed_link ($ term_id, $ taxonomy, $ feed)
Standardmäßig erzeugt WordPress keine "hübschen" Permalinks für das Jahr, den Monat oder den Tag Ihres benutzerdefinierten Beitragstyps (auch nicht für das Autorenarchiv - aber wir lassen diese vorerst). Während:
www.example.com/?post_type=book&year=2012&monthnum=05
Gibt korrekt ein Archiv aller im Mai 2012 veröffentlichten Bücher ab:
www.example.com/books/2012/05
Gibt einen 404-Fehler aus. Wir können jedoch einfach zusätzliche Umschreibungsregeln hinzufügen, indem Sie die verfügbaren Umschreibungs-API-Methoden verwenden, die wir in Teil 1 behandelt haben. Eine Methode besteht darin, die folgende Liste der Umschreiberegeln hinzuzufügen, wenn Sie Ihren Beitragstyp registrieren:
// Tagesarchiv hinzufügen (und Paginierung) add_rewrite_rule ("books / ([0-9] 4) / ([0-9] 2) / ([0-9] 2) / page /? ([0-9] 1,) /? ", 'Index.php? Post_type = Buch & Jahr = $ Matches [1] & monthnum = $ Matches [2] & Tag = $ Matches [3] & paged = $ Matches [4] ','oben'); add_rewrite_rule ("books / ([0-9] 4) / ([0-9] 2) / ([0-9] 2) /?", 'index.php? post_type = book & year = $ Matches [1] & monthnum = $ Matches [2] & Tag = $ Matches [3] ',' top '); // Monatsarchiv (und Seitenumbruch) hinzufügen add_rewrite_rule ("books / ([0-9] 4) / ([0-9] 2) / page /? ([0-9] 1,) /?",'index.php?post_type=book&year=$matches[1 <&monthnum=$matches[2?&paged=$matches[3 ?,'top '); add_rewrite_rule ("books / ([0-9] 4) / ([0-9] 2) /?", 'index.php? post_type = book & year = $ passt [1] & monthnum = $ passt [2 ]','oben'); // Jahresarchiv (und Seitenumbruch) hinzufügen add_rewrite_rule ("books / ([0-9] 4) / page /? ([0-9] 1,) /?", 'Index.php? Post_type = Buch & Jahr = $ Matches [1] & paged = $ Matches [2] ',' top '); add_rewrite_rule ("books / ([0-9] 4) /?", 'index.php? post_type = book & year = $ match [1]', 'top');
Dies kann leicht unübersichtlich werden - vor allem, wenn Sie der Meinung sind, dass Sie zusätzliche Regeln hinzufügen müssen, wenn Ihre Archive hübsche URLs für ihre Feeds unterstützen sollen. Das Obige veranschaulicht jedoch eine wichtige Tatsache beim Hinzufügen benutzerdefinierter Regeln: Die Reihenfolge, in der die Regeln hinzugefügt werden, ist wichtig.
Erinnern Sie sich daran, dass diese Regeln in der Reihenfolge, in der Sie den Aufruf ausführen, zum Umschreibungsarray hinzugefügt werden add_rewrite_rule
. Beim Analysieren einer Anfrage verwendet WordPress die zuerst übereinstimmende Regel. Wechseln Sie die Reihenfolge, in der die Archivregeln für Jahr und Monat hinzugefügt werden. Das wirst du finden www.example.com/books/2012/04/
bringt Sie zum Archiv 2012. Dies liegt daran, dass die URL mit den Mustern für das Jahres- und Monatsarchiv übereinstimmt. Das erste wurde jedoch zuerst hinzugefügt. Denken Sie daran, immer zuerst die spezifischere Regel hinzuzufügen.
Wenn Sie dagegen eine Umschreibungsregel hinzufügen, deren Regex in der Regel bereits vorhanden ist, wird diese Regel durch die neue überschrieben.
Es gibt einen einfachen Weg, um das oben genannte zu erreichen: add_permastruct
. Diese Funktion wird von WordPress verwendet, um 'Permastrukturen' zu erstellen, aus denen Regeln (wie oben beschrieben) erstellt werden, die Seitenumbrüche und Feeds behandeln. Wenn Sie einen benutzerdefinierten Beitragstyp registrieren, erstellt WordPress nicht automatisch alle Umschreiberegeln. Stattdessen registriert es eine Permastruktur. Nur wenn die Regeln generiert werden (d. H. Wenn sie geleert werden), verwendet WordPress diese Permastrukturen, um die eigentlichen Umschreibregeln zu generieren.
Ein Beispiel für eine Permastruktur ist diejenige, die Sie in Einstellungen -> Permalinks verwenden. Diese akzeptieren alle 'fest codierten' Slugs oder alle Tags, die standardmäßig vorhanden sind oder mit hinzugefügt wurden add_rewrite_tag
, die wir im ersten Teil behandelt haben. Zum Beispiel die Permastruktur % year% /% category% /% author%
würde die folgenden Umschreibungsregeln generieren:
www.example.com/2012/url-rewriting/stephen
www.example.com/2012/url-rewriting/stephen/page/2
www.example.com/2012/url-rewriting/stephen/feed/rss
www.example.com/2012/url-rewriting/
www.example.com/2012/url-rewriting/page/2
www.example.com/2012/url-rewriting/feed/rss
www.example.com/2012/
www.example.com/2012/page/2
www.example.com/2012/feed/rss
add_permastruct
FunktionDas add_permastruct
Funktion akzeptiert vier Argumente:
Name
- Ein einzigartiger Slug, um Ihre Permastruktur zu identifizierenstruct
- Die Permastruktur selbst, z.B. '% year% /% category% /% author%
'mit_front
- richtig oder falsch. Dies ist das gleiche Argument wie bei der Registrierung des Beitragstypsep_mask
- Siehe den Abschnitt "EP-Maske"Ein paar Warnungen zur Verwendung add_permastruct
müssen hier gemacht werden. Erstens: Sie sollten sicherstellen, dass eine benutzerdefinierte Permastruktur nicht mit den Wordwresche-Umschreiberegeln für Posts und Seiten kollidiert. Dies kann geschehen, indem Sie Ihrer benutzerdefinierten Permastruktur etwas Hardcodiertes voranstellen. Zum Beispiel:
"etwas hartcodiert /% year% /% monthnum% /% day%"
Zweitens: Die Regeln werden in dieser Reihenfolge hinzugefügt. Wenn Ihre Tags "zu generisch" sind, werden die letzteren Regeln möglicherweise nie angewendet. Beispielsweise funktioniert die obige Struktur (die Sie auf der Seite Einstellungen -> Permalinks ausprobieren können) im Allgemeinen gut, mit Ausnahme der folgenden:
www.example.com/2012/page/2
Wird als Seite der Beiträge von Autor '2' in der Kategorie 'Seite' im Jahr 2012 interpretiert. Wenn Sie verwenden möchten add_permastruct
und lassen Sie Ihre Seitenumbrüche und Feeds-Regeln schön kaskadieren, dann müssen Sie Tags verwenden, die nicht "generisch" sind (mit denen ich meine, dass die Regex-Ausdrücke nicht generisch sind).. %Autor%
und %Kategorie%
sind gute Beispiele für ein generisches Tag, da diese normalerweise mit jedem Zeichen übereinstimmen.
Die Tags für Jahr, Monat und Tag sind dagegen sehr spezifisch - sie passen nur positive ganze Zahlen der Längen vier und zwei an, so dass wir sie verwenden können add_permastruct
für das Datumsarchiv unseres Posttyps. Aufgrund der Besonderheiten der Datums-Tags müssen diese Regeln hinzugefügt werden Vor Die Post-Typ-Permalink-Regel - fügen Sie sofort Folgendes hinzu Vor registrierung deines posttyps:
// Bitte beachten Sie, dass dies nur für WordPress 3.4+ funktioniert. Http://core.trac.wordpress.org/ticket/19871 add_rewrite_tag ('% book_cpt%', '(book) s', 'post_type ='); add_permastruct ('book_archive', '% book_cpt% /% year% /% monthnum% /% day%');
Im oberen Bereich das benutzerdefinierte Tag % book_cpt%
fungiert als hartcodierter Slug, um diese Permastruktur von anderen Regeln zu unterscheiden (wie in der ersten Warnung). Die generierten Regeln gelten nur, wenn % book_cpt%
entspricht 'books' und in diesem Fall wird der 'book'-Teil erfasst und als Wert für interpretiert Post-Typ
. Bitte beachte, dass add_rewrite_tag
akzeptiert nur das dritte Argument seit WordPress 3.4. Sie können jedoch die folgende Problemumgehung verwenden:
global $ wp_rewrite; $ wp_rewrite-> add_rewrite_tag ('% book_cpt%', '(book) s', 'post_type =');
Nachdem Sie die Bucharchive eingerichtet haben, können Sie dies auch erwarten
www.example.com/books?year=2012
Würde uns auch ins Bucharchiv 2012 bringen. Beim Testen zeigt sich jedoch, dass wir stattdessen zur Archivseite des Postjahres gelangen:
www.example.com/2012/
WordPress hat uns aufgrund einer so genannten Kanonisierung auf eine andere Seite umgeleitet.
Normalerweise gibt es viele URLs, die auf den gleichen Inhalt Ihrer Website verweisen können. Zum Beispiel:
www.example.com/year/2012 www.example.com/year/2012/page/1 www.example.com/2012///////page/1 www.example.com/index.php / 2012 / www.example.com/index.php////2012///page/1
Bringt Sie alle zur ersten Seite Ihres 2012-Archivs. Aus SEO-Sicht ist das nicht so toll - wir können nicht davon ausgehen, dass Suchmaschinen diese URLs als dieselbe Ressource erkennen und diese URLs möglicherweise miteinander konkurrieren. Google bestraft Sie möglicherweise auch aktiv für doppelten Inhalt. Zwar ist es gut, festzustellen, wann diese Duplizierung nicht "bösartig" ist, es empfiehlt jedoch, diese überflüssigen URLs an eine bevorzugte "kanonische" (oder Standard-) URL weiterzuleiten. Das nennt man Kanonisierung.
Auf diese Weise können Sie nicht nur Bewertungen wie Link-Popularität konsolidieren, sondern auch Ihre Benutzer. Wenn sie eine hässliche oder "falsche" URL verwenden - sie werden zur "richtigen" URL geleitet - und was sich in ihrer Adressleiste befindet, ist das, worauf sie zurückkehren.
Seit 2.1.0 hat WordPress die kanonische Umleitung durchgeführt und sogar eine fundierte Schätzung des gesuchten Inhalts vorgenommen, wenn die ursprüngliche Abfrage einen 404-Wert zurückgegeben hat. Leider führt WordPress in diesem Fall die falsche URL aus. Dies liegt daran, dass die von uns eigentlich gewünschte URL von WordPress nicht nativ verstanden wird und der "post type" -Teil der URL ignoriert wurde. Glücklicherweise können wir jedoch die verwenden redirect_canonical
filtern, um dies zu beheben.
add_filter ('redirect_canonical', 'wptuts_redirect_canonical', 10, 2); Funktion wptuts_redirect_canonical ($ redirect_url, $ request_url) global $ wp_rewrite; // Abbruch, wenn keine hübschen Permalinks verwendet wird, ist ein Feed oder kein Archiv für den Beitragstyp 'book', wenn (! $ Wp_rewrite-> using_permalinks () || is_feed () ||! Is_post_type_archive ('book')) zurückgegeben wird $ redirect_url; // Holen Sie sich die ursprünglichen Abfrageteile. $ Redirect = @parse_url ($ request_url); $ original = $ redirect_url; if (! isset ($ redirect ['query'])) $ redirect ['query'] = "; // Wenn ist Jahr / Monat / Tag - Jahr anhängen if (is_year () || is_month () || is_day ( )) $ year = get_query_var ('year'); $ redirect ['query'] = remove_query_arg ('year', $ redirect ['query']); $ redirect_url = user_trailingslashit (get_post_type_archive_link ('book')) year; // If ist Monat / Tag - Monat anhängen if (is_month () || is_day ()) $ month = zeroise (intval (get_query_var ('monthnum')), 2); $ redirect ['query'] = remove_query_arg ('monthnum', $ redirect ['query']); $ redirect_url. = '/'.$month; // Wenn Tag ist - Tag anhängen if (is_day ()) $ day = zeroise (intval ( get_query_var ('day')), 2); $ redirect ['query'] = remove_query_arg ('day', $ redirect ['query']); $ redirect_url. = '/'.$day; // Wenn paged , Seitenumbruch anwenden, wenn (get_query_var ('paged')> 0) $ paged = (int) get_query_var ('paged'); $ redirect ['query'] = remove_query_arg ('paged', $ redirect ['query']) if ($ paged> 1) $ redirect_url. = user_trailingslashit ("/ page / $ paged", 'paged'); if ($ redirect_url == $ original) gibt $ original zurück; // Anheftung zusätzlicher Abfrage-Vars $ redirect ['query'] = preg_replace ('# ^ \ ?? & *? #', ", $ redirect ['query'])); if ($ redirect_url &&! leer ($ redirect ['query']))) parse_str ($ redirect ['query'], $ _parsed_query); $ _parsed_query = array_map ('rawurlencode', $ _parsed_query); $ redirect_url = add_query_arg ($ _parsed_query, $ rediray) $ redirect_url;
Die obige Funktion ist langwierig, aber nicht sehr kompliziert. Es könnte verbessert werden und ist nur als Beispiel dafür gedacht, was Sie mit dem tun können redirect_canonical
Filter. Zuerst wird geprüft, ob die Permalinks aktiviert sind, dass wir hinter unserem 'Buch'-Archiv sind und es kein Feed ist. Dann prüft es wiederum:
www.example.com/books/[year]
www.example.com/books/[jahre+/[monthnum]
www.example.com/books/[jahre+/[monthnum.html/[day]
Eine weitere Funktion, die nicht für Posttypen oder Taxonomien "out of the box" unterstützt wird, ist die Verwendung von Tags in der Permalink-Struktur. Während Tags, die im 'slug' des Umschreibungsarrays eines Posttyps (oder einer Taxonomie) verwendet werden, korrekt interpretiert werden, ersetzt WordPress diese Tags nicht durch die entsprechenden Werte, wenn Permalinks generiert werden. Wir müssen sie selbst ersetzen. Bei Verwendung solcher Tags wird jedoch auch die Archivseite des Beitragstyps unterbrochen. Daher verwenden wir eine andere Methode. Nehmen wir als Beispiel an, wir möchten, dass unser benutzerdefinierter Posttyp 'book' die Struktur hat:
www.example.com/books/[some-genre\/[a-book]
Ich verwende das Beispiel einer benutzerdefinierten Taxonomie, aber die gleichen Methoden können für jede Permastruktur verwendet werden (z. B. Datum, Autor oder sogar ein benutzerdefiniertes Feld). Zuerst fügen wir die Umschreibungsregel hinzu:
Funktion wptuts_custom_tags () add_rewrite_rule ("^ books / ([^ /] +) / ([^ /] +) /?", 'index.php? post_type = book & genre = $ passt [1] & book = $ stimmt überein [2 ]','oben'); add_action ('init', 'wptuts_custom_tags');
Jetzt, www.example.com/book/fiction/the-wizard-of-oz
, zeigt zum Beispiel auf das Buch 'der Zauberer von Oz
'. Der von WordPress generierte Permalink erzeugt jedoch immer noch www.example.com/book/the-wizard-of-oz
. Der nächste Schritt besteht darin, die erzeugte Permalink zu ändern.
In Teil 1 haben wir etwas Ähnliches getan, als wir ein benutzerdefiniertes Tag in der Post-Permalink-Struktur verwenden wollten. Dann haben wir die verwendet post_link
Filter; Dieses Mal verwenden wir das Äquivalent für benutzerdefinierte Posttypen, das post_type_link
Filter. Mit diesem Haken können wir unsere Struktur in die Permalinks der Bücher einfügen.
Funktion wptuts_book_link ($ post_link, $ id = 0) $ post = get_post ($ id); if (is_wp_error ($ post) || 'book'! = $ post-> post_type || leer ($ post-> post_name)) Rückgabe $ post_link; // Holen Sie sich das Genre: $ terms = get_the_terms ($ post-> ID, 'genre'); if (is_wp_error ($ terms) ||! $ terms) $ genre = 'unkategorisiert'; else $ genre_obj = array_pop ($ terms); $ genre = $ genre_obj-> slug; return home_url (user_trailingslashit ("books / $ genre / $ post-> post_name")); add_filter ('post_type_link', 'wptuts_book_link', 10, 2);
Erweitern wir die obige Permalink-Struktur, um Folgendes zu erreichen:
www.example.com/books/[some-genre\/[a-book]
www.example.com/books/[some-genre]
www.example.com/books/
Erinnern Sie sich daran, dass die Reihenfolge, in der Umschreibungsregeln hinzugefügt werden, von Bedeutung ist. Vor allem hinzugefügte Regeln haben Priorität.
Zuerst registrieren wir unser benutzerdefiniertes Taxonomie-Genre mit:
$ args = array (… 'rewrite' => array ('slug' => 'books'),…) register_taxonomy ('genre', $ args);
Dies fügt die folgende Permastruktur hinzu:
www.example.com/books/[some-genre]
Nach der Registrierung der Taxonomie registrieren wir unseren benutzerdefinierten Beitragstyp wie folgt:
$ args = array (… 'rewrite' => array ('slug' => 'books'),…) register_post_type ('book', $ args);
Dies würde die folgenden Regeln registrieren:
www.example.com/books/
(was wir wollen)www.example.com/books/[a-book]
(was wir nicht tun)Die zweite steht jedoch in Konflikt mit der konkurrierenden Regel, die bei der Registrierung unserer Taxonomie hinzugefügt wurde. Die resultierende Struktur ist:
www.example.com/books/fiction/slug
www.example.com/books/slug
www.example.com/books/
Früher, als wir uns mit der Registrierung von Beitragstypen, Taxonomien (oder sonstigen Permusturen) befassten, ließen wir uns in WordPress unsere eigenen Angaben machen.ep_mask
'. Also was sind sie??
Im ersten Teil haben wir untersucht, wie wir Endpunkte hinzufügen können add_rewrite_endpoint
. Das zweite Argument in dieser Funktion ist eine Konstante (oder eine Kombination von Konstanten mit bitweisen Operatoren), die bestimmt, wo der Endpunkt hinzugefügt wird. Zum Beispiel:
add_rewrite_endpoint ('form', EP_PAGES);
Fügt die Umschreibung hinzu Formular (/(.*))?/?$
zu jeder Seite Permalink und:
add_rewrite_endpoint ('json', EP_PAGES | EP_PERMALINKS);
Fügt die Umschreibung hinzu json (/(.*))?/?$
zu jedem Post und zu jeder Seite Permalink. Diese Konstanten spezifizieren also einen 'Ort' (d. H. 'Am Ende eines Post-Permalink') und werden aufgerufen Endpunktmasken (oder ep masken).
Wenn Sie einen Beitragstyp registrieren, registriert WordPress eine Permastruktur - und damit eine Endpunktmaske. Wenn dann die Umschreiberegeln generiert werden, werden auch die Endpunkt-Umschreiberegeln hinzugefügt, die dieser Endpunktmaske hinzugefügt wurden.
Wenn beispielsweise WordPress den Standard-Post-Typ "Page" registriert, wird die Endpunktmaske zugeordnet EP_PAGES
mit der Seite Permastruktur. Dann werden alle Endpoint-Neuschreibungsregeln zum hinzugefügt EP_PAGES
werden tatsächlich zu dieser Seite Permastruktur hinzugefügt. Wenn Sie einen Beitragstyp registrieren, können Sie Ihre eigene Endpunktmaske angeben oder eine vorhandene verwenden. Standardmäßig ist es EP_PERMALINKS
- Dies bedeutet, dass alle Regeln zum Umschreiben von Endpunkten hinzugefügt werden EP_PERMALINKS
werden den Umschreiberegeln Ihres benutzerdefinierten Beitragstyps hinzugefügt.
Natürlich möchten Sie nicht, dass Endpunktregeln für Ihren Beitragstyp hinzugefügt werden. In diesem Fall können Sie die Endpunktmaske verwenden EP_NONE
), oder Sie möchten einige Regeln zum Umschreiben von Endpunkten hinzufügen nur zu Ihrem benutzerdefinierten Beitragstyp. Dazu müssen Sie zunächst eine Endpunktmaske erstellen, die nichts anderes als eine Konstante ist, die Folgendes erfüllt:
Die Anforderung von 2 ist erforderlich, da WordPress mithilfe der Binärlogik festlegt, wo Endpunktregeln hinzugefügt werden sollen. Unglücklicherweise ist dies fast unmöglich zu überprüfen. Daher empfiehlt es sich, Endpunktmasken nur bei Bedarf hinzuzufügen und einen sehr hohen Wert zu erhalten (z. B. 221). Zum Zeitpunkt des Schreibens 20 bis zu 213 werden von Core verwendet.
Definieren Sie Ihre Endpunktmaske, bevor Sie Ihren Post-Typ oder Ihre Taxonomie registrieren:
define ('EP_BOOK', 8388608); // 8388608 = 2 ^ 23 $ args = array ('labels' => $ labels, 'has_archive' => true, 'rewrite' => array ('slug' => 'books "with_front" => false "feed") => true 'pages' => true 'ep_mask' => EP_BOOK)); register_post_type ('book', $ args); // Dann können Sie die Endpunktregeln für diese Endpunktmaske neu schreiben add_rewrite_endpoint ('loan', EP_BOOK);
(Hinweis: Das Obige verwendet WordPress 3.4-Argumente. Wenn Sie eine ältere Version von WordPress verwenden, müssen Sie die jetzt veraltete Version verwenden permalink_epmask
.). Ab WordPress 3.4 können Sie auch eine Endpunktmaske angeben, wenn Sie eine Taxonomie registrieren.
In diesem Tutorial habe ich die Grundlagen der Umschreibungs-API für Posttypen und Taxonomien, aber auch einige fortgeschrittenere Themen behandelt. WordPress 'Umgang mit Umschreibungen ist (notwendigerweise) komplex und der beste Weg, es zu verstehen, besteht darin, in den Quellcode einzutauchen und ihn mit dem Gelernten und einem Umschreibanalysator-Plug-In zu testen.
Im Moment gibt es ein paar Tickets, die sich durch die WordPress-Entwicklungsumgebung Trac bewegen, die sich auf die Rewrite-API bezieht. In Zukunft sehen wir eine viel einfachere und konfliktfreiere Art, Endpunktmasken zu übergeben.