Jak odkryć ślimak niestandardowego typu posta, gdy jestem na stronie archiwum?
Na przykład, jeśli /products/
uruchamia archive-products.php
szablon, w jaki sposób (pragmatycznie) mogę uzyskać ślimak typu post?
Dzięki
custom-post-types
archives
custom-post-type-archives
Ben Everard
źródło
źródło
get_queried_object()
uzyskałbym te same informacje w mniejszej liczbie ruchów.$posttype = get_query_var('post_type');
... Dodałem kompleksową alternatywę.Korzystam z tego poza pętlą w szablonie archive.php, aby dowiedzieć się, na którym niestandardowym archiwum post jestem.
Jest to zestaw metod zalecanych przez @toscho i @Rarst:
Aktualizacja: @majick zwrócił uwagę, że działa to tylko wtedy, gdy ustawiłeś ślimak przepisywania dla CPT. Rewrite slug jest opcjonalny podczas rejestracji CPT i domyślnie ustawiony na post_type, jeśli nie jest ustawiony.
źródło
Notice: Undefined property: stdClass::$rewrite in ***\wp-content\themes\marks-remarks\archive.php on line 4
Odpowiedzi stają się mylące. I może ja też, ale główne pytanie brzmi:
Jeśli masz na myśli stronę docelową archiwum typu posta i po
is_post_type_archive()
powrocietrue
, chcesz ślimaka odpowiadającego na bieżące archiwum przeglądania:- KONIEC ODPOWIEDZI NA PYTANIE -
Wyjaśnienie:
Nie można polegać na zarejestrowanym ślimaku . Wordpress też nie jest. Na przykład podczas wywoływania
get_post_type_archive_link()
Wordpress sprawdza bieżące reguły przepisywania dla instalacji .Gdziekolwiek jesteś, wewnątrz lub na zewnątrz pętli, prąd archiwum lub pojedyncze stanowisko, odwrócić ten
get_post_type_archive_link()
mechanizm. (Permalinki włączone.)Uwagi:
Jak wspomniano tutaj, typami postów w bieżącym zapytaniu może być
array
. Możesz iść dalej z intencjami, odfiltrowując szukany typ postu, na przykład:lub
Inny punkt widzenia:
Przykład Woocommerce jest zarejestrowany w obiekcie typu „produkty”, ale w rzeczywistości używa przepisanej nazwy reguły (sklep):
źródło
Należy zauważyć, że jeśli
has_archive
podczas rejestrowania niestandardowego typu postu zostanie ustawiona wartość true, archiwum rodzaju postu/cptslug/
zostanie wewnętrznie przepisane?post_type=cptslug
. Oznaczałoby to również,is_post_type_archive()
że zwróci się prawda.Niestety, gdy zarejestrowany ślimak przepisywania różni się od typu postu, tak naprawdę nie otrzymujesz niezawodnie
post_type
. na przykład. jeśli Twój typ postu był,myplugin_cars
a Twój komunikat o przepisywaniu był,cars
i musisz to zrobić,myplugin_cars
nawet to (aby zapobiec błędom, jeśli bieżący obiekt, którego dotyczy zapytanie, nie jest niestandardowym typem postu) nadal zawiedzie:Ale ponieważ
is_post_type_archive
to prawda, jest to bardziej niezawodne:Ale poczekaj, jest więcej ... okazuje się, że przy niewielkich testach to naprawdę nie jest takie proste ... co jeśli jesteś na stronie archiwum taksonomii z wieloma typami postów w taksonomii ...? Lub przypisać tagi postów do niestandardowego typu postu innego niż post? A może są na stronie archiwum autora? Data archiwizacji strony? ... a nawet mieć kompleks
tax_query
lubmeta_query
dlaWP_Query
?Jedyną wiarygodną odpowiedzią (bez testowania dla każdego możliwego przypadku archiwum) jest zapętlenie rzeczywistych postów w zapytaniu ... Oto pełna funkcja, którą wymyśliłem do pracy zarówno na stronach pojedynczych, jak i archiwalnych, i pozwala opcjonalnie przekazać niestandardowy obiekt zapytania (lub obiekt postu / identyfikator postu dla pojedynczych postów):
To niezawodnie (czy to powiedziałem?) Zwróci tablicę typów postów, jeśli występuje więcej niż jeden, lub ciąg znaków z jednym typem postów, jeśli istnieje tylko jeden typ. Wszystko, co musisz zrobić, to:
Przykład użycia (tylko dla zabawy):
Aby zobaczyć efekt, zmień niestandardowy typ wpisu w kodzie na
post
i dodajthumbtype-post
atrybut klasy do swoich miniatur zdjęć ...źródło
Możesz użyć tego kodu:
użyj $ posttype_slug var cokolwiek potrzebujesz
źródło
$queried_object->query_var['post_type'];
zadziałać ...?post_type=post
gdy się opróżnię. porównaj zget_query_var('post_type');
Możesz użyć tego kodu, a ten kod działa dla mnie,
źródło
źródło