Custom Post Type Nest unter einer normalen WordPress-Seite

EDIT Nochmal, nein, es ist nicht unmöglich, nur böse. Lösung unten.


Ich bemühe mich sehr, dass das funktioniert. Hab hier auf Stackexchange / Overflow zahlreiche Vorschläge ausprobiert

Meine Ziele sind, einfach einen ‘Seitenelternteil’ für meinen benutzerdefinierten Posttyp auszuwählen und:

  • Permalinks anzeigen lassen, zB: / page / sub-page / sub-customposttype /
  • Ein benutzerdefinierter Beitragstyp könnte eine andere übergeordnete Seite als einen anderen benutzerdefinierten Beitragstyp haben.
  • Holen Sie WordPress-Menü Hervorhebung funktioniert, zB: Es wird eine ‘aktive’ class auf alle übergeordneten Menüelemente anwenden, wenn ein Kind benutzerdefinierte Beitragstyp anzeigen.
  • (ohne irgendwelche Seiten-IDs oder benutzerdefinierte Slugs hart zu codieren)

Hier ist die “Seite”, die ich als Eltern machen möchte: http://ultimateclientmanager.com/support/documentation-wiki/

Hier ist ein “Wiki” -Posttyp, den ich unter dieser ^ Seite verschachteln möchte: http://ultimateclientmanager.com/support/documentation-wiki/change-request/

Ich habe die “Wiki” benutzerdefinierte post type slug auf “support / documentation-wiki” im Code eingestellt, dies ermöglicht die Permalink-URL, wie oben gut aussehen. Da im ‘Wiki’ kein Elternteil ausgewählt ist, funktioniert die Menühervorhebung nicht (und es wäre unmöglich, unterschiedliche Elternseiten-URLs für die Wiki-Elemente zu haben).

Hier sind einige meiner jüngsten Versuche, es zum Laufen zu bringen.

  1. Setze den “wiki” Gegenstand post_parents auf die ID meiner “Seite”.
  2. Lassen Sie den benutzerdefinierten Umschlagetyp für den Post-Typ auf ‘support / documentation-wiki’ gesetzt.
  3. Dies erzeugt eine URL wie: / support / documentation-wiki / support / documentation-wiki / change-request /
  4. Dies erzeugt einen 404-Fehler.
  5. Debug zeigt die wiki_page=support%2Fdocumentation-wiki%2Fchange-request&post_type=wiki_page&name=support%2Fdocumentation-wiki%2Fchange-request von wiki_page=support%2Fdocumentation-wiki%2Fchange-request&post_type=wiki_page&name=support%2Fdocumentation-wiki%2Fchange-request
  6. Und eine passende Rewrite-Abfrage von wiki_page=support%2Fdocumentation-wiki%2Fchange-request&page=

und:

  1. Setze den “wiki” Gegenstand post_parents auf die ID meiner “Seite”.
  2. Ändern Sie den “wiki” -Posttyp slug zurück in nur ‘wiki’ (anstelle von ‘support / documentation-wiki’)
  3. Dies erzeugt eine URL wie: / wiki / support / documentation-wiki / change-request /
  4. Dies erzeugt einen 404-Fehler.
  5. Debug zeigt die wiki_page=support%2Fdocumentation-wiki%2Fchange-request&post_type=wiki_page&name=support%2Fdocumentation-wiki%2Fchange-request von wiki_page=support%2Fdocumentation-wiki%2Fchange-request&post_type=wiki_page&name=support%2Fdocumentation-wiki%2Fchange-request
  6. Und eine passende Rewrite-Abfrage von wiki_page=support%2Fdocumentation-wiki%2Fchange-request&page=

und ein verzweifelter Versuch, die korrekte URL anzuzeigen:

  1. Setze den “wiki” Gegenstand post_parents auf die ID meiner “Seite”.
  2. Ändern Sie den “wiki” -Posttyp slug zurück in nur ‘wiki’ (anstelle von ‘support / documentation-wiki’)
  3. Hack wp_rewrite während des ‘wp’ Hooks, ändere die Struktur von ‘/ wiki /% wiki_page%’ in ‘% wiki_page%’ wie: like: $wp_rewrite->extra_permastructs['wiki_page']['struct'] = '%wiki_page%';
  4. Dies erzeugt eine korrekte URL wie: / support / documentation-wiki / change-request /
  5. Aber das erzeugt auch einen 404-Fehler, weil dort nichts mit der Abfrage pagename=support%2Fdocumentation-wiki%2Fchange-request&page= : pagename=support%2Fdocumentation-wiki%2Fchange-request&page=

Die Parent-Seite erscheint korrekt im Admin- “Wiki” -Auflistungs- und Editierbereich, scheint einfach nicht in das Frontend zu kommen.

Aktuelle Permalink Einstellungen sind nur Day and name http://ultimateclientmanager.com/2013/04/04/sample-post/

Dies ist 3.5.1 Setup als Multisite.

Solutions Collecting From Web of "Custom Post Type Nest unter einer normalen WordPress-Seite"

Herausgefunden!

Es ist ein sehr hässlicher Hack, aber ich habe die rohe WP-Abfrage gefiltert, damit mehrere Post-Typen in einer einzigen URL verschachtelt werden.

Wenn Sie wordpress mit einer URL wie / page / subpage / custom-post-name-here laden, wird diese SQL ausgeführt, um zu prüfen, ob die URL gültig ist:

SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN ('page','subpage','custom-post-name-here') AND (post_type = 'wiki_page' OR post_type = 'attachment')

Natürlich liefert diese Abfrage keine Ergebnisse. Also modifizieren wir es leicht (böse!), So dass es die Suche auf Seiten und unseren benutzerdefinierten Beitragstyp erweitert:

SELECT ID, post_name, post_parent, post_type FROM wp_posts WHERE post_name IN ('page','subpage','custom-post-name-here') AND (post_type = 'wiki_page' post_type = 'page' OR post_type = 'attachment')

Es gibt auch ein paar andere Bits hier, um die ‘Slug’-Anforderung von einem benutzerdefinierten Post-Typ zu entfernen (was wahrscheinlich besser gemacht werden könnte, wenn man immer noch lernt, dass WP neu schreibt!)

Vollständiger Code: https://gist.github.com/dtbaker/5311512

Live Beispiel: (‘support’ ist eine Seite, ‘documentation-wiki’ ist ein Kind von ‘support’ und ‘change-request’ ist ein benutzerdefinierter ‘wiki’ Beitrag, der auch ein Kind von ‘documentation-wiki’ ist): http://ultimateclientmanager.com/support/documentation-wiki/change-request/

Wenn jemand die gleiche URL-Struktur, Menü-Hervorhebung und Permalink-Generierung ohne lästiges Filtern der WP-Abfrage erhalten kann, kaufe ich ihnen ein Bier (oder drei).

Prost, Dave