Portfolio, Opinie, Katalog produktów, Ogłoszenia, Projekty, Usługi – to tylko przykładowe funkcjonalności, które często można spotkać na stronach internetowych firm różnych branż. Wspomniane treści mogą być tworzone „ręcznie” jako poszczególne podstrony lub wpisy. Pomysłowi redaktorzy mogą nawet wpaść na pomysł stworzenia specjalnej kategorii lub tagu co pozwoli ręcznie oddzielić, przykładowo: realizacje, od „zwykłych” artykułów blogowych.
Wadą takiego rozwiązania może być „wymieszanie” się tych specyficznych treści z innymi wpisami, np. blogiem i po jakimś czasie utrzymanie logicznej struktury strony może sprawiać niemały kłopot.
Co to jest własny typ postu?
Rozwiązaniem takich problemów jest Własny Typ Postu (ang. Custom Post Type) czyli niestandardowy, spersonalizowany do konkretnego przypadku, logicznie oddzielony rodzaj postów.
WordPress standardowo umożliwia publikować treści w takim rodzaju jak:
- Wpisy (Posts),
- Strony (Pages)
Są jeszcze media, pozycje menu i wersje postów, które z architektonicznego punktu widzenia też są postami.
Strony służą do tworzenia w miarę unikalnych podstron z przeróżnymi treściami. Praktycznymi przykładami może być strona „O nas”, „Kontakt” czy „Polityka Prywatności”. Strony te mają jedyny w swoim rodzaju układ i treści na poszczególnych stronach nie są analogiczne. Charakterystyczna dla stron jest możliwość tworzenia hierarchicznej relacji pomiędzy stronami (rodzic – dziecko).
Wpisy to już zazwyczaj kolekcja szablonowych treści takich jak „aktualności” czy artykuły blogowe. Domyślnie, wpisy można organizować w kategorie oraz wykorzystywać w ramach nich tagi oraz inne własne taksonomie. Czytaj więcej w artykule Własna taksonomia w WordPress.
Tworzenie / Rejestrowanie własnego typu postu
Rejestracja własnego typu Postu to dość elementarna i natywna funkcjonalność WordPressa. Aby stworzyć nowy typ postu wystarczy użyć funkcji register_post_type() z odpowiednimi argumentami:
function create_portfolio() { register_post_type('Portfolio', array( 'labels' => array( 'name' => ('Portfolio'), 'singular_name' => ('Portfolio') ), 'public' => true, 'has_archive' => true, 'menu_icon' => 'dashicons-portfolio', 'rewrite' => array('slug' => 'portfolio'), 'taxonomies' => array('post_tag', 'category'), 'supports' => array('title', 'editor', 'thumbnail', 'excerpt'), )); } add_action('init', 'create_portfolio');
- labels (podobnie jak w przypadku własnych taksonomii) umożliwiają dostosować napisy w UI.
- public determinuje czy post ma być dostępny dla użytkowników niezalogowanych.
- has_archive mówi WordPressowi aby stworzył automatyczne archiwa czyli podstrony z listą wpisów z danego typu..
- menu-icon jak można się domyślić, pozwala dostosować ikonkę widoczną w menu bocznym Kokpitu.
- rewrite pozwala dostosować specjalny przedrostek w adresach url,
- taxonomies decyduje o ym jakie taksonomie mają działać w obrębie typu postu,
- supports, to osobna tablica, która pozwala określić jakie funkcjonalności mają być wspierane przez nasz typ postu.
Kod taki można dodać do pliku functions.php bieżącego motywu lub do własnej wtyczki.
Praktyczny przykład wykorzystania Custom Post Type
Po teoretycznym wprowadzeniu, najlepszym sposobem na pełne zaprezentowanie własnego typu postu będzie praktyczny przykład oparty o portfolio lub realizacje.
Pewnie każdy z czytelników doskonale wie jak działa portfolio ale podsumujmy najważniejsze funkcjonalności jakie chcemy uzyskać. Na stronie głównej ma być slajder z kilkoma najnowszymi pracami:

Witryna ma zawierać osobną podstronę ze wszystkimi pracami (tzw. archiwum):

Kliknięcie w link przenosi do podstrony ze szczegółami pracy:

