Anpassade posttyper är ett av de viktigaste elementen du bör förstå om du vill skapa flexibla, professionella, WordPress-webbplatser.

Vilka anpassade posttyper gör det är att du kan lägga till din egen typ av data; Det kan vara en artikel, en sång, en film eller tusentals andra saker. Anpassade posttyper tillåter dig att kategorisera dina data enligt dina individuella behov, vilket gör att du kan ta större kontroll över hur din webbplats beter sig.

I den här artikeln tar jag dig genom att skapa en anpassad filmposttyp för en filmdatabas.

Varför använda egna posttyper?

För att skapa en filmwebbplats måste vi skapa en databas. Att göra det utan anpassade posttyper skulle vara extremt knepigt och eventuellt kollidera med vår befintliga WordPress-installation. Men vår anpassade posttyp kommer att ha sin egen admin-meny och anpassad redigeringssida, om vi ville att vi kunde till och med lägga till egna taxonomier till sidan med namnen och egenskaperna som passar projektet.

Anpassade posttyper är vad som tar WordPress från en bloggplattform till ett fullblåst CMS. De ger oss frihet att skapa vår filmwebbplats utan några otäcka hackar.

Skapa vår filmposttyp

I den här artikeln lägger jag ut all kod som är nödvändig för att skapa en anpassad posttyp, och sedan går vi igenom den linjen för att du kan lära dig vad varje del gör och anpassa den till dina behov.

Här är den fullständiga koden som läggs till 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 ganska stor bit av kod går det att skapa en anpassad posttyp men om du förstår det kommer du att kunna få den här koden och anpassa den till dina projekt. I första raden hakar vi funktionen med vår anpassade posttyp till init och det betyder att vår funktion kommer att elda när WordPress gör det så att vi alltid kommer att få det i vår instrumentpanel:

add_action( 'init', 'register_movie' );

Etiketterna

I nästa rad börjar vi med att deklarera namnet på vår funktion och en variabel med alla etiketter som kommer att associeras med vår filmposttyp så att allt kan anpassas.

Det första vi förklarar i etiketterna är namnet på vår anpassade posttyp, i plural och singular form:

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

I de två följande raderna måste vi ange vår nya text (om vi vill ändra den) och sedan ställer vi till Lägg till ny film så att när vi lägger till en ny film har vi en anpassad upplevelse istället för att lägga till en film och ha en rubrik säger "Lägg till ny post".

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

Efter etiketterna för att skapa en ny film måste vi ange etiketterna för redigering, den nya artikeltexten (som standard är Ny post / Ny sida) och vi måste också ställa in visningsposttexten:

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

Nu i etiketterna går vi vidare till sökfunktionerna i WordPress admin och våra etiketter för det. Vi måste ange etiketter för när vi söker efter filmer, när inga resultat hittas, och även om inga resultat hittas i papperskorgen:

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

Den sista etiketten talar för sig själv, här måste vi placera namnet vi vill ha den anpassade posttypen att ha i menyn UI, i det här fallet håller vi bara på "Filmer":

'menu_name' => 'Movies',);

Argumenten

Nu måste vi flytta till våra argument, för att jag skapade en annan variabel som håller alla argument, jag kallade det args.

Det första argumentet som det efterfrågas är etiketterna och allt vi behöver göra är att peka på etikettvariabeln som vi just undersökt, som så:

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

I nästa rad måste vi ange huruvida vår posttyp kommer att vara hierarkisk som sidor eller inte (som inlägg). I mitt fall vill jag inte att filmer ska vara hierarkiska så jag har ställt den till falsk. Nästa rad är bara en valfri beskrivning av posttypen.

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

Nästa rad är en viktig fråga; här måste vi ange vad vår anpassade posttyp kommer att stödja, vilka fält det kommer att ha. Alternativen för detta fält är:

  • 'titel'
  • 'redaktör'
  • 'författare'
  • 'Miniatyr'
  • 'utdrag'
  • 'trackbacks'
  • 'Anpassade fält'
  • 'kommentarer'
  • 'revideringar'
  • 'page-attribut'
  • 'post-format'

