WordPress Egendefinerte innleggstyper Taxonomier, Administrasjonskolonner og -filtre

Før du går inn i denne opplæringen, vennligst gå gjennom min første veiledning på egendefinerte innleggstyper, der jeg har forklart noen av de viktige aspektene ved CPT (tilpassede innleggstyper). I denne opplæringen skal vi utforske mer om denne fantastiske funksjonen i WordPress.

Denne opplæringen dekker hvordan du oppretter egendefinerte taksonomier, administrasjonskolonner, taksonomifiltre og en arkivside for CPT. Så la oss begynne.


Tilpasset taksonomi for egendefinerte innleggstyper

Taxonomier er en fin måte å gruppere ting sammen og hjelpe oss med å søke innlegg som tilhører en bestemt gruppe. I WordPress bruker vi generelt kategorier og merker som taksonomier. Trinnene som er gitt nedenfor, forklarer hvordan du oppretter egendefinerte taksonomier for CPT.

Trinn 1: Registrer egendefinert funksjon

Åpne pluginfilen din, i vårt tilfelle Film-Reviews.php og legg til følgende kode for å registrere den egendefinerte funksjonen.

add_action ('init', 'create_my_taxonomies', 0);

Trinn 2: Implementering av egendefinert funksjon og registrering av egendefinert taxonomy

funksjon create_my_taxonomies () register_taxonomy ('movie_reviews_movie_genre', 'movie_reviews', array ('labels' => array ('name' => 'Filmgenre', 'add_new_item' => 'Legg til ny filmgenre', 'new_item_name' = > "New Movie Type Genre"), 'show_ui' => true, 'show_tagcloud' => false, 'hierarchical' => true)); 

Her register_taxonomy funksjon gjør alt det harde arbeidet med å skape en tilpasset taksonomi (i vårt tilfelle en kategori) med navnet 'movie_reviews_movie_genre'for den egendefinerte innleggstypen'filmanmeldelser'. Etikettene definerer de forskjellige strengene som brukes i administrasjonsdelen av taksonomien.

  • 'show_ui' => true brukes til å gjøre taksonomiditoren synlig i dashbordet.
  • 'show_tagcloud' => false avkod hvorvidt tagskyen skal være synlig. I vårt tilfelle er den deaktivert.
  • 'hierarkisk' => sant dekoder formatet til den egendefinerte taksonomien.

Merk: 'hierarkisk' => falsk konverterer kategoriene til koder.

Trinn 3: Viser tilpassede taxonomier

Etter lagring av Film-Reviews.php fil, åpne din egendefinerte malfil, i vårt tilfelle single-movie_reviews.php og legg til følgende fremhevet kode for å gjøre kategoriene synlige i våre innlegg.

 
'movie_reviews',); $ loop = ny WP_Query ($ mypost); ?> have_posts ()): $ loop-> the_post ();?>
>
Tittel:
Regissør:
Sjanger: ID, 'movie_reviews_movie_genre', ');?>
Vurdering: '; annet echo ''; ?>

Trinn 4: Resultatet

Her har vi lagt til en tilpasset taksonomi 'Movie Genre' i våre filmanmeldelser CPT. Nå kan vi legge til nye kategorier fra administrasjonspanelet og tildele hver av dem til CPT.


Viser ytterligere kolonner

I WordPress admin CPT-oppføringssiden finnes det to kolonner som standard - Dato og kommentarer - der vi kan sortere disse CPT-elementene. For å legge til ekstra kolonner og sortering, følg trinnene nedenfor.

Trinn 1: Registrer funksjon

Åpne pluginfilen Film-Reviews.php og legg til følgende linje med kode for å registrere en funksjon som skal ringes når filmoversiktens oppføringsside blir utarbeidet.

add_filter ('manage_edit-movie_reviews_columns', 'my_columns');

Her har vi brukt det variable filteret manage_edit- (Custom_Post_Type) _columns, som passerer kolonnelisten over CPT som et argument for funksjonen.

Trinn 2: Implementering av funksjonen

funksjon my_columns ($ kolonner) $ kolonner ['movie_reviews_director'] = 'Regissør'; $ kolonner ['movie_reviews_rating'] = 'Rating'; unset ($ kolonner ['comments']); returnere $ kolonner; 

