encyklopedia.run.place

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 public określa, czy typ jest widoczny w interfejsie i w API.
  • has_archive włącza archiwum dostępne pod adresem /portfolio/.
  • Tablica supports definiuje, które pola edytora będą dostępne (tytuł, edytor, miniatura, wyciąg).
  • Pozycja show_in_rest zapewnia 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}.php lub archive-{post_type}.php do wyświetlania treści CPT.

Zastosowania w praktyce

Custom post type jest wykorzystywany w różnych typach witryn:

  1. Sklepy internetowe – typ product w WooCommerce.
  2. Portfolia – oddzielny typ portfolio prezentujący realizacje.
  3. Wydarzenia – event z własnymi polami daty i lokalizacji.
  4. 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ę supports do niezbędnych elementów – dodatkowe pola mogą zwiększać rozmiar tabeli wp_posts.
  • Stosować WP_Query z parametrem post_type zamiast 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