Od wersji 2.9 WordPress wprowadził możliwość korzystania z niestandardowych typów postów. Teraz, wraz z wersją 3.0, rzeczy posunęły się nieco dalej dzięki opcji tworzenia paneli dla niestandardowych typów postów. W tym samouczku pokażemy, jak zaimplementować niestandardowe typy postów na swojej stronie w witrynie WordPress.
Tworzenie niestandardowych typów postów – Używanie wtyczek
Od wersji 3.0 WordPress nie posiada wbudowanego interfejsu użytkownika (UI) do tworzenia niestandardowych typów postów. Istnieją tylko dwie opcje, których możemy użyć do tworzenia niestandardowych typów postów: wtyczki lub zakodowanie ich bezpośrednio w pliku functions.php twojego motywu. Najpierw przyjrzyjmy się, jak możemy użyć wtyczek do tworzenia niestandardowych typów postów.
Custom Post Type UI

Custom Post Type UI to wtyczka opracowana przez Brada Williamsa z WebDevStudios, która pozwala łatwo tworzyć niestandardowe typy postów i taksonomie. Jedną z najfajniejszych funkcji tej wtyczki jest to, że generuje kod do tworzenia niestandardowych typów postów, który można następnie wkleić do pliku functions.php motywu. Jedną z osobliwości tej wtyczki jest niemożność udostępniania taksonomii między wszystkimi twoimi typami postów.

Z panelu interfejsu użytkownika niestandardowych typów postów kliknij „Dodaj nowy”.

Następnie otrzymasz kilka opcji do wypełnienia. „Nazwa typu posta” będzie używana przez WordPress do pobierania wszystkich postów z danego typu posta. „Etykieta” będzie wyświetlana na pasku bocznym Twojego pulpitu, podobnie jak zwykłe menu „Post”. Jeśli rozwiniesz „Pokaż opcje zaawansowane”, zobaczysz kilka dodatkowych opcji, które możesz skonfigurować. Większość z nich jest samoexplanatoryczna, takich jak „Publiczny” i „Pokaż UI”. Pierwsza, ustawiona na true, pozwala na wyświetlanie menu niestandardowego typu posta na pasku bocznym, a druga (pokaż UI), ustawiona na true, generuje panel menu.
„Rewrite” to to, co pozwala niestandardowemu typowi posta używać przyjaznych dla SEO adresów URL WordPress (Permalinks). „Custom Rewrite Slug” można ustawić na dowolną wartość. WordPress użyje tego sluga do generowania permalinków. Więc jeśli mamy example.com z niestandardowym slugiem „movies”, permalink twojego niestandardowego typu posta będzie wyglądał tak: example.com/movies
Funkcja WordPress „Query Var” pozwala na zapytanie postów z niestandardowego typu post. Więc jeśli użylibyśmy podanego wcześniej przykładu, aby uzyskać dostęp do posta o tytule, Mój Pierwszy Post Filmowy, który jest napisany pod typem postu Filmy, możemy wpisać example.com/?movies=my-first-movie-post. Zmienna zapytania wygląda więc tak: ?nazwa_typu_postu
Wreszcie możesz wybrać różne funkcje obsługiwane przez niestandardowy typ post, takie jak miniatury/obraz wyróżniony i fragmenty.

Tworzenie niestandardowych typów postów – użycie pliku Functions.php