Her har vi lagt til to kolonner: Regissør og Vurdering i administrasjonspanelet til CPT og slettet også kolonnen Kommentarer fra oppføringen.

Trinn 3: Populere kolonnene

Registrer en funksjon for å fylle ut kolonnene.

add_action ('manage_posts_custom_column', 'populate_columns');

Trinn 4: Implementering

funksjonen populate_columns ($ kolonne) if ('movie_reviews_director' == $ kolonne) $ movie_director = esc_html (get_post_meta (get_the_ID (), 'movie_director', true)); ekko $ movie_director;  elseif ('movie_reviews_rating' == $ kolonne) $ movie_rating = get_post_meta (get_the_ID (), 'movie_rating', true); ekko $ movie_rating. ' stjerner'; 

Her siden funksjonen blir utført når noen av CPT-kolonnene blir gjengitt, kontrollerer den for de forespurte kolonnene før de ekko dem. Vi har brukt get_the_ID () funksjon for å hente indeksen for den nåværende raden og deretter i sin tur har brukt get_post_meta for å hente dataene i kolonnen.

Trinn 5: Registrer kolonner som sorterbare

La oss nå registrere en funksjon som skal kalles når WordPress identifiserer sorterbare kolonner i CPT.

add_filter ('manage_edit-movie_reviews_sortable_columns', 'sort_me');

Trinn 6: Implementering

funksjon sort_me ($ kolonner) $ kolonner ['movie_reviews_director'] = 'movie_reviews_director'; $ kolonner ['movie_reviews_rating'] = 'movie_reviews_rating'; returnere $ kolonner; 

Denne funksjonen identifiserer to kolonner for å gjøre dem sorterbare og returnerer deretter arrayet. Men vårt arbeid er ikke ferdig ennå.

Trinn 7: Bestill etter tilpasset felt

