WordPress custom post type (CPT) to typ tresci poza pieciaoma wbudowanymi (post, page, attachment, revision, nav_menu_item). CPTs pozwalaja przechowywac ustrukturyzowane tresci jak produkty, wydarzenia, nieruchomosci, przepisy, opinie czy portfolio, kazdy z wlasnym menu w panelu, ekranem edycji, taksonomiami, struktura URL i hierarchia szablonow. Custom post types wprowadzono w WordPress 2.9 (grudzien 2009) i staly sie standardem wraz z register_post_type() w WordPress 3.0 (czerwiec 2010). CPT rejestruje sie w PHP poprzez register_post_type( $slug, $args ) na hooku init lub wizualnie poprzez pluginy jak Custom Post Type UI (ponad 700.000 aktywnych instalacji), Pods (ponad 100.000) i Meta Box (ponad 400.000). Od WordPress 5.0 (grudzien 2018) CPTs moga wlaczyc edytor blokow przez show_in_rest=true, co eksponuje je takze w REST API pod /wp-json/wp/v2/<slug>. WooCommerce rejestruje CPT product plus shop_order, shop_coupon, product_variation i dziesiec innych. The Events Calendar uzywa tribe_events. ACF Pro moze rejestrowac CPTs przez swoj UI od wersji 6.1 (marzec 2023). Custom post types pozostaja w 2025 trzonem kazdej strony WordPress, ktora nie jest tylko blogiem.
Kiedy uzyc custom post type?
- Produkty e commerce (WooCommerce).
- Wydarzenia (Events Calendar tribe_events).
- Nieruchomosci.
- Portfolio.
- Opinie, czlonkowie zespolu, FAQ.
- Przepisy z danymi strukturalnymi.
- Oferty pracy.
Jak zarejestrowac custom post type
add_action( 'init', 'mysite_register_product_cpt' );
function mysite_register_product_cpt() {
$args = array(
'labels' => array( 'name' => 'Produkty', 'singular_name' => 'Produkt' ),
'public' => true,
'show_in_rest' => true,
'has_archive' => true,
'rewrite' => array( 'slug' => 'produkty' ),
'supports' => array( 'title', 'editor', 'thumbnail', 'excerpt' ),
'menu_icon' => 'dashicons-cart',
);
register_post_type( 'product', $args );
}Wazne argumenty
| Argument | Funkcja |
|---|---|
| public | Ustawia show_ui, publicly_queryable, exclude_from_search domyslnie. |
| show_in_rest | Wymagane dla edytora blokow i endpointu REST. |
| has_archive | Tworzy archiwum pod /<slug>/. |
| supports | Aktywne funkcje: title, editor, thumbnail, excerpt, custom-fields. |
| rewrite | Slug URL. |
Plugin vs motyw
Zawsze rejestruj CPTs w pluginie, nigdy w motywie. W przeciwnym razie po zmianie motywu CPT znika z menu i tresc staje sie niedostepna.
Hierarchia szablonow
- Single: single-product.php, single.php, singular.php, index.php.
- Archive: archive-product.php, archive.php, index.php.
CPTs i REST API
Z show_in_rest => true CPT jest dostepny pod /wp-json/wp/v2/<rest_base>. Headless frontendy korzystaja z tego endpointu.
Pluginy rejestrujace CPTs bez kodu
- Custom Post Type UI (ponad 700.000 instalacji).
- ACF Pro 6.1+ (rejestruje CPTs od marca 2023).
- Pods Framework.
- Meta Box.
- Toolset Types.
Wydajnosc
- Cala zawartosc CPT mieszka w wp_posts. Wydajnosc identyczna do ~100.000 wierszy.
- Nie rejestruj wiecej niz 20 do 30 CPTs na stronie.
- Flush rewrite rules raz przy aktywacji pluginu.
- Setki tysiecy wpisow: rozwaz wlasna tabele (WooCommerce HPOS od 8.0 sierpien 2023).
Czeste bledy
- Zly hook. Uzywaj init.
- Brak show_in_rest.
- Brak flush rewrite rules.
- Rejestracja w motywie.
- Konflikt slug ze strona.
Co sprawdza InspectWP
InspectWP wykrywa custom post types w renderowanym HTML i odpytuje endpointy REST API, gdy sa wystawione. Raport identyfikuje popularnych dostawcow CPT (WooCommerce, Events Calendar, ACF).