Custom post type
Custom post type (w skrócie CPT) to mechanizm dostępny w WordPress, który umożliwia tworzenie dodatkowych typów treści poza domyślnymi: post, page, attachment, revision oraz nav_menu_item. Dzięki CPT programiści i administratorzy mogą dostosować strukturę bazy danych do potrzeb konkretnego projektu, definiując własne typy obiektów, takie jak „portfolio”, „rezerwacja”, „produkt” czy „recenzja”.
Historia i kontekst
Funkcjonalność custom post type po raz pierwszy wprowadzono w wersji 3.5 WordPressa w 2010 roku. Od tego czasu stała się integralnym elementem tworzenia systemów zarządzania treścią opartych na WordPressie, umożliwiając budowanie rozbudowanych aplikacji internetowych bez konieczności modyfikacji rdzenia.
Podstawowe pojęcia
- Typ wpisu (post type) – nazwa identyfikująca grupę podobnych rekordów w tabeli
wp_posts. - Rejestracja – proces, w którym przy pomocy funkcji
register_post_type()dodawany jest nowy typ wpisu. - Argumenty – tablica parametrów definiująca zachowanie i wygląd CPT w panelu administracyjnym.
- Taksonomie – kategorie i tagi powiązane z danym typem wpisu; mogą być standardowe (kategoria, tag) lub własne.
Rejestracja custom post type
Rejestracja odbywa się najczęściej w pliku functions.php motywu lub w dedykowanej wtyczce. Przykładowy kod ilustruje podstawowe użycie:
function mytheme_register_cpt() {
$labels = array(
'name' => _x( 'Portfolio', 'post type general name', 'mytheme' ),
'singular_name' => _x( 'Projekt', 'post type singular name', 'mytheme' ),
'add_new' => _x( 'Dodaj nowy', 'portfolio', 'mytheme' ),
'add_new_item' => __( 'Dodaj nowy projekt', 'mytheme' ),
'edit_item' => __( 'Edytuj projekt', 'mytheme' ),
'new_item' => __( 'Nowy projekt', 'mytheme' ),
'view_item' => __( 'Zobacz projekt', 'mytheme' ),
'search_items' => __( 'Szukaj projektów', 'mytheme' ),
'not_found' => __( 'Nie znaleziono projektów', 'mytheme' ),
'not_found_in_trash' => __( 'Brak projektów w koszu', 'mytheme' ),
);
$args = array(
'labels' => $labels,
'public' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'portfolio' ),
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'taxonomies' => array( 'category', 'post_tag' ),
'show_in_rest' => true, // Gutenberg
);
register_post_type( 'portfolio', $args );
}
add_action( 'init', 'mytheme_register_cpt' );
W powyższym przykładzie:
- Użyto funkcji
_x()oraz__()z PHP‑owych funkcji internacjonalizacji. - Parametr
publicokreśla, czy typ jest widoczny w interfejsie i w API. has_archivewłącza archiwum dostępne pod adresem/portfolio/.- Tablica
supportsdefiniuje, które pola edytora będą dostępne (tytuł, edytor, miniatura, wyciąg). - Pozycja
show_in_restzapewnia kompatybilność z REST API oraz edytorem blokowym.
Powiązane elementy
Custom post type współdziała z innymi składnikami WordPressa:
- Taksonomie – można rejestrować własne taksonomie (np. rodzaj_projektu) i łączyć je z CPT.
- Meta boxy – pola niestandardowe przechowujące dodatkowe informacje o wpisie.
- Custom fields – alternatywa dla meta boxów, umożliwiająca przechowywanie pojedynczych wartości.
- Hierarchia szablonów – WordPress automatycznie wybiera plik
single-{post_type}.phplubarchive-{post_type}.phpdo wyświetlania treści CPT.
Zastosowania w praktyce
Custom post type jest wykorzystywany w różnych typach witryn:
- Sklepy internetowe – typ product w WooCommerce.
- Portfolia – oddzielny typ portfolio prezentujący realizacje.
- Wydarzenia – event z własnymi polami daty i lokalizacji.
- Katalogi – np. property dla agencji nieruchomości.
Wydajność i najlepsze praktyki
Aby uniknąć problemów z wydajnością, zaleca się:
- Rejestrować CPT w akcji
init– jest to najwcześniejszy punkt, w którym WordPress jest już załadowany, ale przed zapytaniami do bazy danych. - Używać
register_post_type()jedynie raz; powielone wywołania mogą prowadzić do konfliktów. - Ograniczać liczbę
supportsdo niezbędnych elementów – dodatkowe pola mogą zwiększać rozmiar tabeliwp_posts. - Stosować
WP_Queryz parametrempost_typezamiast pobierać wszystkie wpisy i filtrować ich w PHP.
Przyszłość custom post type
Od wersji 5.0, wydanej w 2018 roku, WordPress wprowadził Full Site Editing, które jeszcze bardziej podkreśla znaczenie CPT w budowie blokowych szablonów. W kolejnych wersjach planowane są ulepszenia w REST API oraz lepsza integracja z edytorem bloków, co przyczyni się do jeszcze większej elastyczności przy definiowaniu własnych typów treści.
Literatura i powiązane artykuły
- WordPress Codex – Custom Post Types
- Developer Handbook – Registering Custom Post Types
- PHP – język programowania używany w WordPressie.
- REST API – interfejs umożliwiający dostęp do danych CPT zewnętrznie.
- Gutenberg – edytor blokowy WordPressa, obsługuje CPT od wersji 5.0.