I mitt fall och för min inläggstyp vill jag bara att den ska stödja titeln, WYSIWYG- redigeraren, en miniatyr och kommentarer och för att göra det måste jag lägga till en array i den här raden, så här:

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

I nästa rad måste vi ange vilka taxonomier den ska använda, och eftersom vi kommer att skapa anpassade taxonomier är det de som kommer att läggas till i den här raden:

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

De följande tre raderna har att göra med posttypens synlighet i administrationsområdet och allt jag gör är att allt är så sant:

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

Nästa flyttar vi till positionen på menyn där posttypen ska visas. Här har vi också många alternativ att välja mellan:

  • 5 - Under inlägg
  • 10 - Under media
  • 15 - Under Länkar
  • 20 - Nedan Sidor
  • 25 - Nedanför kommentarer
  • 60 - Under första separatorn
  • 65 - Nedanför pluggar
  • 70 - Nedanvändare
  • 75 - Nedan Verktyg
  • 80 - Nedan inställningar
  • 100 - Under den andra separatorn

I mitt fall ville jag att filmer skulle visas omedelbart efter inlägg så jag satte menypositionen till 5, som så:

'menu_position' => 5,

I nästa rad tar vi hand om ikonen, vi kan ställa in vår egen ikon eller lämna den tom och vi kommer att få inläggets ikon istället, linjen efter det tar hand om vad vi vill att denna posttyp ska visas för urval i våra menyer .

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

I de följande 3 raderna lägger vi till posttypens kapacitet; vi bestämmer först om vi vill ha den posttypen som frågas i fronten, då bestämmer vi om vi vill att posttypresultaten ska uteslutas från sökningar och slutligen bestämmer vi om vi vill ha ett arkiv för filmposttypen:

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

I nästa rad ställer vi upp frågarvariabeln för vår posttyp och det här kommer att definiera hur webbadressen ska se ut. För det här alternativet har vi tre möjliga parametrar: vi kan ställa in det till sant och då kan vi nå filmen med hjälp av /? Film = name_of_movie; vi kan ställa in den till en sträng så att filmen i webbadressen kommer att ersättas med allt vi vill ha, till exempel "show" och vi måste använda /? show = name_of_movie för att nå samma film; Det sista alternativet är att ställa in det på felaktigt sätt och det gör det omöjligt att nå en film med query_var. I mitt fall och med det senare alternativet i åtanke ställde jag min fråga till sant så att vi kunde nå det med frågans fråga om film:

'query_var' => true,

I nästa rad bestämmer vi om vi vill att filmerna ska exporteras och då väljer vi slug för denna posttyp, i mitt fall har jag bara fastnat med sant att ha "film" som sluget men du kan välja vilken sträng som helst slug och du har faktiskt gott om alternativ, denna parameter är en omfattande.

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

Den sista raden av våra argument är där vi ställer in vår typ av kapacitet och eftersom jag vill att den ska ha exakt samma som vanliga inlägg, gav jag bara värdet på inlägget, som så:

   'capability_type' => 'post');

Våra etiketter och argument är gjort, allt vi behöver göra nu är att registrera vår posttyp och funktionen register_post_type tar två parametrar, den första är namnet på vår anpassade posttyp (det här har högst 20 bokstäver och utan stora bokstäver eller mellanslag) och den andra är argumenten för posttypen och i den här kommer vi bara att placera vår args-variabel:

    register_post_type( 'movie', $args );}

Vår posttyp är skapad och helt funktionell och allt du behöver för att få det att visas på dina sidor är lite wp_query magi.

Slutliga ord

Jag hoppas att du kan se varför så många använder egna posttyper i WordPress.

Den här artikeln var avsedd att ge dig en förståelse för processen att skapa en anpassad posttyp och ge dig en utgångspunkt för att skapa dina egna fantastiska anpassade inläggstyper.

Utvalda bild / miniatyrbild, anpassad bild av ATOMIC Hot Links, via Flickr.