Rock-Solid WordPress 3.0-teman använder anpassade posttyper

WordPress-communityet surrar med spänning över den snart kommande versionen av WordPress 3.0. För närvarande i Beta 2 nu kommer WordPress 3.0 att ha många spännande nya funktioner, till exempel ett nytt standardtema och bättre menyhantering. Kanske mest spännande av dessa funktioner är anpassade posttyper. I denna handledning talar vi om att skapa och använda anpassade posttyper för att skapa ett rockfast tema.


Vad är en anpassad posttyp?

Tja, enligt WordPress Codex:

"Posttyp hänvisar till de olika strukturerade data som bibehålls i WordPress-posttabellen. Anpassade posttyper gör att användare enkelt kan skapa och hantera sådana saker som portföljer, projekt, videobiblioteken, podcaster, citat, chattar och vad som helst en användare eller utvecklare kan föreställa."

I grunden tillåter det oss att utvecklare gör nya typer av inlägg som liknar post och sidtyper, som alla visas i huvudnavigering i WordPress-administratören. Det finns flera fördelar med detta; framförallt behöver vi inte längre pluggar för att skapa speciella typer, vi kan bygga ett tema som bygger mindre på anpassade fält (som vi känner till dem), och de gör hanteringen av webbplatsen enklare för kunder och icke-tekniska användare. I stället för att berätta för dem att skapa ett "inlägg" och se till att fylla i alla typer av anpassade fält för exempelvis musik, kan vi helt enkelt berätta för dem att klicka på "Musik" för att lägga till ett nytt musikpost.

Låt oss börja!

I denna handledning kommer vi att:

  • Skapa en anpassad posttyp för produkter med egna ingångar
  • Skapa en anpassad "taxonomi" för typen.
  • Skapa en templatsmall för att följa med den nya typen.

Registrera den anpassade posttypen

Allt detta kommer att göras från vårt temas funktioner.php-fil. Jag ändrar standard 3.0 temat, TwentyTen.

Det första vi ska göra är att berätta för WordPress att vi vill registrera en ny anpassad typ. Här är koden:

 add_action ('init', 'product_register'); funktion product_register () $ args = array ('label' => __ ('Produkter'), 'singular_label' => __ ('Produkt'), 'public' => true, 'show_ui' => true, 'capability_type '=>' post ',' hierarkisk '=> false,' rewrite '=> true,' supports '=> array (' titel ',' redaktör ',' miniatyrbild ')); register_post_type ('produkt', $ args); 

Den första raden är en krok för att berätta för WordPress att vi vill ringa funktionen product_register () under initialisering. Det är i den funktionen att vi registrerar den nya posttypen.

Funktionen register_post_type () accepterar två argument: namnet vi vill ge vår posttyp och en lista med argument som används för att skapa den posttypen, som vi lägger in en array som heter $ args. Du kan läsa exakt vad alla argument är här, men jag vill påpeka de viktiga.

  • etikett & singular_label: Dessa är etiketterna som vi vill att dom ska visas i WordPress-administratören. 'label' visas i admin nav och var som helst som refererar till flera poster av den typen (redigera produkter, till exempel). 'singular_label' kommer att dyka upp när en av den typen är refererad (Lägg till produkt, till exempel).
  • capability_type: Detta berättar WordPress vilken inbyggd typ (post, sida, bilaga, revision eller nav-menyobjekt) den anpassade typen uppträder som. Genom att göra det till en "post" -typ kan vi göra saker som att lägga till den i en kategori.
  • skriva om: Berätta WordPress om (eller hur) att tillämpa permalinksformatering. Du kan skicka en booleska som vi gjorde, eller en rad argument att tillämpa ett anpassat permalinkformat till typen.
  • bärare: Det här är allt på sidan Lägg till / redigera som kommer att dyka upp. Vi vill ha en titel, redaktör (innehållet) och miniatyrbilder. Därefter lägger vi till egna anpassade inmatningar genom att smidigt maskera anpassade fält som inmatningsfält för vår anpassade typ.

Lägger till våra egna ingångar

Låt oss lägga till egna anpassade ingångar för vår nya typ. Eftersom vi nu kan skapa nya posttyper kan vi göra de anpassade fälten mer strömlinjeformade för användare som kanske inte är så bekanta med WordPress som vi är. Det är värt att notera här att denna funktionalitet har varit tillgänglig sedan 2.5 och fram till denna punkt har använts främst av pluginutvecklare. Här kommer vi att lägga till ett prisfält.

 ID); $ pris = $ anpassat ["pris"] [0]; ?>  ID, "pris", $ _POST ["pris"]); ?>

