Brugerdefinerede posttyper er et af nøgleelementerne, du bør forstå, hvis du vil oprette fleksible profesionelle, WordPress-websteder.

Hvilke brugerdefinerede posttyper gør det muligt at tilføje din egen type data; Det kan være en artikel, en sang, en film eller tusindvis af andre ting. Brugerdefinerede posttyper giver dig mulighed for at kategorisere dine data efter dine individuelle behov, hvilket igen giver dig mulighed for at tage større kontrol over, hvordan dit websted opfører sig.

I denne artikel tager jeg dig igennem ved at oprette en brugerdefineret filmposttype til en filmdatabase.

Hvorfor bruge brugerdefinerede posttyper?

For at oprette en filmwebsted skal vi oprette en database. At gøre det uden brugerdefinerede posttyper ville være yderst vanskeligt og potentielt sammenbrud med vores eksisterende WordPress-installation. Men vores brugerdefinerede posttype vil have sin egen administrationsmenu og brugerdefineret redigeringsside, hvis vi ønskede at vi endda kunne tilføje brugerdefinerede taksonomier til siden med de navne og egenskaber der passer til projektet.

Brugerdefinerede posttyper er hvad der tager WordPress fra en bloggingplatform til et fuldt blæst CMS. De giver os frihed til at oprette vores filmwebsted uden nogen ubehagelige hacks.

Oprettelse af vores filmposttype

I denne artikel udarbejder jeg al den kode, der er nødvendig for at oprette en brugerdefineret posttype, og så går vi igennem det line-by-line, så du kan lære, hvad hver del gør og tilpasse det til dine behov.

Her er den fulde kode, der bliver tilføjet til 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 noget stor del af kode går i at skabe en brugerdefineret posttype, men hvis du forstår det, vil du kunne få denne kode og tilpasse den til dine projekter. I første linje hakker vi funktionen med vores brugerdefinerede posttype til init og det betyder, at vores funktion vil slukke, når WordPress gør det, så vi altid vil få det i vores dashboard:

add_action( 'init', 'register_movie' );

Etiketterne

I den næste linje begynder vi ved at erklære navnet på vores funktion og en variabel med alle de etiketter, der vil blive knyttet til vores filmposttype, så alt kan tilpasses.

Den første ting, vi erklærer i etiketterne, er navnet på vores brugerdefinerede posttype, i plural og singular form:

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

I de to næste linjer skal vi angive vores Tilføj ny tekst (hvis vi ønsker at ændre det), og så sætter vi Tilføj ny film, så når vi tilføjer en ny film, har vi en brugerdefineret oplevelse i stedet for at tilføje en film og have en overskrift siger 'Tilføj nyt indlæg'.

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

Efter etiketterne til oprettelse af en ny film skal vi indstille etiketterne til redigering, den nye elementtekst (som standard er Ny post / Ny side), og vi skal også indstille visningspostteksten:

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

Nu i etiketterne går vi videre til søgefunktionerne i wordpress admin og vores etiketter til det. Vi skal sætte mærker til, når vi søger film, når der ikke findes resultater, og også når der ikke findes nogen resultater i papirkurven:

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

Den sidste etiket taler for sig selv, her skal vi placere det navn, vi ønsker, at den brugerdefinerede posttype skal have i menuen UI, i dette tilfælde holder vi bare ved "Film":

'menu_name' => 'Movies',);

Argumenterne

Nu skal vi flytte til vores argumenter, for det skabte jeg en anden variabel, der vil holde alle de argumenter, jeg kaldte det args.

Det første argument, det anmoder om, er etiketterne, og alt, hvad vi skal gøre, peger på den etiketvariabel, vi lige har undersøgt, som sådan:

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

I den næste linje skal vi angive, om vores posttype vil være hierarkisk som sider eller ej (som indlæg). I mit tilfælde ønsker jeg ikke, at film skal være hierarkisk, så jeg har sat det til falsk. Den næste linje er kun en valgfri beskrivelse af posttypen.

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

Næste linje er en vigtig; her skal vi angive, hvad vores brugerdefinerede posttype vil understøtte, hvilke felter den vil have. Indstillingerne for dette felt er:

  • 'titel'
  • 'Editor'
  • 'forfatter'
  • 'Miniature'
  • 'uddrag'
  • 'trackbacks'
  • 'custom-felter'
  • kommentarer '
  • 'revisioner'
  • 'page-attributter'
  • 'post-formater'

