Custom Post Types, czyli Własne Typy Wpisów, to coś, czego nauczyłem się dość późno – po 7 latach pracy z WordPressem. I pokochałem, jak dziecko czipsy. Z tą różnicą, że od tego tyłek mi nie urośnie.
Czym są Custom Post Types?
WordPress posiada 3 główne typy wpisów: Strony, Wpisy i Własne Typy Wpisów. Na nich właśnie opiera się m.in. WooCommerce – wtyczka zmieniająca WordPress w sklep online. Ale Custom Post Types przydadzą się również, gdy np. chcesz na swojej stronie stworzyć Portfolio. I właśnie na takim przykładzie pokażę Ci, jak to zrobić.
Dodaj do pliku functions.php w swoim motywie potomnym:
/* --- WŁASNE PORTFOLIO --- */
function portfolio_post_type() {
$labels = array(
'name' => 'Portfolio',
'singular_name' => 'Projekt',
'menu_name' => 'Portfolio',
'all_items' => 'Wszystkie projekty',
'view_item' => 'Zobacz projekt',
'add_new_item' => 'Dodaj nowy projekt',
'add_new' => 'Dodaj projekt',
'edit_item' => 'Edytuj projekt',
'update_item' => 'Aktualizuj',
'search_items' => 'Szukaj projektu',
'not_found' => 'Nie znaleziono',
'not_found_in_trash' => 'Nie znaleziono'
);
$args = array(
'label' => 'portfolio',
'rewrite' => array(
'slug' => 'portfolio'
),
'description' => 'DESCRIPTION',
'labels' => $labels,
'supports' => array( 'title', 'editor', 'thumbnail'),
'taxonomies' => array(),
'hierarchical' => false,
'public' => true,
'show_ui' => true,
'show_in_menu' => true,
'show_in_nav_menus' => true,
'show_in_admin_bar' => true,
'menu_position' => null,
'menu_icon' => 'dashicons-id-alt',
'can_export' => true,
'has_archive' => true,
'exclude_from_search' => false,
'publicly_queryable' => true,
'capability_type' => 'post',
);
register_post_type( 'portfolio', $args );
}
add_action( 'init', 'portfolio_post_type', 0 );
Tu wypada załączyć krótką legendę:
'name'
– to tytuł widoczny w Kokpicie w widoku wszystkich wpisów oraz w Menu.'singular_name'
– tytuł widoczny w górnym pasku, pod „+Dodaj” .'menu_name'
– to tytuł zakładki, widoczny w panelu bocznym Kokpitu.'add_new'
– przycisk przy tytule we wszystkich wpisach.'all_items'
– tytuł widoczny pod tytułem zakładki, odpowiadający wszystkim wpisom.'view_item'
– link widoczny w górnym pasku obok „+Dodaj”.'edit_item'
– etykieta edycji Wpisu.'search_items'
– treść przycisku wyszukiwania na stronie wszystkich wpisów.'not_found'
i'not_found_in_trash'
– treść po wyszukiwaniu'label'
– nazwa rodzaju posta pokazana w menu, zwykle w liczbie mnogiej.'rewrite'
– wyzwala obsługę przepisywania linku dla tego typu postu. Domyślnie true, używając'post_type'
jako przyjaznego linku.'description'
– krótkie opisowe streszczenie typu postu.'supports'
– podstawowe funkcje obsługiwane przez typ postu. Może przyjmować wartości:'title'
– tytuł'editor'
– edytor tekstu'author'
– autora'thumbnail'
– miniaturę wpisu'excerpt'
– wypis'trackbacks'
– trackbacki, czyli wymiana informacji o linkach pomiędzy blogami'custom-fields'
– własne pola'comments'
– komentarze'revisions'
– poprzednie wersje wpisów'page-attributes'
– atrybuty wpisu (szablony i kolejność w menu), hierarchia musi być włączona'post-formats'
– formaty wpisów
'taxonomies'
– tablica identyfikatorów taksonomii, które zostaną zarejestrowane dla typu postu. Taksonomie można zarejestrować później za pomocąregister_taxonomy ()
lubregister_taxonomy_for_object_type ()
.'hierarchical'
– określa, czy typ wpisu jest hierarchiczny. Domyślnie false.'public'
– określa, czy typ wpisu jest przeznaczony do publicznego użytku za pośrednictwem interfejsu administratora lub przez użytkowników front-endu. Chociaż domyślne ustawienia'exclude_from_search'
,'public__queryable'
,'show_ui'
i'show_in_nav_menus'
są dziedziczone z'public'
, każde z nich nie opiera się na tej relacji i kontroluje bardzo konkretną intencję. Domyślnie false.'show_ui'
– określa, czy ma być generowany interfejs użytkownika do zarządzania tym typem postu w Kokpicie. Domyślna wartość jest taka, jak'public'
.'show_in_menu'
– określa, gdzie wyświetlić typ wpisu w pasku bocznym Kokpitu. Aby zadziałało,'show_ui'
musi być true. Wartość domyślna jest taka sama jak'show_ui'
.'show_in_nav_menus'
– udostępnia ten typ posta do wyboru w menu nawigacyjnym. Domyślna wartość jest taka, jaka jest w'public'
.'show_in_admin_bar'
– udostępnia ten typ posta za pośrednictwem paska administratora. Wartość domyślna jest taka jak'show_in_menu'
.'menu_position'
– określa pozycję w w pasku bocznym Kokpitu, w jakiej powinien się pojawić typ postu. Aby działać,'show_in_menu'
musi być true. Domyślnie null (na końcu).'menu_icon'
– adres URL ikony używanej w tym menu. Możesz użyć pliku SVG , zachowując wymiary 20×20 px, albo wstawić nazwę ikony ze strony https://developer.wordpress.org/resource/dashicons/. Wstaw none, aby pozostawić puste. Domyślnie używana jest ikona postów.'can_export'
– określa, czy ma być możliwy eksport wpisów. Domyślnie true.'has_archive'
– określa, czy ma być dostępne archiwum postów. Domyślnie false.'exclude_from_search'
– określa, czy posty tego typu mają być wykluczane z wyników wyszukiwania front-endu. Wartość domyślna to przeciwna wartość'public'
.'capability_type'
– ciąg używany do budowania możliwości odczytu, edycji i usuwania. Domyślnie'post'
.
Kategorie w Custom Post Types
Jeszcze jedna rzecz. Jeśli chcesz zdefiniować kategorie Własnych Typów Wpisów nie możesz ich zdefiniować za pomocą 'taxonomies' => array( 'category' )
, ponieważ wtedy będziesz mieć wspólne kategorie zarówno dla Custom Post Types, jak i dla zwykłych Wpisów. Dlatego musisz dodać jeszcze:
/* --- WŁASNE KATEGORIE PORTFOLIO --- */
add_action( 'init', 'portfolio_tax' );
function portfolio_tax() {
register_taxonomy(
'kategorie-projektow',
'portfolio',
array(
'label' => __( 'Kategorie projektów' ),
'rewrite' => array( 'slug' => 'kategorie' ),
'hierarchical' => true,
)
);
}