Återigen är de första par raderna krokar för att berätta för WordPress när vi vill använda vissa funktioner. Den första raden säger att när administratörspanelen initialiseras, ring den funktion som vi skrev, admin_init (). Den här funktionen säger att WordPress lägger till ett område som heter "Produktalternativ" till alla inlägg av typen "produkt" och att använda funktionen meta_options () att skriva ut formulärfälten. Du kan läsa mer om add_meta_box här. meta_options () kommer då att få några tidigare existerande anpassade värden och skriva ut formulärfältet. Den andra åtgärdslinjen anger att när en post är sparad, ring vår funktion save_price (), vilken använder update_post_meta () att lägga till eller uppdatera ett anpassat fält som heter "pris".


Anpassade kategorier och redigera kolumner

Vårt sista steg i att skapa en helt anpassad typ ger unika namn till sin kategori och ändrar kolumnetiketter. För det första är det anpassade kategorinamnet, eller "taxonomi".

 register_taxonomy ("katalog", array ("produkt"), array ("hierarkisk" => true, "label" => "Kataloger", "singular_label" => "Catalog", "rewrite" => true));

Funktionen vi använder är register_taxonomy (), som du hittar i codex här; Det har varit tillgängligt sedan 2.8. Det sägs i huvudsak att vi vill skapa en ny kategori typ som heter "katalog" som vi kommer att associera med "produkt" -typen. Det sista argumentet är en mängd information som liknar vad vi såg register_post_type () fungera. När allt är sagt och gjort kommer vi att få termen "Katalog" under vår produktmeny i WordPress-administratören och det kommer att verka som postkategorier gör.

Därefter vill vi skapa en anpassad uppsättning kolumner för vår produkttyp.

 add_filter ("manage_edit-product_columns", "prod_edit_columns"); add_action ("manage_posts_custom_column", "prod_custom_columns"); funktion prod_edit_columns ($ kolumner) $ kolumner = array ("cb" => ""," title "=>" Produkttitel "," beskrivning "=>" Beskrivning "," pris "=>" Pris "," katalog "=>" Katalog "); returnera $ kolumner; funktion prod_custom_columns kolumn) global $ post; switch ($ kolumn) case "description": the_excerpt (); break; case "pris": $ custom = get_post_custom (); echo $ custom ["pris"] [0]; fall "katalog": echo get_the_term_list ($ post-> ID, 'katalog', ',', ','); break;

De två första raderna är krokar för att berätta för WordPress att vi vill ha anpassade kolumner för typen "produkt". Den första raden säger att när du skriver ut kolumner för produkttypen, använd de som definieras i funktionen prod_edit_columns ().

I prod_edit_columns (), Vi har en nyckelvärdesuppsättning där tangenterna används för att referera till viss postinformation, som vi definierar i den andra funktionen, prod_custom_columns (). Värdena i den arrayen är kolumnrubrikerna. Det märker du kanske prod_edit_columns () listar fem kolumner, men vi beskriver bara visningsinformation för tre in prod_custom_columns (). 'cb' och 'title' är en del av en uppsättning standardnycklar som WordPress redan har föreningar för. WordPress vet inte vad de tre andra är, så det är upp till oss att definiera dem.


Skapa temalmall

Inte för lurvigt, eller hur? Och nu är vi äntligen upp till den roliga delen - temalmallen. För att skapa en templatschema för en anpassad posttyp, namnger vi bara mallen singel-.php och lägg till det till vårt tema. I vårt fall skulle detta vara single-product.php. Här kommer jag att visa dig ett utdrag av den sidan som visar all information vi har lagt till i vår anpassade posttyp:

  ID); $ pris = "$". $ Anpassade [ "pris"] [0]; ?> 
>

-

Jag har lagt till den här koden i Twentyten-temat i WordPress 3.0 Beta, eftersom det är det enda temat som stöder den nya funktionaliteten, nämligen menysystemet. Jag kopierade single.php-mallen, bytt namn på den single-product.php och ersatte allt i "content" div med koden ovan. För att testa min kod gick jag till Teman-> Menyer och lade till vår nya typ på min webbplatss navigering. Sedan klickade jag till vår anpassade posttyp.


Avslutar

Som jag sa tidigare är WordPress 3.0 fortfarande i beta (du kan hämta det här); så det finns fortfarande några buggar att träna och vissa saker kan förändras i den slutliga versionen. Det bästa du kan göra är att komma in där och spela med några av de nya funktionerna för att bekanta dig med uppdateringarna / ändringarna. Från vad jag har sett hittills ser sakerna ganska bra ut!