Tworzenie custom post type w WordPressie – poradnik dla opornych

Tworzenie custom post type w WordPressie – poradnik dla opornych

Domyślnie w WordPressie mamy do dyspozycji dwa typy wpisów: „post” oraz „page”. Co jeśli oprócz stron statycznych i bloga chcielibyśmy także publikować projekty czy oferty pracy? Tu z pomocą przychodzą właśnie tzw. „custom post types”, czyli własne typy wpisów.

Kilka słów na temat hierarchii

Przez lata pracy z tym CMS wypracowałem optymalny dla siebie sposób dzielenia strony na typy i układania ich w logiczną strukturę. Na pewnym etapie, zaszła potrzeba rozdzielenia pewnych stron od siebie. Zależało mi na tym ze względu na dużą liczbę podstron.

Podział na typy

Zasada, którą kieruję się w każdym projekcie wygląda następująco:

  • Page – strona główna, kontakt, o firmie i inne podstrony statyczne / tekstowe
  • Post – wpisy blogowe lub aktualności
  • Custom post type – oferty pracy, realizacje, produkty sklepowe (wykorzystane w WooCommerce) i inne zbiory

Tworzenie custom post type

Załóżmy, że chcemy na stronie publikować oferty pracy. Moglibyśmy w tym celu wykorzystać wpisy lub strony, jednak da się to zrobić bardziej elegancko. Zaczynamy od znalezienia pliku functions.php w katalogu z naszym szablonem. Na końcu wklejamy kod pamiętając by podmienić etykiety i pozostałe argumenty według własnych potrzeb.

function job_post_type() {
    $labels = array(
        'name'                => 'Oferta pracy',
        'singular_name'       => 'Oferta pracy',
        'menu_name'           => 'Oferty pracy',
        'parent_item_colon'   => 'Nadrzędna oferta pracy',
        'all_items'           => 'Wszystkie oferty pracy',
        'view_item'           => 'Zobacz ofertę',
        'add_new_item'        => 'Dodaj ofertę',
        'add_new'             => 'Dodaj nową',
        'edit_item'           => 'Edytuj ofertę',
        'update_item'         => 'Aktualizuj',
        'search_items'        => 'Szukaj ofert pracy',
        'not_found'           => 'Nie znaleziono',
        'not_found_in_trash'  => 'Nie znaleziono' 
    ); 
    $args = array(
        'label' => 'job',
        'rewrite' => array(
            'slug' => 'oferty-pracy'
        ),
        'description'         => 'Oferta pracy',
        'labels'              => $labels,
        'supports'            => array( 'title', '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'       => 4,
        'menu_icon'           => 'dashicons-id-alt',
        'can_export'          => true,
        'has_archive'         => false,
        'exclude_from_search' => false,
        'publicly_queryable'  => true,
        'capability_type'     => 'post',
    );
    register_post_type( 'job', $args );
} 
add_action( 'init', 'job_post_type', 0 );

Jak widzisz register_post_type przyjmuje sporo argumentów. Na szczęście w większości przypadków wystarczy zmienić kilka podstawowych:

  • label – unikalna nazwa jak „post”, będziesz jej używał chociażby podczas tworzenia zapytań poprzez WP Query,
  • rewrite – pozwala zmienić adres url pod, którym dostępne będą wpisy typu „job”,
  • menu_icon – ikona w menu administratora.

Wyślij plik na serwer, jeżeli wszystko poszło dobrze, w menu pojawi się nowa pozycja:

Custom post types - WordPress

Pełny opis funkcji: https://codex.wordpress.org/Function_Reference/register_post_type
Lista dostępnych ikon: https://developer.wordpress.org/resource/dashicons

Widok single i pętla

W tym momencie należałoby umożliwić wyświetlanie ofert pracy. Analogicznie jak w przypadku typu post wykorzystamy plik single.php z jedną drobną różnicą. Aby wyświetlić treść własnego typu job musimy utworzyć nowy plik o nazwie single-job.php. Ogólna zasada tworzenia szablonów i ich nazewnictwa to single-nazwa_post_type.php. Nie ma tutaj nic szczególnego do opowiadania. Plik single dla custom post type działa dokładnie tak samo jak dla zwykłych postów.

No dobra, ale w jaki sposób wyświetlić oferty na dowolnej podstronie, w dowolnym miejscu? Nic prostszego, użyjemy do tego klasy WP_Query i pętli have_posts(). Otwieramy plik z szablonem, w którym chcemy listować i wklejamy coś takiego:

$args = array(
  'post_type' => 'job',
  'posts_per_page' => 3
);
$jobs = new WP_Query( $args );

if( $jobs->have_posts() ){
  while( $jobs->have_posts() ) {
    $jobs->the_post();
    the_title(); 
  }
}

Pętla wyświetli oczywiście jedynie tytuły trzech najnowszych wpisów więc należy ją rozbudować wedle potrzeb.

Błąd 404

Z pewnością wykonanie powyższych instrukcji nie pozwoli Ci nadal wyświetlić widoku single-job.php. Pod adresem utworzonej oferty pracy zastaniesz błąd 404 – strony nie znaleziono. Dzieje się tak, ponieważ po stworzeniu nowego typu wpisów, nie został zaktualizowany plik .htaccess odpowiedzialny za przekierowania i adresy URLW tym celu udaj się do zakładki Ustawienia > Bezpośrednie linki i kliknij przycisk Zapisz zmiany. Ta akcja wymusi w systemie wygenerowanie i nadpisanie nowego pliku z regułami .htaccess.

Coś dla opornych

To co z pozoru wydaję się być zaletą, lecz tak naprawdę jest największym koszmarem WordPressa to wtyczki. Niestety Ci mniej zaawansowani lub zwyczajnie leniwi programiści nadużywają ich regularnie myśląc, że nie ma nic złego w instalowaniu wtyczki wyświetlającej button…

Napisane zostało już prawdopodobnie wszystko, również kreator custom post type. Z reguły omijam wtyczki – ograniczając się do SEO, podstawowych zabezpieczeń i ACF Pro. W końcu to kucharz najlepiej wie (czytaj powinien wiedzieć) co w jego zupie siedzi. Dlatego na koniec wspomnę jedynie, że istnieje coś takiego jak Custom Post Type UI.

 

Popularne wpisy

Kodowanie

Responsywne menu — 3 sprawdzone rozwiązania

Responsywne menu — 3 sprawdzone rozwiązania

Czytaj to
Mixiny SCSS – czyli jak uprzyjemniam sobie pracę

Mixiny SCSS – czyli jak uprzyjemniam sobie pracę

Czytaj to

Felietony

Błędy początkujących webmasterów, których warto unikać

Błędy początkujących webmasterów, których warto unikać

Czytaj to
Dlaczego frameworki HTML często nie mają sensu?

Dlaczego frameworki HTML często nie mają sensu?

Czytaj to

Inspiracje

Zestaw prostych i ciekawych przycisków na stronę

Zestaw prostych i ciekawych przycisków na stronę

Czytaj to
Najlepsze strony, z których pobierzesz darmowe zdjęcia

Najlepsze strony, z których pobierzesz darmowe zdjęcia

Czytaj to

Newsletter