Benutzerdefiniertes Post-Typ-Routing mit Hierarchie

Ich habe in letzter Zeit mit vielen benutzerdefinierten Post-Typen gespielt und ich bin ziemlich anal über meine URL-Struktur / Routing.

Ein Problem, das ich mit einer Website, die ich gerade entwickelt habe, auf eine Seite brachte, war folgende:

  • Ich hatte viele benutzerdefinierte Post-Typen, zum Beispiel: videos
  • Die URL-Struktur zum “Anzeigen” der Videoliste (zB: Archiv der Art) war /media/videos/
  • Diese ‘Ansicht’ war im Grunde eine benutzerdefinierte WP_Query , die Dinge ordnungsgemäß aus einer benutzerdefinierten .php Vorlage anzeigt.
  • Wenn Sie auf einen einzelnen “Video” www.site.com/videos/{slug} Sie zur URL des Post-Typs, www.site.com/videos/{slug} : www.site.com/videos/{slug}
  • Dies führt dazu, dass der gesamte Verlust der URL-Struktur / Elternbeziehung zu strukturieren ist.

Ich würde gerne dieses Problem lösen:

  • Wenn Sie zu /media/videos/ navigieren, erhalten Sie die individuell geladene Vorlagendatei
  • Wenn Sie auf einen Video- permalink() klicken, werden Sie mit /media/videos/{slug}
  • Idealerweise würde dies die Hierarchie der URL-Struktur beibehalten (wenn also etwas wie Breadcrumb NavXT noch eine Beziehung hätte).

Ich habe einmal ein Lehrer- / Schüler- / etc-Modul erstellt, bei dem ich ein benutzerdefiniertes Routing über add_rewrite_rule , um mit diesen Problemen add_rewrite_rule , aber ich würde eher herausfinden, wie man in dieser Situation mit der Hierarchie angemessen umgehen kann.

Kann mir bitte jemand in die richtige Richtung zeigen?

Vielen Dank!

Tre

Solutions Collecting From Web of "Benutzerdefiniertes Post-Typ-Routing mit Hierarchie"

Wenn Sie den benutzerdefinierten Post-Typ deklarieren, gibt es einen Parameter “rewrite”, in dem Sie den Slug für den Post-Typ deklarieren. Ändern Sie den Slug in “Medien / Videos”, und besuchen Sie dann die Seite Einstellungen> Permalinks, um Ihre Umschreibungsregeln zu aktualisieren.

 register_post_type( 'videos', array('labels' => array(), 'rewrite' => array( 'slug' => 'media/videos', 'with_front' => false ) ) );