Jeśli wolisz używać niestandardowych typów postów bez wtyczki, dodaj następujący kod do pliku functions.php swojego motywu:
// Creates Movies post type
register_post_type('movies', array(
'label' => 'Movies',
'public' => true,
'show_ui' => true,
'capability_type' => 'post',
'hierarchical' => false,
'rewrite' => array('slug' => 'movies'),
'query_var' => true,
'supports' => array(
'title',
'editor',
'excerpt',
'trackbacks',
'custom-fields',
'comments',
'revisions',
'thumbnail',
'author',
'page-attributes',)
) );
Rozłóżmy kod.
register_post_type( $post_type, $args ): Ta funkcja przyjmuje dwa parametry: $post_type, czyli nazwę typu posta, i $args, czyli tablicę argumentów.
label: Nazwa w liczbie mnogiej podana dla typu posta, która jest wyświetlana w bocznym panelu administracyjnym.
public: true/false. Pozwala na wypełnienie interfejsu administratora postami tego typu.
show_ui: true/false. Pokazuje lub ukrywa domyślny interfejs użytkownika do zarządzania tym typem posta.
capability_type: Domyślnie: post Typ posta używany do sprawdzania uprawnień do odczytu, edycji i usuwania.
hierarchical: Czy typ posta jest hierarchiczny.
rewrite: true/false. Domyślnie: true Jeśli podano argument slug, nazwa slug jest dodawana na początku postów.
query_var: true/false Ustawia nazwę typu posta jako zmienną zapytania.
obsługuje: Domyślnie: tytuł i autor Ustawia różne funkcje obsługi, na które pozwala typ posta.
Odwiedź WordPress Codex po więcej informacji o register_post_type().
Wyświetlanie postów niestandardowych typów postów
Aby wyświetlić posty z niestandardowego typu posta, dodaj poniższe kody w pętli. Zastąp „name” nazwą swojego typu posta. Uwaga: Nie musisz dodawać niestandardowych typów postów w pliku index.php. Możesz utworzyć niestandardową stronę WordPress i uruchomić poniższe zapytanie w pętli.
$query = new WP_Query( 'post_type=name' );
Aby wyświetlić posty z więcej niż jednego typu postów, zmień powyższy kod na następujący. Zmień „movies” na nazwę swojego niestandardowego typu postów.
$query = new WP_Query( array( 'post_type' => array( 'post', 'movies' ) ) );
Powyższy kod wyświetli wszystkie posty z regularnego typu post (post) oraz z niestandardowego typu post, filmy.
To wszystko. Mamy nadzieję, że ten samouczek był pomocny i nie zapomnij zadawać pytań w komentarzach.

