Custom Post Types w WordPress – czym są i jak je tworzyć?

WordPress domyślnie obsługuje kilka typów treści: wpisy blogowe, strony, media, komentarze i kilka wbudowanych typów wewnętrznych. Co, jeśli Twoja strona potrzebuje czegoś więcej np. portfolio projektów, bazy klientów, katalogu produktów niezwiązanego z WooCommerce, bazy wiedzy lub listy recenzji? Do tego właśnie służą Custom Post Types (CPT) własne, niestandardowe typy wpisów w WordPress.

Ten poradnik tłumaczy, czym są CPT, kiedy warto z nich korzystać i jak je stworzyć na różne sposoby: przez kod PHP, przez wtyczkę oraz z pomocą narzędzia do generowania kodu.

Czym są Custom Post Types?

Custom Post Type to własny typ treści zdefiniowany w WordPress obok standardowych typów post (wpisy) i page (strony). Każdy CPT ma:

  • Własną nazwę i ikonę w menu panelu administracyjnego.
  • Własny widok listy i edytora w wp-admin.
  • Opcjonalne wsparcie dla standardowych funkcji WordPress (miniatura, wyciąg, pola niestandardowe, komentarze).
  • Własne adresy URL (permalinki) w strukturze strony.
  • Własne taksonomie (odpowiedniki kategorii i tagów dla danego typu).

W praktyce CPT pozwala zorganizować różne rodzaje treści w oddzielne „sekcje" z własną logiką wyświetlania, zamiast upychać wszystko w jeden typ post z dziesiątkami kategorii.

Kiedy warto używać Custom Post Types?

CPT są odpowiednim rozwiązaniem, gdy:

  • Masz odrębny rodzaj treści, który ma inną strukturę niż standardowy wpis blogowy np. projekty portfolio, oferty pracy, przepisy kulinarne, nieruchomości, kursy online, recenzje produktów.
  • Chcesz oddzielić ten typ treści od wpisów blogowych w widoku administracyjnym i nie mieszać ich w jednej liście.
  • Potrzebujesz własnej struktury URL dla tego rodzaju treści (np. /portfolio/nazwa-projektu/).
  • Planujesz wyświetlać ten typ treści z własnym szablonem PHP w inny sposób niż standardowe wpisy.

Kiedy CPT to przerost formy nad treścią: jeśli masz tylko kilka wpisów specjalnego rodzaju i nie planujesz ich rozwijać, kategoria lub tag na standardowym wpisie jest prostszym rozwiązaniem. CPT dodają złożoność, warto ją wprowadzać świadomie.

Metoda 1 — rejestracja CPT przez kod PHP

Tworzenie Custom Post Type przez kod daje pełną kontrolę nad wszystkimi parametrami i nie uzależnia strony od dodatkowej wtyczki. Kod dodaj do pliku functions.php aktywnego motywu podrzędnego (child theme) lub najlepiej do dedykowanej wtyczki dla własnych modyfikacji.

function cal_register_portfolio_cpt() {
    $labels = array(
        'name'          => 'Portfolio',
        'singular_name' => 'Projekt',
        'add_new'       => 'Dodaj projekt',
        'add_new_item'  => 'Dodaj nowy projekt',
        'edit_item'     => 'Edytuj projekt',
        'view_item'     => 'Zobacz projekt',
        'all_items'     => 'Wszystkie projekty',
        'search_items'  => 'Szukaj projektów',
        'not_found'     => 'Nie znaleziono projektów',
    );

    $args = array(
        'labels'        => $labels,
        'public'        => true,
        'has_archive'   => true,
        'rewrite'       => array( 'slug' => 'portfolio' ),
        'supports'      => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
        'menu_icon'     => 'dashicons-portfolio',
        'show_in_rest'  => true, // wymagane dla edytora Gutenberg
    );

    register_post_type( 'portfolio', $args );
}
add_action( 'init', 'cal_register_portfolio_cpt' );

Po dodaniu kodu przejdź do Ustawienia → Bezpośrednie odnośniki i kliknij „Zapisz zmiany" (bez żadnych zmian) jest to konieczne, by WordPress zarejestrował nowe reguły permalinków dla CPT.

Parametr show_in_rest => true jest niezbędny, jeśli chcesz edytować wpisy tego typu w edytorze Gutenberg. Bez niego CPT będzie używać starego edytora TinyMCE.

