
💡 Jak utworzyć niestandardowy typ wpisu w WordPress: kod i wtyczka
Standardne „Wpisy" i „Strony" pokrywają większość zadań typowej witryny. Jednak gdy pojawia się katalog produktów, baza nieruchomości lub portfolio projektów, te dwa typy treści przestają wystarczać. Mieszanie produktów z wersjami roboczymi bloga jest niewygodne, a przeciążanie stron polami niestandardowymi to prosta droga do chaosu w panelu administracyjnym.
WordPress rozwiązuje ten problem za pomocą niestandardowych typów wpisów, Custom Post Types (CPT). Tworzy Pan osobny dział w menu bocznym, z własnymi polami, kategoriami i szablonami wyświetlania. Produkty żyją oddzielnie od artykułów. Wydarzenia nie mieszają się ze stronami. Dane pozostają tam, gdzie ich miejsce.
Poniżej dwa sprawdzone sposoby: przez kod z register_post_type() (elastycznie, zero zbędnych wtyczek) i przez bezpłatną wtyczkę CPT UI (bez ani jednej linii PHP). Oba działają na WordPress 6.7+ i są przetestowane na produkcyjnych stronach.
💡 Szybki przegląd:
- Rejestruje Pan nowy typ wpisu przez funkcję rdzenia
register_post_type(), bez wtyczek, z pełną kontrolą nad parametrami. - Alternatywa bez kodu: wtyczka Custom Post Type UI daje interfejs wizualny, obniża próg wejścia i eliminuje ryzyko błędów składniowych.
- Po rejestracji typ pojawia się w menu bocznym. Ostatni szlif to taksonomie, pola i zresetowanie bezpośrednich odnośników.
Czym jest niestandardowy typ wpisu
Każda treść w WordPressie to wpis z polem post_type w tabeli wp_posts. Dla wpisów na blogu jest to post. Dla stron page. Dla załączników attachment. Niestandardowy typ dodaje kolejną wartość: product dla produktów, event dla wydarzeń, portfolio dla projektów. Dowolną, dopasowaną do zadania witryny.
Każdy CPT otrzymuje własną pozycję w panelu administracyjnym, strukturę URL (/events/webinar-2026/), własne taksonomie oraz wsparcie dla potrzebnych bloków edytora: miniatury, zajawki, edytor, komentarze. Wszystko to włącza się znacznikami w tablicy supports, bez żadnej magii.
Główna korzyść to porządek. Produkty nie pływają w strumieniu bloga. Wydarzeń nie trzeba wyodrębniać filtrem z ogólnej masy. Administrowanie przyspiesza, wyszukiwanie na stronie działa precyzyjniej.
Sposób 1: rejestracja przez kod, register_post_type()
Podstawowa metoda, która działa od WordPressa 3.0. Żadnych zewnętrznych wtyczek. Kod umieszcza się w functions.php motywu potomnego lub, bezpieczniej, przez wtyczkę Code Snippets: błąd w kodzie nie położy strony, a jedynie wyłączy konkretny fragment.
Krok 1: funkcja na haku init
Funkcję podpina się pod hak init. Wcześniej nie można, rdzeń nie jest jeszcze gotowy na przyjmowanie rejestracji. Później typ nie zostanie przechwycony aż do następnego żądania. Oto minimalny działający szkielet:
1 /** 2 * Регистрирует пользовательский тип записи «Книги». 3 * Разместите в functions.php дочерней темы или через Code Snippets. 4 */ 5 function myprefix_register_book_post_type() { 6 register_post_type( 'book', array( 7 'labels' => array( 8 'name' => 'Книги', 9 'singular_name' => 'Книга', 10 'add_new_item' => 'Добавить книгу', 11 'edit_item' => 'Редактировать книгу', 12 'view_item' => 'Смотреть книгу', 13 'search_items' => 'Искать книги', 14 'not_found' => 'Книг не найдено', 15 ), 16 'public' => true, 17 'has_archive' => true, 18 'rewrite' => array( 'slug' => 'books' ), 19 'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ), 20 'show_in_rest' => true, 21 'menu_icon' => 'dashicons-book-alt', 22 ) ); 23 } 24 add_action( 'init', 'myprefix_register_book_post_type' );
Po wstawieniu kodu w panelu administracyjnym pojawia się sekcja „Książki". URL wpisów, site.ru/books/название-книги/. Działa od razu.
Krok 2: kluczowe parametry
Funkcja przyjmuje dwa argumenty: ciąg znaków klucza typu (do 20 znaków, alfabet łaciński i myślniki) oraz tablicę ustawień. Oto parametry, które warto świadomie skonfigurować:
Parametr | Co robi | Zalecenie |
|---|---|---|
| Widoczność w panelu i na froncie |
|
| Strona archiwum wszystkich wpisów typu |
|
| Struktura URL (slug) | Proszę ustawić jawnie, bez znaków specjalnych |
| Bloki edytora | Minimum: |
| Dostępność w edytorze blokowym |
|
| Ikona w menu bocznym | Proszę wybrać z Dashicons |
Krok 3: taksonomie
Kategorie i tagi wpisów domyślnie nie są powiązane z Pana CPT. Proszę utworzyć własne:
1 function myprefix_register_book_taxonomies() { 2 register_taxonomy( 'genre', 'book', array( 3 'label' => 'Жанры', 4 'rewrite' => array( 'slug' => 'genre' ), 5 'hierarchical' => true, 6 'show_in_rest' => true, 7 ) ); 8 9 register_taxonomy( 'book_tag', 'book', array( 10 'label' => 'Метки книг', 11 'rewrite' => array( 'slug' => 'book-tag' ), 12 'hierarchical' => false, 13 'show_in_rest' => true, 14 ) ); 15 } 16 add_action( 'init', 'myprefix_register_book_taxonomies' );
Taksonomie rejestruje się przez register_taxonomy() z jawnym powiązaniem do post_type jako drugim parametrem. hierarchical => true daje strukturę drzewiastą, jak w kategoriach. false to płaska lista, jak w tagach.
Krok 4: resetowanie bezpośrednich odnośników
Po rejestracji proszę wejść w Ustawienia → Bezpośrednie odnośniki i kliknąć „Zapisz zmiany", nawet jeśli nic Pan nie zmieniał. WordPress ponownie zapisze reguły routingu. Bez tego kroku adresy URL typu /books/ będą zwracać błąd 404.
Kiedy kod jest wystarczający
Metoda jest dobra dla jednego lub dwóch niestandardowych typów, gdy struktura nie zmienia się często. Plus: zero zbędnych wtyczek i pełna kontrola nad każdym parametrem. Minus: przy złożonych powiązaniach między kilkoma CPT i frontowymi formularzami przesyłania kod szybko się rozrasta.
Sposób 2: bez kodu, wtyczka Custom Post Type UI
Jeśli nie chce Pan zaglądać do functions.php, proszę zainstalować Custom Post Type UI. Bezpłatna wtyczka od WebDevStudios: milion aktywnych instalacji, ocena 4,6 na WordPress.org. Zaktualizowana w maju 2026, przetestowana aż do WP 7.0.

Jak utworzyć CPT przez interfejs
- Proszę zainstalować wtyczkę: Wtyczki → Dodaj nową → „Custom Post Type UI" → Zainstaluj → Aktywuj.
- Proszę przejść do CPT UI → Add/Edit Post Types.
- Proszę wypełnić pola: Post Type Slug (alfabet łaciński, np.
event), Plural Label („Wydarzenia"), Singular Label („Wydarzenie"). - W bloku Settings proszę zaznaczyć: Public (True), Has Archive (True), Show in REST API (True).
- W bloku Supports proszę zaznaczyć minimum: Title, Editor, Thumbnail, Excerpt.
- Proszę kliknąć Add Post Type.
Taksonomie tworzy się w tym samym miejscu, na karcie Add/Edit Taxonomies. Proszę wskazać powiązanie z Pana typem wpisu, kategorie pojawią się w menu bocznym.
Mocne strony
Szybka rejestracja bez ryzyka błędu składniowego: wtyczka sama składa poprawną tablicę $args. Karta Tools umożliwia migrację typów między witrynami przez eksport i import kodu. CPT UI Pro dodaje bloki do wyświetlania na froncie oraz kolumny typu „przeciągnij i upuść" w panelu administracyjnym, ale darmowa wersja w pełni pokrywa zadanie rejestracji.
Proszę zwrócić uwagę: wtyczka jedynie rejestruje typy i taksonomie. Do wyświetlania na froncie potrzebne będą albo szablony w motywie, albo CPT UI Pro, albo połączenie z Advanced Custom Fields lub Elementor.
Porównanie: kod kontra wtyczka
Kryterium | Kod ( | Wtyczka (CPT UI) |
|---|---|---|
Próg wejścia | Wymagana znajomość tablic PHP | Interfejs jak w standardowych ustawieniach WP |
Liczba CPT | Nieograniczona | Nieograniczona |
Przenoszenie między witrynami | Kopiowanie kodu | Eksport/import przez Tools |
Zbędny kod na stronie | Brak | Plus jedna wtyczka |
Zależność od wtyczki | Brak | Jest, CPT UI musi być aktywna |
Dokumentacja |
W praktyce często się to łączy: rejestruje się typy przez CPT UI dla szybkości, a pola dodaje przez Advanced Custom Fields. W efekcie powstaje wizualny interfejs konfiguracji bez ani jednej linii PHP.
⁉️🤔 Często zadawane pytania
Czy trzeba resetować bezpośrednie odnośniki po utworzeniu CPT?
Tak, obowiązkowo. Proszę wejść w Ustawienia → Bezpośrednie odnośniki i kliknąć „Zapisz". WordPress ponownie zapisze reguły routingu. Bez tego nowe adresy URL typu
/books/będą zwracać błąd 404.
Czym CPT UI różni się od ACF w rejestracji typów?
CPT UI jedynie rejestruje typ wpisu i taksonomie. ACF, począwszy od wersji 6.1, również potrafi rejestrować CPT, ale jego główną siłą są pola niestandardowe. Połączenie CPT UI + ACF daje interfejs dla typów i elastyczne pola. Nie jest Pan związany z jednym dostawcą.
Czy można zmienić nazwę istniejącego typu wpisu?
Bezpośredniego mechanizmu nie ma. Przy zmianie
post_typew bazie stare wpisy znikają z panelu administracyjnego. Prawidłowa ścieżka: utworzyć nowy typ o żądanej nazwie, przenieść wpisy zapytaniem SQLUPDATE wp_posts SET post_type = 'new_type' WHERE post_type = 'old_type'i dopiero potem usunąć starą rejestrację. Pełna kopia zapasowa bazy przed migracją jest obowiązkowa.
Czy niestandardowe typy znikną przy zmianie motywu?
Jeśli typy są zarejestrowane w
functions.phpmotywu, tak, przy zmianie motywu znikną z panelu administracyjnego. Wpisy pozostaną w bazie, ale nie będą widoczne. Proszę rejestrować CPT w osobnej wtyczce lub przez Code Snippets, wtedy typy przetrwają każdą zmianę motywu.
Jak wyświetlić CPT na stronie głównej w ogólnym strumieniu?
Proszę dodać filtr w Code Snippets:
add_filter( 'pre_get_posts', function( $query ) { if ( $query->is_home() && $query->is_main_query() ) { $query->set( 'post_type', array( 'post', 'book' ) ); } } );. Proszę podstawić swójpost_typedo tablicy, wpisy pojawią się w strumieniu obok zwykłych wpisów.
Który sposób wybrać: podsumowanie
Obie metody prowadzą do tego samego rezultatu: w menu bocznym pojawia się nowa sekcja, gotowa do wypełnienia. Różnica tkwi jedynie w narzędziu.
Jeśli pracuje Pan z witryną ręcznie i nie boi się functions.php, proszę sięgnąć po kod. Jedna funkcja register_post_type(), zero zbędnych wtyczek. Pasuje do landing page’y, niewielkich katalogów i projektów ze wsparciem technicznym dewelopera.
Jeśli przekazuje Pan witrynę klientowi lub buduje projekt contentowy na kilkunastu typach, proszę zainstalować CPT UI. Interfejs wizualny obniża próg wejścia, a eksport konfiguracji oszczędza godziny przy przenoszeniu między środowiskami.
W każdym przypadku po rejestracji proszę skonfigurować wyświetlanie: szablony single i archive w motywie lub wizualne budowanie przez CPT UI Pro / Elementor Pro. Bez tego kroku treść pozostanie tylko w panelu administracyjnym.