Gaby Izarra
Ok, mam mały problem i może będziesz w stanie pomóc... oto moja strona forum WordPress. Próbuję zaadaptować listę wydarzeń z innego motywu do tego, którego używam.
http://wordpress.org/support/topic/php-query-for-custom-post-type-not-displaying-creating-theme-event-list?replies=1#post-5587886
dave
Utworzyłem dwa niestandardowe typy postów, ale tylko pierwszy pojawia się na mojej stronie. Dodałem to
$query = new WP_Query( array( ‘post_type’ => array( ‘post’, ‘featured’, ‘latest’ )
) );
w moim pliku pętli, ale nic. jak mogę to rozwiązać?
Jeroen
Czy wiesz, jak dodać niestandardowe typy postów do strony archiwum bloga i kanału RSS?
Wsparcie WPBeginner
Tak, mamy poradniki na oba tematy. Proszę zapoznać się z tym, jak utworzyć stronę archiwum niestandardowych typów postów w WordPress, i jak dodać niestandardowe typy postów do głównego kanału RSS WordPress.
Admin
wizdom networks
Po pierwsze, świetny artykuł! Pracuję nad implementacją niestandardowych typów postów za pomocą kodu. Warto zauważyć, że obecna dokumentacja WordPress (http://codex.wordpress.org/Function_Reference/query_posts) określa, że funkcja query_posts generalnie nie powinna być używana i że hak pre_get_posts służy do modyfikowania zapytań.
„Zdecydowanie zaleca się użycie filtru pre_get_posts zamiast tego i zmodyfikowanie głównego zapytania poprzez sprawdzenie is_main_query”
Ponownie, świetny artykuł, dzięki za udostępnienie.
Pozdrawiam.
Wsparcie WPBeginner
Dzięki Wisdom, zaktualizowaliśmy artykuł o WP_Query
Admin
Thom Abbott
WOW… dla nowicjusza, który używa WP do prowadzenia swojej strony internetowej, to wcale nie są podstawy! Prawdopodobnie będę musiał skontaktować się z jakimś programistą WP, aby skonfigurować moją niestandardową stronę, którą chcę.
Personel redakcyjny
Niestandardowe typy postów zostały stworzone dla programistów, aby rozszerzyć funkcjonalność WordPressa. Nigdy nie były przeznaczone dla początkujących.
Admin
mark shirley
query_posts( ‘post_type=movies’);
?>
Nie mogę sprawić, żeby to działało w moim szablonie strony child theme z 2011 roku, gdzie bym to umieścił, aby pobrać stronę z filmami. Właściwie to właśnie fragmenty najbardziej mnie interesują. Dzięki Mark
muntzdesigns
Używając tej wtyczki i dodając powyższy kod do loop.php, stracisz kontrolę nad kategoriami... mój niestandardowy typ posta jest dodawany do wszystkich kategorii... jakaś pomoc?
wpbeginner
@muntzdesigns Dlatego masz wiele pętli... główną pętlę bloga, archive.php, category.php itp... Na niestandardowo zaprojektowanej stronie będziesz musiał to wykorzystać, aby działało to odpowiednio.
muntzdesigns
@wpbeginner@muntzdesigns Więc po prostu dodam powyższy kod do wszystkich plików? (loop.php, archive.php i category.php). Dzięki.
wpbeginner
@muntzdesigns Nie. Kod dodajesz tylko na stronach głównych. Problem, który miałeś, polegał na tym, że niestandardowe typy postów były dodawane do wszystkich kategorii… Musisz dodać powyższy kod tylko do głównej pętli. Następnie utwórz nową pętlę dla archiwum kategorii, archiwum taksonomii, archiwum autora…
PriyaVerma
Miły artykuł, dziękuję bardzo
dazuaga
Nie, myliłem się.
dazuaga
Nie ważne: %category%/%type%/%postname% myślę, że zadziała
dazuaga
Co dokładnie oznacza identyfikator typu treści w wtyczce CMS Press? Szukam sposobu na dodanie przedrostka z kategorią do niestandardowego typu posta (example.com/category/post_type/postname), ale podczas używania %category%/%identifier%/%postname% w identyfikatorze typu treści automatycznie przekształca się to w ten sposób: %categoryidentifierpostname
murphymakes
jak zwykle doskonałe informacje. dzięki
whimba
I like Custom Post Type UI. It’s light and easy to use but is limited in functionality. So I created my own – http://wordpress.org/extend/plugins/mp-former/. You can try it
simplywendz
To jest tak świetny samouczek do tworzenia niestandardowych postów w WordPressie. Kroki są podane szczegółowo, można je łatwo śledzić. To wielka, wielka pomoc!
hoss9009
Też się nad tym zastanawiałem!!
Pucharowy
Wow, miałem cały ten CMS Press działający, ale nie mogłem zrozumieć, jak sprawić, by pojawił się w postach. Chyba jest tak stary, że wszyscy zakładają, że powinno to być już wiadome. Idealna odpowiedź na to, jak sprawić, by mój niestandardowy typ posta pojawił się w pętli.
Jerry Craig
Podczaszy
Noel Boaz
Dzięki, to mi bardzo pomogło w umieszczeniu mojego niestandardowego typu posta na stronie głównej. Zdecydowanie dodane do zakładek, dzięki.
Ed
Wypróbowałem wtyczkę, bardzo imponujące. Jednak próbuję uzyskać atrybut strony, który pojawi się z atrybutów 'Strony' mojego motywu, tj. możliwość użycia opcji strony pełnowymiarowej. Czy mam przypuszczać, że Twoja wtyczka pobiera atrybuty tylko z układów typu Post, a nie z układów typu Page? Wszystko, czego chcę, to możliwość ustawienia posta na pełny, z góry określony szablon.
Świetna robota – będę tego dużo używać.
Na zdrowie
Ed
Simon
Próbowałem sposobu z wtyczką, ale nie udało mi się wyświetlić posta. Może dlatego, że nie mogłem znaleźć pliku loop.php.
Tak czy inaczej, dziękuję bardzo, jestem pewien, że wkrótce zadziała.
Chciałbym powiedzieć, że jedną super niesamowitą rzeczą, którą można by zrobić z WordPress, jest możliwość tworzenia niestandardowych widoków treści, tak jak w Drupalu z modułem views.
Wiem, że istnieje wtyczka o nazwie pods i pods cms, która ma to umożliwić. Być może mógłbyś poprosić dewelopera o pomoc w poście na wpbeginner, jeśli w ogóle tego nie rozumiesz, tak jak ja. Jestem pewien, że wielu ludzi by to pokochało. Prezentowanie widoków to w końcu to, co czyni CMS prawdziwie dynamicznym CMS-em.
Personel redakcyjny
loop.php może nie istnieć w twoim motywie. Pętla może być również znaleziony w twoim index.php, archive.php, category.php itp. Możesz również utworzyć niestandardową pętlę, jeśli chcesz.
Admin
Peter
Dobry samouczek, dziękuję za udostępnienie.
Mam pytanie dotyczące tego.
Stworzyłem niestandardowy typ posta za pomocą functions.php (kalendarz), który ma niestandardowe pole meta w interfejsie administratora. To pole meta wykorzystuje jQuery w jednym polu.(http://jqueryui.com/demos/datepicker/).
Aby ten datepicker działał, muszę osadzić wymagane skrypty.
add_action(‘admin_enqueue_scripts’,’enqueue_my_scripts’);
działa, ale moje skrypty są ładowane w całym interfejsie administratora. (co zakłóca domyślne jQuery administracji WP)
Potrzebuję więc haka dla mojego niestandardowego typu posta.
this:
add_action(‘register_post_type’,’enqueue_my_scripts’);
doesn’t work because register_post_type isn’t a hook.
Jaki jest więc hak dla niestandardowego typu posta?
Amanda
Możesz spróbować dodać poniższe do definicji swojej funkcji przed zarejestrowaniem skryptu:
if(is_admin()) return;Więc coś w stylu:
function some-function(){
// nie potrzebujemy tego na stronach administracyjnych, więc...
if(is_admin()) return;
// zarejestruj niestandardowy skrypt
wp_enqueue_script( 'some-script' );
}
Evan
Jak sprawić, by każdy typ treści wyświetlał się w pętli? To znaczy, to prawie jak Tumblr. Jeśli opublikuję zdjęcie... muszę dostosować kod w pętli – to samo, jeśli opublikuję link.
Personel redakcyjny
Jak widać w poście, istnieje opcja wyświetlania zarówno niestandardowych typów postów, jak i postów w jednej pętli...
Admin
Michael
Nie mogę sprawić, by pętla działała, aby zapytać o posty mojego niestandardowego typu. Twój przykład wydaje się wystarczająco prosty, więc spróbowałem następującego: $var = query_posts( ‘post_type=sponsor’);
Następnie rozpocząłem pętlę
while ($var ->have_posts()) : $var ->the_post();
Rób rzeczy
endwhile;
to zwraca błąd php:
Fatal error: Call to a member function have_posts() on a non-object in single-sponsor.php on line 22
linia 22 to linia z pętlą while.
Pomysły? Co robię źle?
Romero
Próbowałem utworzyć tag dla niestandardowego pola, a kiedy używam get_the_tags w pętli niestandardowego typu, nic nie drukuje.
Jakieś sugestie?
Sty
Jestem bardzo podekscytowany tą nową funkcją ^-^ Zrobiliście fajny film. Chociaż w waszym przykładzie, dlaczego używać niestandardowych typów postów, a nie po prostu wymyślić kategorię książki i filmy dla postów? W ten sposób oszczędzasz sobie kłopotów z niestandardowym typem posta.
Personel redakcyjny
Po pierwsze, pozwala inaczej organizować rzeczy. Po drugie, możesz mieć zupełnie inny panel pisania z innymi opcjami. Pozwala na znacznie więcej dostosowań...
Admin
Sandra
Dzięki za ten świetny artykuł! Jestem początkującym użytkownikiem WordPressa i może pomożesz mi z tym pytaniem:
Czy można wyświetlić archiwa niestandardowego typu posta na pasku bocznym, tak jak można to zrobić za pomocą wtyczki „display archives by cat” firmy kwebble?
Personel redakcyjny
Tak, jest możliwe wyświetlanie niestandardowych typów postów jako archiwów. Po prostu utwórz niestandardową pętlę na pasku bocznym, aby wyświetlać posty lub kategorie z określonego typu posta.
Admin
lukeMV
Czy są jakieś łatwe do zrozumienia przewodniki, jak dodawać opcje do niestandardowych postów? Na przykład, jeśli film jest dramatem, komedią, horrorem… aby mieć te opcje jako pola wyboru W PANELU edycji niestandardowego posta? Nie mogę znaleźć przewodnika ani wtyczki do tego.
Paul
Cześć, To był świetny artykuł. Miałem nadzieję, że możesz znać odpowiedź na moje pytanie.
W ostatnich kilku wierszach masz:
zwraca wszystkie posty i typy postów o nazwie filmy.
Czy wiesz, jak zwrócić zarówno typy postów o nazwie „filmy”, jak i posty z kategorii „filmy”, ale wykluczyć wszystkie inne posty, które nie mają tej kategorii??
Personel redakcyjny
Użyłbyś parametrów kategorii dla query_posts – http://codex.wordpress.org/Function_Reference/query_posts
Admin
Walter
Czy możesz cofnąć się o krok: Dlaczego w ogóle potrzebuję niestandardowych typów postów? Jaki jest przypadek użycia?
Personel redakcyjny
Niestandardowe typy postów są dobre dla użytkowników, którzy używają WordPressa do czegoś więcej niż tylko bloga, na przykład jako CMS. Powiedzmy, że chcesz mieć stronę z portfolio i blogiem. Oczywiście nie chcesz, aby twoje blogi wyglądały tak samo jak twoje portfolio. Wtedy niestandardowe typy postów okazują się przydatne. Jest to bardzo wszechstronna funkcja, która przenosi WordPress na wyższy poziom. Dla przeciętnego użytkownika bloga prawdopodobnie nie są potrzebne niestandardowe typy postów.
Admin
Tracy B.
Oke, ale nadal próbuję zrozumieć różnicę między tym a zwykłym kategoryzowaniem rzeczy. Stworzyłem wiele stron dla ludzi, gdzie osobne strony robią rzeczy takie jak wyświetlanie tylko kategorii „aktualności” i innej kategorii „projekty” lub czegokolwiek innego. Czym to jest lepsze?
Personel redakcyjny
Jest to lepsze pod względem organizacji. Możesz mieć niestandardową taksonomię, panel pisania itp. dla konkretnego typu posta.
Chris
Nie mogę się powstrzymać od myśli, że byłoby to bardziej użyteczne, gdybyś pokazał coś niezwykłego z typami postów, zamiast używać starego przykładu „filmy i książki”.
A może sideblog używający typów postów, albo coś bardziej praktycznego? To tylko powtarza to, co WP Codex ostatecznie będzie zawierał, jeśli już tam nie jest.
Personel redakcyjny
Przykro nam, że tak się czujesz, Chris. WP Codex nie będzie miał filmu pokazującego, jak to zrobić. Nie ma znaczenia, jak nazwiemy niestandardowe typy postów, chodzi o to, jak je dodać. Nie stworzymy nadzwyczajnej strony tylko po to, by napisać post o niestandardowych typach postów. Jeśli szukasz tej wiedzy, prawdopodobnie lepiej zrobisz to sam. Ten blog nadal musi spełniać potrzeby użytkowników początkujących, dlatego udostępniliśmy metodę z wtyczką.
Admin
Kevin Elliott
Czy to zadziała na WordPress 2.9, czy tylko na 3.0?
Próbowałem użyć wersji 3.0, ale wystąpił jakiś problem, przez który żadne z moich wtyczek nie chciało się aktywować, nawet te, które twierdziły, że się aktywowały. To było bardzo dziwne!
-Kevin
Personel redakcyjny
Działałoby to z wersją 3.0, więc używaj go tylko w wersji 3.0. Spróbuj ponownie zainstalować WordPress 3.0, mamy kilka stron na nim.
Admin
Marc
Właśnie obejrzałem film…
Czy to prawda, że musimy edytować pliki php (= kodowanie na stałe), aby wszystko działało?
Personel redakcyjny
Nie, musisz zrobić jedno lub drugie. W naszym filmie pokazaliśmy oba sposoby. Możesz zrobić to na stałe lub za pomocą wtyczki.
Admin
Marc
Allright, I see, thnx!
W takim razie chyba zacząłeś od trudnej ścieżki kodowania? W tamtym czasie widząc tylko te wszystkie rzeczy związane z kodowaniem, po prostu zrezygnowałem. Dlatego chyba nie widziałem sposobu z wtyczką…
Rilwis
Bardzo fajny artykuł. Wtyczka Custom Post Type UI ma opcje bardzo podobne do surowego kodu PHP rejestrowania typów postów, co jest świetne dla programistów.
Dziękuję za przedstawienie wielu przydatnych wtyczek do pracy z niestandardowymi typami postów.
Kaye Media
Świetny artykuł, czekam na Wp3 =)
Bryan
Cieszę się, że WordPress zintegrował niestandardowe typy postów bezpośrednio w frameworku wp. Jednak nie widzę, w jaki sposób jest to lepsze od używania już dostępnych wtyczek, takich jak Magic Fields czy Flutter. Dzięki tym wtyczkom uzyskujesz ten sam efekt, a także łatwe w konfiguracji niestandardowe pola z wieloma różnymi typami i elastycznością w sposobie wprowadzania i wyświetlania danych. Czy wp 3.0 obsługuje coś takiego od razu?
Personel redakcyjny
Możesz stworzyć interfejs użytkownika dla niestandardowych pól i praktycznie wszystkiego w backendzie za pomocą niestandardowych typów post. Masz rację, że te wtyczki bardzo ułatwiają pracę użytkownikom, ale jeśli któraś z tych wtyczek przestanie działać, nie będziesz miał wyboru.
Admin
Bryan
W porządku. Trochę bawiłem się betą, ale chyba nie tak dużo, jak powinienem. Byłoby ekscytujące, gdyby poszło bardziej w tym kierunku. Ponieważ zdobyłem doświadczenie w używaniu tych wtyczek, prawie nie tworzę teraz strony bez nich.
Byłoby więc wspaniale, gdyby wszystkie te narzędzia były dostępne i zarządzane w ramach oryginalnej aplikacji. Widzę, że prowadzi to do lepszego zarządzania backendem i zachęca więcej osób do przyczyniania się do niego, zamiast mniejszej grupy wspierającej konkretną wtyczkę.
Ian
Myślę, że celowo zostawili część kodu niestandardowych typów postów jako kod. Aby przeciętny użytkownik musiał się z tym zmierzyć.
Abdul Wahid
To świetny artykuł
ravalde
Nie mogę wyświetlić żadnych taksonomii w twentyeleven, ani nie mogę znaleźć samouczka, który pokazywałby mi wszystko od początku do końca, wszystkie wydają się skupiać na twentyten i pętli.