I mit tilfælde og for min indlægstype vil jeg kun have støtte til titlen, WYSIWYG- editoren, en miniature og kommentarer, og for at gøre det skal jeg tilføje et array i denne linje som sådan:

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

I den næste linje skal vi angive, hvilke taksonomier den skal bruge, og da vi vil oprette brugerdefinerede taksonomier, er de dem der vil blive tilføjet i denne linje:

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

De næste tre linjer har at gøre med posttypens synlighed i administrationsområdet, og alt jeg gør er sat alt dette til sandt:

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

Dernæst flyttes vi til positionen i menuen, hvor posttypen skal vises. Her har vi også mange muligheder at vælge imellem:

  • 5 - Under indlæg
  • 10 - Under medierne
  • 15 - Under Links
  • 20 - Under Sider
  • 25 - Under kommentarer
  • 60 - Under første separator
  • 65 - Under plugins
  • 70 - Under brugere
  • 75 - Nedenfor Værktøjer
  • 80 - Under indstillinger
  • 100 - Under anden separator

I mit tilfælde ønskede jeg at film skulle vises umiddelbart efter indlæg, så jeg satte sin menuposition til 5 som sådan:

'menu_position' => 5,

I den næste linje tager vi os af ikonet, vi kan sætte vores eget ikon eller lade det være tomt, og vi vil få postikonet i stedet, linjen efter det tager sig af, hvad vi vil have denne posttype, der skal vises i vores menuer .

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

I de næste 3 linjer tilføjer vi posttypens evner; vi indstiller først, om vi vil have den pågældende posttype, der skal forespørges på forsiden, så beslutter vi, om vi ønsker, at posttypens resultater udelukkes fra søgninger, og endelig beslutter vi, om vi ønsker et arkiv til filmposttypen:

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

I den næste linje sætter vi forespørgselsvariablen for vores posttype, og dette definerer, hvordan URL'en vil se. For denne mulighed har vi tre mulige parametre: vi kan indstille den til sand og så kan vi nå filmen ved hjælp af /? Film = name_of_movie; vi kan sætte det på en streng, så filmen i webadressen vil blive erstattet af noget vi vil have, f.eks. "show", og vi skal bruge /? show = name_of_movie for at nå samme film; Den sidste mulighed er at indstille den til falsk og på den måde gør du det umuligt at nå en film ved hjælp af query_var. I mit tilfælde, og med sidstnævnte mulighed i tankerne, satte jeg min forespørgsel var til sand, så vi kunne nå det med spørgsmålet om film:

'query_var' => true,

I næste linje beslutter vi, om vi ønsker at filmen kan eksporteres, og så vælger vi slugken til denne posttype, i mit tilfælde har jeg bare fast med at have 'film' som slugken, men du kan vælge en hvilken som helst streng for at være den slug og du har faktisk masser af muligheder, er denne parameter en omfattende.

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

Den sidste linje i vores argumenter er, hvor vi indstiller evt. Typen af ​​vores indlæg, og da jeg vil have, at den har de samme nøjagtige som normale indlæg, har jeg lige givet det værdien af posten som sådan:

   'capability_type' => 'post');

Vores etiketter og argumenter er gjort, alt hvad vi skal gøre nu, er at registrere vores posttype, og register_post_type- funktionen tager to parametre, den første er navnet på vores brugerdefinerede posttype (dette har maksimalt 20 bogstaver og uden store bogstaver eller mellemrum), og den anden er argumenterne for posttypen og i denne ene vil vi bare placere vores args-variabel:

    register_post_type( 'movie', $args );}

Vores posttype er oprettet og helt funktionel, og alt hvad du behøver for at få det til at dukke op på dine sider er noget wp_query magi.

Afsluttende ord

Jeg håber du kan se, hvorfor så mange mennesker bruger tilpassede posttyper i WordPress.

Denne artikel skulle give dig en forståelse for processen med at oprette en brugerdefineret posttype og give dig et udgangspunkt for at oprette dine egne fantastiske brugerdefinerede posttyper.

Fremhævet billede / miniaturebillede, tilpasset billede af ATOMIC Hot Links, via Flickr.