Aby uzyskać taki efekt, wystarczy skopiować przykład z poprzedniego listingu. Aby pokazać na stronie głównej (np. w szablonie front-page.php) miniatury ostatnich prac wystarczy użyć takiej pętli. Zauważ, że argumenty zawierają pole 'post_type’.
<?php global $post; $args = array('posts_per_page'=>8, 'post_type' => 'portfolio'); $myposts = get_posts( $args ); foreach ( $myposts as $post ) : setup_postdata( $post ); ?> <img src="<?php the_post_thumbnail_url('large'); ?>"> <a href="<?php the_permalink(); ?>"> <h4><?php the_title(); ?></h4> </a> <?php endforeach; wp_reset_postdata();?>
Osobną stronę ze wszystkimi pracami system WordPress stworzy automatycznie, ponieważ w deklaracji własnego postu użyliśmy argumentu has_archive => true. Wystarczy stworzyć osobny szablon archive-portfolio.php i użyć tam dokładnie takiej pętli jaka jest pokazana wyżej zmieniając ilość posts_per_page według własnych preferencji.
Podstrona z pojedynczą pracą będzie wymagać stworzenia szablonu single-portfolio.php Stronę można rozbudowywać za pomocą mechanizmu własnych pól. Jeżeli nie wiesz skąd się wzięły te nazwy plików oraz nie do końca rozumiesz działania pętli, zapraszam do zapoznania się z artykułem na temat tworzenia motywów i szablonów WordPress.
Jak widać w WordPressie pojawiła się osobna podstrona umożliwiająca tworzenie, edycję i organizację prac:

Własny typ postu za pomocą wtyczki
Istnieją też wtyczki do tworzenia Custom Postów. Jedną z nich jest Custom Post Type UI autorstwa WebDevStudios. Wtyczka pozwala „wyklikać” własny typ postu z potrzebnymi opcjami:

Rozwiązanie takie polecam w celu poeksperymentowania, nauki i ewentualnie dla początkujących użytkowników. Choć rozwiązanie wydaje się dopracowane a tworzenie nowej funkcjonalności za pomocą graficznego interfejsu użytkownika jest nawet trochę kuszące, osobiście pozostanę przy tworzeniu własnych typów postów za pomocą kodu.
Dlaczego? Nie dość, że tego typu operacje wykonuje się raz, dodanie kodu trwa krócej niż instalacja i konfiguracji wtyczki. Unikając wykorzystywania wtyczki nie muszę też martwić się potencjalnymi problemami czy to z kompatybilnością pomiędzy wersjami czy bezpieczeństwem. Dodanie „na sztywno” kodu, który rejestruje nowy typ postu rokuje też większą wydajność w porównaniu do używania narzędzia które efekty swojej pracy zapisuje w bazie danych. Do listy wtyczek nie dochodzi kolejna a panel bez dodatkowej pozycji wydaje się czystszy i bardziej intuicyjny dla klienta.
Edytor Gutenberg we własnych typach postów
Kiedy zarejestrujemy nowy Custom Post Type, przy próbie dodania / edycji obecnych postów okaże się, że mamy do dyspozycji klasyczny edytor a nie nowy edytor blokowy Gutenberg:

Aby móc korzystać z edytora Gutenberg, który daje nam więcej wygody i możliwości należy się upewnić, że w opcjach, które podajemy w drugim argumencie funkcji register_post_type() nie brakuje tych dwóch linijek:
'show_in_rest' => true, 'supports' => array('title', 'editor'),
Od tej chwili będziemy mogli korzystać z edytora blokowego Gutenberg we własnych typach postów WordPress:

Własne typy postów mogą obsługiwać dowolną liczbę wbudowanych funkcji podstawowych, takich jak: pola niestandardowe czy miniatury postów. To jakie rozwiązania ma obsługiwać nasz typ postu zależy od argumentu $supports. Czytaj więcej o dostępnych opcjach w dokumentacji, do której link zamieściłem na końcu wpisu.
Podsumowanie
Własny typ postu to podstawowa funkcjonalność WordPress, która niewątpliwie przyda się na stronach, które mają zawierać pogrupowane posty inne niż wpisy blogowe i zwykłe podstrony. To idealne rozwiązanie dla funkcjonalności typu, katalog produktów, portfolio, opinie, pracownicy, oferty pracy, czy materiały do pobrania.
Źródła:
- https://wordpress.org/support/article/post-types/
- https://developer.wordpress.org/reference/functions/register_post_type/
Odpowiedz lub skomentuj