add_filter ('request', 'column_ordering'); add_filter ('request', 'column_orderby'); funksjon column_orderby ($ vars) if (! is_admin ()) returner $ vars; $ vars = array_merge ($ vars, array ('meta_key' => 'movie_director', 'orderby' = ' > 'meta_value'));  elseif (isset ($ vars ['orderby']) && 'movie_reviews_rating' == $ vars ['orderby']) $ vars = array_merge ($ vars, array ('meta_key' => 'movie_rating' => 'meta_value_num'));  returner $ vars; 

Ovennevnte funksjon er knyttet til forespørselsfilteret og legger til elementer i spørringsarrayet, basert på variablene i forespørselsadressen. Faktisk vet WordPress ikke hvordan man bestiller av feltfilmregissør eller Movie Rating, så vi må lære WordPress hvordan å gjøre det gjennom denne funksjonen.

Vi har lagt til to sorterbare kolonner i administrasjonsdelen.


Opprette filtre med tilpasset taksonomi

Her skal vi se hvordan tilpassede taksonomier (i dette tilfellet kategorier) kan brukes som et ekstra filter på CPT-oppføringen siden i WordPress-administrasjonen, slik at administratorer kan vise CPT-elementer som tilhører en bestemt kategori.

Trinn 1: Registrer funksjonen

Åpne pluginfilen din og legg til følgende kode for å registrere en funksjon som skal ringes når WordPress forbereder seg til å vise filteret, nedtrekkslisten.

add_action ('restrict_manage_posts', 'my_filter_list');

Trinn 2: Implementering av funksjonen

funksjon my_filter_list () $ screen = get_current_screen (); global $ wp_query; hvis ($ screen-> post_type == 'movie_reviews') wp_dropdown_categories (array ('show_option_all' => 'Vis alle filmgenrer', 'taxonomy' => 'movie_reviews_movie_genre', 'name' => 'movie_reviews_movie_genre', 'orderby '=' 'navn', 'valgt' => (isset ($ wp_query-> spørring ['movie_reviews_movie_genre'])? $ wp_query-> spørre ['movie_reviews_movie_genre']: "), 'hierarkisk' => falsk, 'dybde '=> 3,' show_count '=> false,' hide_empty '=> sant,));

Her har vi brukt en global variabel for å vite hvilken type post som vises, og også brukt en etterspørselsvariabel for å sjekke om det allerede er et eksisterende filter og følgelig sette filteret. De wp_dropdown_categories funksjonen brukes til å vise alle taksonomiene registrert med filmgenrer. 'rekkefølge etter','SHOW_COUNT','hide_empty','dybde'etc. er forskjellige argumenter som spesifiserer sortering, viser elementer som teller på hver kategori, skjuler ikke-tilknyttede kategorier, bestemmer maksimal dybde som skal vises for henholdsvis de hierarkiske kategoriene.

Trinn 3: Vis filtrerte resultater

Nå etter at filteret nedtrekkslisten er utarbeidet, skal vi skrive noen kode for å vise de filtrerte resultatene. Registrer en funksjon som skal ringes når forespørselen etter innlegg vises.

add_filter ('parse_query', 'perform_filtering');

Trinn 4: Implementering av skjermfunksjonen

funksjon perform_filtering ($ query) $ qv = & $ query-> query_vars; hvis (($ qv ['movie_reviews_movie_genre']) && er_numerisk ($ qv ['movie_reviews_movie_genre'])) $ term = get_term_by ('id', $ qv ['movie_reviews_movie_genre'], 'movie_reviews_movie_genre'); $ qv ['movie_reviews_movie_genre'] = $ term-> slug; 

De perform_filtering funksjonen mottar det nåværende WordPress-postforespørselsobjektet og starter deretter ved å få en peker til spørringsvariablene som er lagret i spørringsobjektet. Deretter bekrefter det om en film sjanger er en del av spørringsvariablene og deretter utfører spørringen.

Nå vil du kunne bruke filteret til å vise filmene etter deres sjangere.


Sist men ikke minst: Lag en arkivside

Siden vi har opprettet en egendefinert mal for vår CPT, kan vi også opprette en egendefinert arkivside som overstyrer standard arkivmalen.

Trinn 1: Legge til en tilbakebetaling i arkivmalen

Åpne pluginfilen Film-Reviews.php og legg til den merkede koden i include_template_function funksjon.

funksjonen include_template_function ($ template_path) if (get_post_type () == 'movie_reviews') if (is_single ()) // sjekker om filen eksisterer i temaet først, // ellers tjen filen fra plugin- theme_file = locate_template (array ('single-movie_reviews.php'))) $ template_path = $ theme_file;  ellers $ template_path = plugin_dir_path (__FILE__). '/Single-movie_reviews.php';  elseif (is_archive ()) if ($ theme_file = locate_template (array ('archive-movie_reviews.php'))) $ template_path = $ theme_file;  ellers $ template_path = plugin_dir_path (__FILE__). '/Archive-movie_reviews.php';  returnere $ template_path; 

WordPress søker gjennom temakatalogen for en arkivmalfil før du bruker standard en. Denne funksjonen kontrollerer om brukeren har gitt en arkivmal i temakatalogen ellers ser den etter filen i plugin-mappen.

Trinn 2: Lag arkivmalen

Lagre og lukk pluginfilen og opprett en ny fil som heter arkiv-movie_reviews.php og legg til følgende kode i den.

 

Filmanmeldelser

Tittel Regissør
">
max_num_pages) && $ wp_query-> max_num_pages> 1) ?>


Her har vi brukt løkken til å sykle gjennom innleggspostene og deretter vise dem ved hjelp av et bordoppsett. Vi har også definert en navigasjonsmeny hvis det er flere elementer enn det maksimale antallet som er konfigurert under WordPress Settings. Navigasjonsmenyer vises med next_post_links og previous_post_links funksjoner.

Vi har brukt den globale wp_query objekt som inneholder dataene om det for tiden utførte spørsmålet, for å gjengi innholdet på siden. De get_post_meta funksjonen har blitt brukt til å hente tilpassede feltdata.

Trinn 3: Resultatet

Lagre filen og sjekk arkivsiden for filmen Arkivoversikt.


Her kommer vi til slutten av denne opplæringen. Jeg håper du har kunnet forstå betydningen av egendefinerte innleggstyper. Det er mer å utforske, bare lek med det.

Takk for at du leser og gjerne gi tilbakemelding.