WordPress jest dostarczany z pięcioma domyślnymi typami postów: post
page
attachment
revision
, oraz menu
.
Podczas opracowywania wtyczki może być konieczne utworzenie własnego określonego typu zawartości: na przykład produktów dla witryny e-commerce, zadań dla witryny e-learningowej lub filmów dla witryny z recenzjami.
Używając Custom Post Types, możesz zarejestrować własny typ postu. Po zarejestrowaniu niestandardowego typu postu otrzymuje on nowy ekran administracyjny najwyższego poziomu, który może być używany do zarządzania i tworzenia postów tego typu.
Aby zarejestrować nowy typ postu, używasz funkcji register_post_type().
Zalecamy umieszczenie niestandardowych typów postów we wtyczce, a nie w motywie. Zapewnia to, że zawartość użytkownika pozostaje przenośna, nawet jeśli motyw zostanie zmieniony.
Następujący minimalny przykład rejestruje nowy typ postu, Produkty, który jest identyfikowany w bazie danych jako wporg_product
.
function wporg_custom_post_type() {register_post_type('wporg_product',array('labels' => array('name' => __('Products', 'textdomain'),'singular_name' => __('Product', 'textdomain'),),'public' => true,'has_archive' => true,));}add_action('init', 'wporg_custom_post_type');
Expand full source codeCollapse full source code
Proszę odwiedzić stronę referencyjną dla register_post_type() w celu zapoznania się z opisem argumentów.
Ostrzeżenie:
Musisz wywołać register_post_type()
przed hakiem admin_init
i po haku after_setup_theme
. Dobrym hakiem do użycia jest init
action hook.
Naming Best Practices #Naming Best Practices
Ważne jest, abyś poprzedzał swoje funkcje typu postu i identyfikatory krótkim prefiksem, który odpowiada twojej wtyczce, motywowi lub stronie internetowej.
Ostrzeżenie:
Upewnij się, że twój niestandardowy identyfikator typu postu nie przekracza 20 znaków, ponieważ kolumna post_type
w bazie danych jest obecnie polem VARCHAR o tej długości.
Ostrzeżenie:
Aby zapewnić kompatybilność w przód, nie używaj wp_ jako swojego identyfikatora – jest on używany przez rdzeń WordPress.
Ostrzeżenie:
Jeśli twój identyfikator jest zbyt ogólny (na przykład: „product
„), może to powodować konflikt z innymi wtyczkami lub motywami, które zdecydowały się użyć tego samego identyfikatora.
Uwaga:
Rozwiązanie zduplikowanych identyfikatorów typów postów nie jest możliwe bez wyłączenia jednego z konfliktowych typów postów.
Top
URLs #URLs
Niestandardowy typ postu otrzymuje swój własny slug w ramach struktury URL witryny.
Post typu wporg_product
będzie domyślnie używał następującej struktury URL: http://example.com/wporg_product/%product_name%
.
wporg_product
jest slugiem twojego niestandardowego typu postu, a %product_name%
jest slugiem twojego konkretnego produktu.
Ostateczny permalink byłby: http://example.com/wporg_product/wporg-is-awesome
.
Możesz zobaczyć permalink na ekranie edycji dla twojego niestandardowego typu postu, tak jak w przypadku domyślnych typów postów.
Niestandardowy slug dla niestandardowego typu postu #A Custom Slug for a Custom Post Type
Aby ustawić niestandardowy slug dla sluga twojego niestandardowego typu postu, wszystko, co musisz zrobić, to dodać klucz musisz dodać klucz => para wartości do rewrite
klucz w tablicy register_post_type()
argumenty.
Przykład:
function wporg_custom_post_type() {register_post_type('wporg_product',array('labels' => array('name' => __( 'Products', 'textdomain' ),'singular_name' => __( 'Product', 'textdomain' ),),'public' => true,'has_archive' => true,'rewrite' => array( 'slug' => 'products' ), // my custom slug));}add_action('init', 'wporg_custom_post_type');
Expand full source codeCollapse full source code
W wyniku powyższego powstanie następująca struktura adresu URL: http://example.com/products/%product_name%
Ostrzeżenie:
Używanie ogólnego sluga, takiego jak products
, może potencjalnie powodować konflikt z innymi wtyczkami lub motywami, więc spróbuj użyć takiego, który jest bardziej specyficzny dla Twojej zawartości.
Uwaga:
W przeciwieństwie do niestandardowych identyfikatorów typów postów, problem zduplikowanego sluga można łatwo rozwiązać, zmieniając slug dla jednego z konfliktowych typów postów.
Jeśli autor wtyczki zawarł wywołanie apply_filters()
na argumentach, można to zrobić programowo, nadpisując argumenty przekazane za pomocą funkcji register_post_type()
.