Ich erstelle ein Thema mit einem benutzerdefinierten Beitragstyp für Teammitglieder. Außerdem habe ich die folgende Seitenstruktur:
about <-- this is a page
about/team-members <-- this is a page, lists all the team members
about/team-members/joe-bloggs <-- this is a custom post type (team member) entry
In der dritten Struktur werden die Seiten "Info" und "Teammitglied" verwendet. Anschließend wird jedoch der benutzerdefinierte Beitragstyp "Slug" verwendet, um den Eindruck zu erwecken, dass die Eltern Teammitglied und "Info" sind. Ich habe dies erreicht, indem ich die folgenden Optionen für den benutzerdefinierten Beitragstyp festgelegt habe:
...
'rewrite' => array( 'slug' => 'about/team-members', 'with_front' => false)
...
Das funktioniert prima, aber wenn ich auf die Post-Ebene des Teammitglieds komme, erhalte ich nicht mehr die Klassen current-page und current-ancestor auf den übergeordneten Seiten. Ich weiß, warum das so ist, denn wir sind technisch gesehen keine pagea Eltern dieser Seiten, aber gibt es eine Möglichkeit, wie ich die Seiten austricksen / reparieren / bodge kann, damit sie als Eltern erscheinen?
Ich hatte dies sehr gut durch die Verwendung von Seiten für Teammitglieder erreicht, jedoch wurde stattdessen ein benutzerdefinierter Beitragstyp ausgewählt, um die Verwendung für den Administrator zu vereinfachen.
Danke Jungs + Mädels!
quelle
register_post_type
Dokumentation. Können Sie mir helfen?Antworten:
Wenn Sie mit Seiten arbeiten, können Sie eine übergeordnete Seite auswählen, und dieser Wert wird als übergeordnete Seiten-ID im
post_parent
Feld der untergeordneten Seite in der Datenbank gespeichert.In Ihrem Fall verwenden Sie einen benutzerdefinierten Beitragstyp, sodass Sie eine eigene Metabox für die übergeordnete Seite erstellen müssen. etwas wie:
Es hat nichts damit zu tun
register_post_type
. Sie täuschen WordPress vor, es handele sich um eine untergeordnete Seite eines anderen Beitragstyps (Seite).quelle
wp_list_pages
.wp_nav_menu
- das Post_Parent handelt von / Team-Mitgliedern, aber die Navigation hebt das übergeordnete Element meiner "normalen" Blog-Posts hervor ... Gibt es eine andere Idee, wie ich das beheben könnte?Ich bin mit einem benutzerdefinierten Walker gegangen, um etwas Ähnliches zu erreichen. Es werden keine benutzerdefinierten Felder benötigt, aber alle Posts eines Typs müssen sich unter demselben Punkt im Seitenbaum befinden.
quelle
Haftungsausschluss: Nachdem ich es ausprobiert habe, scheint mir dies ein nicht mehr existierendes Problem zu sein, da es - zumindest für mich - nur auf meiner WP 3.9.2-Installation funktioniert. Konnte jedoch keinen entsprechenden Bug-Tracker finden.
Ich habe zusammen ein kleines Plugin herausgebracht, um dies zu testen, was vielleicht jemandem helfen könnte. Aber wie ich oben schon sagte, konnte ich das Problem in einer aktuellen WordPress-Installation nicht reproduzieren. Ich habe das Plugin in vier Dateien aufgeteilt, die in einem Verzeichnis innerhalb des Plugin-Verzeichnisses zusammengefasst sind.
plugin-cpt_menu_hierarchy.php :
include-register_post_type.php :
include-cpt_parent_meta_box.php :
include-menu_highlighting.php :
quelle
Eine mögliche Lösung ist, wann immer der benutzerdefinierte Beitragstyp gespeichert wird, Sie können den übergeordneten
about/team-members
Beitragstyp so einstellen , dass er programmatisch ist.Hier sind die Schritte:
quelle
Ich hatte noch etwas Zeit, mich selbst damit zu befassen (sorry, wenn ich jemandes Zeit verschwendet hätte), und ich dachte mir, dass der beste Weg, um das Hervorhebungsproblem zu lösen, darin besteht, etwas zu wiederholen
_wp_menu_item_classes_by_context()
, darin besteht, das, tue, ein , das ist über alles hinweg Eltern und Vorfahren des Menüelements, das als Eltern meines benutzerdefinierten Beitragstyps fungiert, und fügen Klassen entsprechend hinzu.Da ich auch wollte, dass die übergeordnete Seite für meinen benutzerdefinierten Beitragstyp repariert und einfach geändert werden kann, ohne dass alle Beiträge aktualisiert werden müssen, sobald sich der übergeordnete ändert, habe ich beschlossen, eine Option zu verwenden, anstatt die zu füllen
post_parent
Feld meiner benutzerdefinierten Beiträge auszufüllen. Ich habe ACF dafür verwendet, da ich es sowieso in meinem Theme verwende, aber die standardmäßige Funktionalität der WordPress-Option würde es natürlich auch tun.Für meine Bedürfnisse konnte ich den
wp_nav_menu_objects
Filter nutzen. Außerdem musste ich diepage_for_posts
Option so filtern , dass sie einen falschen / leeren Wert zurückgibt. Dadurch wird vermieden, dass die Seite mit den Standardbeiträgen ebenfalls hervorgehoben wird.Beachten Sie, dass ich nicht den ganzen Weg gegangen bin, der Filter fügt nur die Klassen
current-menu-ancestor
und hinzucurrent-menu-parent
, da dies für meine Bedürfnisse ausreichte!Der Vollständigkeit halber könnte das Abrufen der übergeordneten ID beim Auffüllen
post_parent
(siehe @ Bainternets Antwort ) anstelle der Verwendung von Optionen ungefähr so aussehen:quelle
http://codex.wordpress.org/Function_Reference/get_post_type_object http://codex.wordpress.org/Function_Reference/get_page_by_path
EDIT 1:
Da Zeiger nicht funktionieren:
quelle