Tworzę motyw z niestandardowym typem posta dla członków zespołu, mam również następującą strukturę strony:
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
Trzecia struktura tutaj używa stron o członkach i członkach zespołu, ale dalej używa niestandardowego ślimaka typu post, aby wyglądać tak, jakby jego rodzice byli członkami zespołu. Osiągnąłem to, ustawiając następujące opcje niestandardowego typu postu:
...
'rewrite' => array( 'slug' => 'about/team-members', 'with_front' => false)
...
Działa to świetnie, jednak kiedy przejdę do poziomu posta członka zespołu, nie otrzymuję już klas bieżącej strony, bieżący przodek na stronach nadrzędnych. Wiem, dlaczego tak jest, ponieważ technicznie nie jesteśmy na stronie nadrzędnej dla tych stron, ale czy istnieje sposób, w jaki mogę oszukać / naprawić / zablokować strony, aby strony pojawiły się jako rodzice?
Udało mi się to dobrze, używając stron dla członków zespołu, jednak zamiast tego wybrano niestandardowy typ postu, aby administrator mógł go łatwo użyć.
Dzięki chłopaki + dziewczyny!
źródło
register_post_type
dokumentacji, możesz pomóc?Odpowiedzi:
Podczas pracy ze stronami możesz wybrać stronę nadrzędną, a ta wartość jest zapisywana jako numer identyfikacyjny strony nadrzędnej w polu strony podrzędnej
post_parent
w bazie danych.W twoim przypadku używasz niestandardowego typu postu, więc musisz utworzyć własny metaboks dla strony nadrzędnej; coś jak:
To nie ma nic wspólnego
register_post_type
. Oszukujesz WordPressa, aby pomyślał, że jest to strona podrzędna innego typu posta (strony).źródło
wp_list_pages
.wp_nav_menu
- post_parent dotyczy / członków zespołu, ale nawigacja podkreśla element nadrzędny moich „normalnych” postów na blogu ... inny pomysł, jak to naprawić?Poszedłem z niestandardowym walkerem, aby osiągnąć coś podobnego ... unika potrzeby niestandardowych pól, ale wszystkie posty danego typu muszą znajdować się poniżej tego samego punktu w drzewie strony.
źródło
Oświadczenie: Po wypróbowaniu wydaje mi się to nieistniejącym problemem, ponieważ - przynajmniej dla mnie - działa tylko na mojej instalacji WP 3.9.2. Nie udało się znaleźć odpowiedniego narzędzia do śledzenia błędów.
Mam razem małą wtyczkę, aby to przetestować, co może komuś pomóc. Ale, jak powiedziałem w powyższym zrzeczeniu się odpowiedzialności, nie mogłem odtworzyć problemu w bieżącej instalacji wordpress. Rozdzieliłem wtyczkę na cztery pliki, idą one razem do jednego katalogu w katalogu wtyczek.
plugin-cpt_menu_hierarchy.php :
include-register_post_type.php :
include-cpt_parent_meta_box.php :
include-menu_highlighting.php :
źródło
Możliwym rozwiązaniem jest to, że za każdym razem, gdy zapisywany jest niestandardowy typ postu, możesz ustawić jego
about/team-members
element nadrzędny na prgramatyczny.Oto kroki:
źródło
Miałem więcej czasu, żeby się w to zagłębić (przepraszam, jeśli zmarnowałem czyjś czas) i pomyślałem, że dla mnie najlepszym sposobem rozwiązania problemu wyróżnienia byłoby ponowne zrobienie tego, co
_wp_menu_item_classes_by_context()
się dzieje, czyli powtórzenie wszystkiego rodzice i przodkowie elementu menu, który działa jako rodzic mojego niestandardowego typu postu i odpowiednio dodają klasy.Ponieważ chciałem również naprawić stronę nadrzędną dla mojego niestandardowego typu postu i łatwo ją zmienić bez konieczności aktualizacji wszystkich postów po zmianie elementu nadrzędnego, postanowiłem użyć opcji zamiast zapełniać
post_parent
pola moich niestandardowych typów postów. Użyłem do tego ACF, ponieważ i tak używam go w moim motywie, ale użycie domyślnej funkcji opcji WordPress oczywiście by to zrobiło.Na moje potrzeby mogłem skorzystać z
wp_nav_menu_objects
filtra. Dodatkowo musiałem odfiltrowaćpage_for_posts
opcję, aby zwróciła wartość false / empty, dzięki czemu unika się podświetlania domyślnej strony postów.Pamiętaj, że nie poszedłem na całość, filtr dodaje tylko klasy
current-menu-ancestor
icurrent-menu-parent
, ponieważ to wystarczyło na moje potrzeby!Ze względu na kompletność, podczas wypełniania
post_parent
(patrz odpowiedź @ Bainternet ) zamiast korzystania z opcji, wówczas pobieranie identyfikatora nadrzędnego może wyglądać mniej więcej tak:źródło
http://codex.wordpress.org/Function_Reference/get_post_type_object http://codex.wordpress.org/Function_Reference/get_page_by_path
EDYCJA 1:
Ponieważ wskaźniki nie działają:
źródło