Jak tworzyć ekskluzywne niestandardowe taksonomie w WordPress
Opublikowany: 2022-03-11WordPress, jeden z najpotężniejszych systemów blogowania i zarządzania treścią o otwartym kodzie źródłowym, jest wykorzystywany do zasilania dużej części interwebów. Aż jedna czwarta wszystkich stron internetowych korzysta z WordPressa i nie brakuje popytu na usługi programistyczne WordPress.
W przeciwieństwie do wielu innych systemów CMS, WordPress jest kochany przez wielu za jego elastyczność i możliwość dostosowania. Taksonomie, jedna z podstawowych funkcji WordPressa, umożliwiają organizowanie treści dokładnie tak, jak tego potrzebujesz. Mimo że jest wbudowany w kilka domyślnych taksonomii, WordPress pozwala dodać tyle niestandardowych taksonomii, ile tylko zechcesz.
Jednak sprawienie, by taksonomie zachowywały się dokładnie tak, jak chcesz, może wymagać od ciebie majstrowania przy niektórych nieudokumentowanych podejściach.
W tym artykule dowiesz się, jak zdefiniować ekskluzywne niestandardowe taksonomie w WordPressie, które zachowują się bardziej jak kategorie niż tagi, co pozwala kategoryzować posty o wiele bardziej rygorystycznie niż po wyjęciu z pudełka.
Czym jest taksonomia?
Zgodnie z kodeksem WordPress:
Taksonomia to sposób na grupowanie rzeczy.
Na przykład kilka różnych rodzajów owoców można pogrupować według różnych cech, a następnie grupom można przypisać nazwy.
W WordPressie taksonomie służą do grupowania postów, stron, a nawet niestandardowych typów postów w różne grupy.
Nazwy różnych grup w taksonomii nazywane są terminami . Weźmy na przykład owoce i to, jak można je pogrupować na podstawie ich kolorów. W tym przypadku terminami byłyby nazwy różnych kolorów.
Domyślnie WordPress jest wyposażony w cztery taksonomie: kategoria , tag , kategoria linku i format postu . Więcej informacji na temat tych domyślnych taksonomii znajdziesz tutaj.
Wśród tych wbudowanych taksonomii kategorie i tagi są bardzo podobne, ale mają jedną ważną różnicę: kategorie są wyłącznymi taksonomiami (tj. dla każdego postu możesz wybrać co najwyżej jedną kategorię), podczas gdy każdemu postowi można przypisać wiele tagów.
Co więcej, kategorie są zwykle predefiniowane, a tagi można definiować na bieżąco.
Definiowanie niestandardowych taksonomii
Możesz zdefiniować niestandardową taksonomię za pomocą funkcji register_taxonomy()
. Możesz dowiedzieć się więcej o funkcji tutaj.
Aby zobaczyć, jak działa ta funkcja, zdefiniujmy niestandardową taksonomię dla postów ze zdjęciami scenerii.
function view_init() { register_taxonomy( 'view', 'post', array( 'label' => __( 'View' ), 'capabilities' => array( 'assign_terms' => 'edit_guides', 'edit_terms' => 'publish_guides' ) ) ); } add_action( 'init', 'view_init' );
W powyższym fragmencie definiujemy nową taksonomię postów o nazwie view .
Możesz pomyśleć, że ta taksonomia służy do kategoryzowania zdjęć na podstawie rodzaju lub charakteru widoków, które są na zdjęciach (np. góry, jezioro lub las).
Jak zawsze, posty należące do określonych terminów z tej kategorii pojawią się w /view/{view_name} .
Linia możliwości w powyższym fragmencie jest opcjonalna. Bez tego WordPress będzie domyślnie działał dla tych samych użytkowników, co posty. Jak pokazano powyżej, umożliwi to każdemu użytkownikowi z niestandardową funkcją „edit_guides” przypisanie taksonomii do posta, a każdemu użytkownikowi z niestandardową funkcją „publish_guides” utworzenie nowych elementów taksonomii.
Zgodnie z oficjalną dokumentacją można zdefiniować cztery możliwości:
Możliwości taksonomii obejmują
assignterms
,editterms
,manageterms
(wyświetla taksonomię w nawigacji administratora) ideleteterms
.
Jak używane są taksonomie
W swoim kodzie możesz użyć funkcji wp_set_object_terms()
, aby dodać terminy do obiektów przy użyciu taksonomii. Możesz wyświetlić listę istniejących terminów za pomocą funkcji the_terms()
. Ponadto możesz użyć funkcji wp_tag_cloud()
, aby wygenerować chmurę terminów dla swojej niestandardowej taksonomii. Możesz dowiedzieć się więcej o tych funkcjach tutaj.
Po stronie interfejsu użytkownika WordPress tworzy nowe pole meta w postach dla każdej taksonomii. Pole meta jest podobne do pola meta Tagi, które pozwala połączyć jeden lub więcej terminów z postem. To właśnie robi WordPress domyślnie i to możemy zmienić, czyniąc taksonomię wyłączną: Spraw, aby niestandardowa taksonomia zachowywała się jak taksonomia kategorii.
Wymuszanie wyłączności taksonomii
Kiedy tworzymy niestandardową taksonomię za pomocą metody register_taxonomy()
, WordPress dodaje do strony edycji posta metapole z możliwością wyboru wielu elementów:
Korzystając z tego meta pola, użytkownik może wybrać dowolną liczbę istniejących (już używanych) terminów, a także dodawać nowe terminy za pomocą pola tekstowego.
Aby utworzyć taksonomię podobną do kategorii, w której każdy post należy do co najwyżej jednej kategorii z zestawu predefiniowanych kategorii, możesz to zrobić, dostosowując nieco WordPress:
- Ukryj domyślne pole meta utworzone przez WordPress.
- Utwórz niestandardowe pole meta na stronie edycji postu, które zapewni kontrolę nad wyborem pojedynczego elementu.
- Zapisz wartość taksonomii po zapisaniu wpisu.
Przyjrzyjmy się każdemu z kroków.
Ukryj domyślną skrzynkę Meta stworzoną przez WordPress
W tym celu musimy ustawić opcje show_in_quick_edit
i meta_box_cb
na false
podczas wywoływania register_taxonomy
.