Metoda 2 — wtyczka Custom Post Type UI

Custom Post Type UI (CPT UI) to najpopularniejsza wtyczka do zarządzania własnymi typami treści. Graficzny interfejs zastępuje ręczne pisanie kodu. Pozwala zdefiniować wszystkie parametry CPT przez formularz w panelu WordPress, bez znajomości PHP.

Po instalacji wtyczki przejdź do CPT UI → Dodaj/Edytuj typy wpisów. Kluczowe pola do wypełnienia:

  • Slug — unikalna nazwa techniczna CPT (małe litery, bez spacji, np. portfolio).
  • Nazwa liczby mnogiej i pojedynczej — wyświetlana w panelu WordPress.
  • Ma archiwum — czy CPT ma stronę archiwum ze wszystkimi wpisami tego typu.
  • Wspierane funkcje — zaznacz, które standardowe pola WordPress mają być dostępne (tytuł, treść, miniatura, itd.).

Własne taksonomie dla Custom Post Types

Podobnie jak wpisy blogowe mają kategorie i tagi, CPT mogą mieć własne taksonomie. Portfolio może mieć „Typ projektu" (strona internetowa, aplikacja, branding), oferty pracy — „Lokalizację" i „Dział firmy".

Rejestracja własnej taksonomii przez kod:

function cal_register_portfolio_taxonomy() {
    register_taxonomy(
        'typ-projektu',
        'portfolio',
        array(
            'label'        => 'Typ projektu',
            'rewrite'      => array( 'slug' => 'typ-projektu' ),
            'hierarchical' => true, // true = jak kategorie, false = jak tagi
            'show_in_rest' => true,
        )
    );
}
add_action( 'init', 'cal_register_portfolio_taxonomy' );

Pola niestandardowe (Custom Fields) dla CPT

CPT w połączeniu z polami niestandardowymi (custom fields) tworzą prawdziwie elastyczny system zarządzania treścią. Wtyczka Advanced Custom Fields (ACF) lub wbudowane pola meta WordPress pozwalają dodać do CPT dowolne pola: daty, ceny, linki, relacje między wpisami, pliki do pobrania.

Przykład: CPT „Oferty pracy" z polami: wynagrodzenie, lokalizacja, tryb pracy (zdalny/stacjonarny), termin aplikacji. Wszystkie te dane możesz wyświetlić w szablonie strony oferty bez konieczności umieszczania ich w treści edytora.

Szablony wyświetlania CPT

WordPress szuka szablonu PHP do wyświetlenia CPT zgodnie z hierarchią szablonów. Dla CPT o slugu portfolio:

  • single-portfolio.php — szablon pojedynczego wpisu CPT.
  • archive-portfolio.php — szablon archiwum wszystkich wpisów CPT.

Utwórz te pliki w katalogu aktywnego motywu podrzędnego (child theme), żeby zmiany nie przepadły przy aktualizacji motywu.

CPT a hosting i środowisko serwera

Custom Post Types nie wymagają specjalnej konfiguracji serwera, działają na każdym hostingu WordPress. Jednak przy dużej liczbie wpisów CPT (tysiące rekordów) warto zadbać o indeksowanie odpowiednich kolumn w bazie danych MySQL i rozważyć serwer VPS z dedykowanymi zasobami, który poradzi sobie z bardziej złożonymi zapytaniami do bazy.

Przed wdrożeniem kodu rejestrującego CPT na serwerze produkcyjnym przetestuj go na środowisku deweloperskim i wykonaj kopię zapasową bazy danych. Błąd w rejestracji CPT może skutkować niedostępnością istniejących treści powiązanych z danym typem.

Dla firm, które chcą wdrożyć zaawansowaną strukturę CPT bez angażowania własnych zasobów deweloperskich, opieka WordPress to droga do profesjonalnego wdrożenia z technicznym wsparciem na każdym etapie.

Podsumowanie

Custom Post Types to jeden z najpotężniejszych mechanizmów WordPress pozwalają zbudować naprawdę elastyczny system zarządzania treścią bez rezygnowania z zalet platformy. Kluczem jest przemyślane użycie: CPT wnoszą wartość wtedy, gdy masz wyraźnie wyodrębniony rodzaj treści z własną strukturą i logiką wyświetlania. Dla prostych potrzeb kategorie i tagi na standardowych wpisach są wystarczające i prostsze w utrzymaniu.