Normale Seiten als Kinder meines benutzerdefinierten Beitragstyps

Dieser ist knifflig, ich habe einen benutzerdefinierten Post-Typ namens “dictionary”, Benutzer fügen dort “Definitionen” hinzu, die automatisch in richtige Kategorien eingefügt werden (wenn also der Benutzer beispielsweise “Apple” unter “A” hinzufügt).

Die URLs sehen so aus:

  • Blog / Wörterbuch / – Wörterbuch Willkommensseite
  • blog / dictionary / x / – Auflistung von Definitionen beginnend mit “x” Buchstaben
  • Blog / Wörterbuch / x / Xavier – Definition des Wortes “Xavier”

Jetzt möchte ich normale WordPress-Seiten hinzufügen und sie irgendwie unter anzeigen:

  • Blog / Wörterbuch / Regeln
  • Blog / Wörterbuch / Autor

etc.

Ich erstelle neue Seiten und setze die “Wörterbuch” -Seite (Blog / Wörterbuch) als Eltern, also sind sie dort, wo sie sein sollen, aber NICHTS ALLEIN , kein Inhalt, nichts. Ich habe absolut keine Ahnung, wie ich es lösen soll. Ich kann sie nicht zum benutzerdefinierten Typ “Wörterbuch” hinzufügen, da sie nur Definitionen enthält.

Irgendwelche Ideen? Ich würde lieber mod_rewrite vermeiden (wie ich möchte, dass meine Seiten Kinder von “Wörterbuch” nicht hart verbundenen normalen Seiten sind).

Kurz gesagt: Ich brauche zwei Arten von Elementen unter einem benutzerdefinierten Beitragstyp.

AKTUALISIEREN

Sieht aus, als wenn mein “Wörterbuch” ein Kind selbst ist, funktioniert es zum Beispiel:

  • Blog / Wörterbuch / Autoren – zeigt nichts an
  • blog / page1 / dictionary / authors – zeigt die Autorenseite an

Warum das?

Solutions Collecting From Web of "Normale Seiten als Kinder meines benutzerdefinierten Beitragstyps"

Wenn ich es wäre, würde ich das hier erreichen.

Vorwort

Angenommen die folgenden Datenstrukturen:

  • Beitragstyp: “Wörterbuch”
  • Taxonomie: “dictionary_category”, Begriffe, die auf einzelne Buchstaben beschränkt sind

Und die gewünschten URLs:

  • / dictionary / => Seite (das sollte out-of-the-box funktionieren)
  • / Wörterbuch / Regeln / => Seite
  • / dictionary / x / => Taxonomie-Archiv
  • / dictionary / x / xavier / => Einzelpostansicht

1. Legen Sie die Post-Typ- und Taxonomie-URLs fest

Wenn Sie Ihren Post-Typ registrieren, sollte der rewrite Parameter lauten:

 'rewrite' => array( 'slug' => 'dictionary/%dictionary_category%' ) 

Bei der Registrierung Ihrer Taxonomie sollte der Parameter rewrite lauten:

 'rewrite' => array( 'slug' => 'dictionary' ) 

Sie müssen post_type_link wegen des Umschreibe-Tags ( %dictionary_category% ) im Umschreibungs-Slug filtern. So würde das aussehen:

 function wpse_119806_post_type_link( $post_link, $post, $leavename, $sample ) { if ( 'dictionary' == $post->post_type ) { if ( $categories = get_the_terms( $post->ID, 'dictionary_category' ) ) { return str_replace( '%dictionary_category%', array_pop( $categories )->slug, $post_link ); } } return $post_link; } add_filter( 'post_type_link', 'wpse_119806_post_type_link', 10, 4 ); 

Jetzt funktioniert / dictionary / x / works und / dictionary / x / xavier / works.

2. Legen Sie die Seiten-URLs fest

Hier werden wir die Tatsache ausnutzen, dass die Dictionary_category-Begriffe nicht mehr als 1 Zeichen umfassen. Alles nach / Wörterbuch / und mehr als ein Zeichen wird als eine Seite angenommen.

 add_action( 'init', 'wpse_119806_rewrite_rules' ); function wpse_119806_rewrite_rules() { add_rewrite_rule( '(dictionary/[^/]{2,}?)/?$', 'index.php?pagename=$matches[1]', 'top' ); } 

Leeren Sie Ihre Umschreibungsregeln (gehen Sie zu Einstellungen → Permalinks und klicken Sie auf “Änderungen speichern”), und alles sollte wie gewünscht funktionieren.

Anmerkungen

  • Dies ignoriert das / blog /; Ich gehe davon aus, dass Sie das Stück herausgefunden haben, also ändern Sie diesen Code wenn nötig, um das hinzuzufügen.
  • Sie können weitere Regeln für Seiten hinzufügen, um tiefere Seitenhierarchien zu erhalten. Dies unterstützt nur die zweite Ebene. Dadurch werden auch keine Regeln für den Feed, die Seitennummerierung usw. für die Seiten hinzugefügt. Um diese hinzuzufügen, fügen Sie sie einfach zu wpse_119806_rewrite_rules mit zusätzlichen Aufrufen von add_rewrite_rule() .
  • Persönlich würde ich keine Taxonomie für die Wörterbuchbuchstaben verwenden, aber es hört sich so an, als ob Sie das tun, also ging ich damit um. Wenn ich es wäre, würde ich eine benutzerdefinierte Abfrage für diese verwenden.