Pierwsza opcja ukrywa taksonomię w panelu szybkiej/zbiorczej edycji, a druga opcja ukrywa ją na stronie edycji postu:
register_taxonomy( 'custom_taxonomy', 'post', array( 'labels' => array( 'name' => 'Custom Exclusive Taxonomy' ), 'show_in_quick_edit' => false, 'meta_box_cb' => false ));
Gdy domyślne pole meta jest ukryte, elementy można dodać do zestawu dostępnych terminów taksonomii za pośrednictwem strony zarządzania taksonomią:
Utwórz niestandardowe pole meta na stronie edycji posta
Aby utworzyć niestandardowe metabox, możemy użyć haka add_meta_boxes
WordPress. Więcej o haczyku dowiesz się tutaj.
add_action('add_meta_boxes', 'add_custom_meta_box'); function add_custom_meta_box(){ add_meta_box( 'taxonomy_box', __('Custom Exclusive Taxonomy'), 'fill_custom_meta_box_content', 'post' ,'side'); }
Wywołujemy metodę add_meta_box
z następującymi argumentami:
-
taxonomy_box
– identyfikator pola meta -
__('Custom Exclusive Taxonomy')
– Tytuł pola meta -
fill_custom_meta_box_content
– funkcja, która służy do wypełniania zawartości pola meta -
post
— oznacza to, że pole meta powinno pojawić się na stronie edycji posta. -
side
— wskazuje miejsce, w którym należy wstawić metabox.
Zwróć uwagę, jak określiliśmy taxonomy_box
jako identyfikator. Jednak to funkcja w trzecim parametrze pozwoli nam określić, co trafi do pudełka.
Zaimplementujemy teraz funkcję fill_custom_meta_box_content
:
<?php function fill_custom_meta_box_content( $post ) { $terms = get_terms( array( 'taxonomy' => 'custom_taxonomy', 'hide_empty' => false // Retrieve all terms )); // We assume that there is a single category $currentTaxonomyValue = get_the_terms($post->ID, 'custom_taxonomy')[0]; ?> <p>Choose taxonomy value</p> <p> <?php foreach($terms as $term): ?> <input type="radio" name="custom_taxonomy" value="<?php echo $term->term_id;?>"<?php if($term->term_id==$currentTaxonomyValue->term_id) echo "checked"; ?>> <label for="taxonomy_term_<?php echo $term->term_id;?>"><?php echo $term->name; ?></label> </input><br/> <?php endforeach; ?> </p> <?php }
Tutaj najpierw pobieramy wszystkie terminy (tj. istniejące wartości) taksonomii. Użyjemy ich, aby wyświetlić listę kontrolek przycisków radiowych.
Następnie pobieramy aktualnie wybrany termin taksonomii za pomocą funkcji get_the_terms()
— potrzebujemy jej, aby wybrać odpowiedni przycisk opcji.
Zauważ, że ta funkcja zwraca tablicę. Dzieje się tak, ponieważ domyślnie z wpisem może być powiązana dowolna liczba terminów. Zgodnie z naszym założeniem, post ma co najwyżej jeden termin, więc uzyskujemy dostęp do pierwszego elementu tablicy. (W porządku, jeśli tablica jest pusta; otrzymamy null
jako bieżącą wartość i nie zostanie wybrany żaden przycisk opcji).
Kod emitujący HTML używa custom_taxonomy
jako nazwy przycisków opcji i odpowiadających im identyfikatorów terminów jako ich wartości; Atrybuty identyfikatora przycisku radiowego są używane tylko do łączenia się ze znacznikami etykiet. W rezultacie otrzymujemy następujące niestandardowe pole meta:
Zapisz wartość taksonomii po zapisaniu postu
Na koniec musimy zachować wartość taksonomii po zapisaniu postu. W tym celu możemy użyć save_post
:
add_action('save_post', 'save_custom_taxonomy'); function save_custom_taxonomy($post_id){ if ( isset( $_REQUEST['custom_taxonomy'] ) ) wp_set_object_terms($post_id, (int)sanitize_text_field( $_POST['custom_taxonomy'] ), 'custom_taxonomy'); }
I to wszystko! Skończyliśmy.
Wiesz już, jak zdefiniować niestandardową taksonomię, która będzie zachowywać się jak wbudowana taksonomia kategorii.
Uwaga: WordPress zaakceptował żądanie funkcji, aby ułatwić przełączanie wyłączności dla niestandardowych taksonomii. Jednak od jakiegoś czasu bilet nie był zbyt aktywny.
Zakończyć
Taksonomie to bardzo potężna i użyteczna funkcja WordPressa. Po wyjęciu z pudełka nie mają możliwości ścisłej kategoryzacji postów, ale tak jak prawie wszystko w WordPressie, taksonomie i powiązane funkcje są niezwykle konfigurowalne. To pozwala nam dodać tę często niezbędną umiejętność w kilku krokach.
Przedstawione tutaj podejście może być również wykorzystane do stworzenia jeszcze bardziej spersonalizowanego interfejsu użytkownika na stronach edycji postów dla wyboru terminów taksonomii.
Mam nadzieję, że ten krótki samouczek dotyczący definiowania ekskluzywnych niestandardowych taksonomii okazał się przydatny!