Egendefinerte innleggstyper er en av de viktigste elementene du bør forstå hvis du vil lage fleksible profesjonelle, WordPress-nettsteder.

Hvilke egendefinerte innleggstyper gjør det, lar deg legge til din egen type data; Det kan være en artikkel, en sang, en film eller tusenvis av andre ting. Egendefinerte innleggstyper gir deg mulighet til å kategorisere dataene dine etter dine individuelle behov, noe som igjen gjør det mulig å ta større kontroll over hvordan nettstedet ditt oppfører seg.

I denne artikkelen tar jeg deg gjennom å lage en tilpasset filmposttype for en filmdatabase.

Hvorfor bruke egendefinerte innleggstyper?

For å lage en filmwebside må vi sette opp en database. Å gjøre det uten egendefinerte innleggstyper ville være ekstremt vanskelig og potensielt sammenstøt med vår eksisterende WordPress-installasjon. Men vår tilpassede posttype vil ha sin egen admin-meny og egendefinert redigeringsside, hvis vi ønsket å kunne til og med legge til egendefinerte taksonomier på siden med navnene og egenskapene som passer til prosjektet.

Egendefinerte innleggstyper er hva som tar WordPress fra en blogging-plattform til et fullblåst CMS. De gir oss friheten til å sette opp vår filmwebside uten noen ubehagelige hack.

Oppretter vår filmposttype

I denne artikkelen legger jeg ut all koden som er nødvendig for å opprette en egendefinert innleggstype, og så går vi gjennom det linje for linje slik at du kan lære hva hver del gjør og tilpasse det til dine behov.

Her er den fulle koden som blir lagt til i din functions.php- fil:

add_action( 'init', 'register_movie' );function register_movie() {$labels = array('name' => 'Movies','singular_name' => 'Movie','add_new' => 'Add New','add_new_item' => 'Add New Movie','edit_item' => 'Edit Movie','new_item' => 'New Movie','view_item' => 'View Movie','search_items' => 'Search Movies','not_found' => 'No movies found','not_found_in_trash' => 'No movies found in Trash','menu_name' => 'Movies',);$args = array('labels' => $labels,'hierarchical' => false,'description' => 'Here you will add all the movies for the database','supports' => array( 'title', 'editor', 'thumbnail' ),'taxonomies' => array( 'genre', 'movies', 'year' ),'public' => true,'show_ui' => true,'show_in_menu' => true,'menu_position' => 5,//'menu_icon' => the image link here,'show_in_nav_menus' => true,'publicly_queryable' => true,'exclude_from_search' => false,'has_archive' => true,'query_var' => true,'can_export' => true,'rewrite' => true,'capability_type' => 'post');register_post_type( 'movie', $args );}

Som du kan se en litt stor del av koden, går det å lage en egendefinert innleggstype, men hvis du forstår det, vil du kunne få denne koden og tilpasse den til prosjektene dine. I første linje hekker vi funksjonen med vår egendefinerte innleggstype til init, og dette betyr at vår funksjon vil brenne når WordPress gjør at vi alltid vil ha det i dashbordet vårt:

add_action( 'init', 'register_movie' );

Etikettene

I neste linje begynner vi å erklære navnet på vår funksjon og en variabel med alle etikettene som vil bli knyttet til vår filmposttype slik at alt kan tilpasses.

Det første vi erklærer i etikettene, er navnet på vår egendefinerte innleggstype, i flertall og singular form:

'name' => 'Movies','singular_name' => 'Movie',

I de to neste linjene må vi spesifisere vår nye tekst (hvis vi ønsker å endre den) og så setter vi til Legg til ny film slik at når vi legger til en ny film, har vi en tilpasset opplevelse i stedet for å legge til en film og ha en overskrift sier 'Legg til nytt innlegg'.

'add_new' => 'Add New','add_new_item' => 'Add New Movie',

Etter etikettene for å lage en ny film, må vi sette etikettene for redigering, den nye elementteksten (som standard er Ny post / Ny side), og vi må også sette visningspostteksten:

'edit_item' => 'Edit Movie','new_item' => 'New Movie','view_item' => 'View Movie',

Nå i etikettene går vi videre til søkemulighetene i wordpress admin og våre etiketter for det. Vi må sette etiketter for når vi søker etter filmer, når ingen resultater blir funnet, og også når det ikke finnes noen resultater i søpla:

'search_items' => 'Search Movies','not_found' => 'No movies found','not_found_in_trash' => 'No movies found in Trash',

Den siste etiketten snakker for seg selv, her må vi legge inn navnet vi vil ha den egendefinerte innleggstypen til å ha i menyen UI, i dette tilfellet holder vi bare med "Filmer":

'menu_name' => 'Movies',);

Argumentene

Nå må vi flytte til våre argumenter, for det har jeg opprettet en annen variabel som vil holde alle argumentene, jeg ringte det args.

Det første argumentet det ber om er etikettene, og alt vi må gjøre er å peke på etikettvariabelen vi nettopp har undersøkt, slik som:

$args = array('labels' => $labels,

I neste linje må vi angi om posttypen vår vil være hierarkisk som sider eller ikke (som innlegg). I mitt tilfelle ønsker jeg ikke at filmer skal være hierarkiske, så jeg har satt den til feil. Neste linje er bare en valgfri beskrivelse av posttypen.

'hierarchical' => false,'description' => 'Here you will add all the movies for the database',

Neste linje er en viktig en; her må vi spesifisere hva vår tilpassede innleggstype vil støtte, hvilke felt det vil ha. Alternativene for dette feltet er:

  • 'tittel'
  • 'redaktør'
  • 'forfatter'
  • 'Thumbnail'
  • 'utdrag'
  • 'trackbacks'
  • 'custom-felt'
  • 'kommentarer'
  • 'revisjoner'
  • 'page-attributter'
  • 'post-formater'

I mitt tilfelle og for posttypen jeg vil bare at den skal støtte tittelen, WYSIWYG- editoren, et miniatyrbilde og kommentarer og for å gjøre det jeg trenger å legge til en matrise i denne linjen, slik som:

'supports' => array( 'title', 'editor', 'thumbnail','comments' ),

I neste linje må vi angi hvilke taksonomier den skal bruke, og siden vi skal skape egendefinerte taksonomier, er de de som vil bli lagt til i denne linjen:

'taxonomies' => array( 'genre', 'actors', 'year' ),

De neste tre linjene har å gjøre med innleggstypens synlighet i administrasjonsområdet, og alt jeg gjør er satt alt dette til ekte:

'public' => true,'show_ui' => true,'show_in_menu' => true,

Deretter flyttes vi til stillingen på menyen der posttypen skal vises. Her har vi også mange alternativer å velge mellom:

  • 5 - Under innlegg
  • 10 - Under media
  • 15 - Nedenfor Lenker
  • 20 - Nedenfor Sider
  • 25 - Under kommentarer
  • 60 - Under første separator
  • 65 - Nedenfor Plugins
  • 70 - Nedenfor Brukere
  • 75 - Nedenfor Verktøy
  • 80 - Under innstillinger
  • 100 - Nedenfor andre separator

I mitt tilfelle ønsket jeg at filmer skulle vises umiddelbart etter innlegg, så jeg satte menyposisjonen til 5, slik som:

'menu_position' => 5,

I neste linje tar vi vare på ikonet, vi kan sette inn vårt eget ikon eller la det være tomt, og vi vil få innleggets ikon i stedet, linjen etter det tar vare på hva vi vil at denne posttypen skal vises for valg i menyene våre .

'menu_icon' => //the image link here,'show_in_nav_menus' => true,

I de neste 3 linjene legger vi til posttypens evner; Vi bestemmer først om vi vil at denne posttypen skal forespørres på forsiden, så bestemmer vi om vi ønsker at innleggstypene skal utelukkes fra søk, og til slutt bestemmer vi om vi ønsker et arkiv for filmposttypen:

'publicly_queryable' => true,'exclude_from_search' => false,'has_archive' => true,

I neste linje stiller vi spørringsvariabelen for posttypen vår, og dette vil definere hvordan nettadressen vil se. For dette alternativet har vi tre mulige parametere: vi kan sette den til ekte og da kan vi nå filmen ved hjelp av / film = name_of_movie; vi kan sette den til en streng slik at filmen i nettadressen vil bli erstattet av alt vi ønsker, for eksempel "show" og vi må bruke /? show = name_of_movie for å nå samme film; Det siste alternativet er å sette den til falsk og på denne måten gjør du det umulig å nå en film ved hjelp av query_var. I mitt tilfelle, og med det sistnevnte alternativet i tankene, satte jeg spørsmålet mitt til å være så sant at vi kunne nå det med spørsmålet om filmen:

'query_var' => true,

I neste linje bestemmer vi om vi vil at filmene skal kunne eksporteres, og da velger vi sluggen for denne innleggstypen, i mitt tilfelle jeg bare sitter fast med å ha "film" som sluggen, men du kan velge hvilken streng som helst slug og du har faktisk mange alternativer, er denne parameteren en omfattende.

'can_export' => true,'rewrite' => true,

Den endelige linjen av våre argumenter er hvor vi angir evnen til vårt innlegg, og siden jeg vil at den skal ha nøyaktig samme som normale innlegg, ga jeg bare verdien av innlegget slik som:

   'capability_type' => 'post');

Våre etiketter og argumenter er gjort, alt vi trenger å gjøre nå er å registrere vår posttype og register_post_type- funksjonen tar to parametere, den første er navnet på vår egendefinerte innleggstype (dette har maksimalt 20 bokstaver og uten store bokstaver eller mellomrom) og den andre er argumentene for innleggstypen og i denne vil vi bare plassere vår args-variabel:

    register_post_type( 'movie', $args );}

Vår posttype er opprettet og helt funksjonell, og alt du trenger for å få det til å vises i sidene dine er noen wp_query magi.

Siste ord

Jeg håper du kan se hvorfor så mange bruker egendefinerte innleggstyper i WordPress.

Denne artikkelen var ment å gi deg en forståelse av prosessen med å opprette en egendefinert innleggstype, og gi deg et utgangspunkt for å lage dine egne fantastiske egendefinerte innleggstyper.

Utvalgt bilde / miniatyrbilde, tilpasset bilde av ATOMIC Hot Links, via Flickr.