Som standard skapar WordPress arkiv som listar alla dina inlägg i omvänd ordning. Om användare letar efter inlägg i en viss kategori eller med en viss taxonomideterm, måste de besöka arkivsidan för den kategorin eller termen.
Men vad händer om du vill göra ditt huvudarkiv för en posttyp mer användarvänlig? I denna handledning visar jag dig hur du skapar en arkivsida för en anpassad posttyp som visar inlägg av den posttypen kategoriserad enligt en taxonomi, så att i stället för en lång lista kommer besökarna att se en lista för varje taxonomi.
För att följa denna handledning behöver du en utvecklingsinstallation av WordPress och en kodredigerare. Du skapar ett tema som är ett barntema på tjugofemtio, så du behöver det installerade (vilket det borde vara som standard).
Jag ska inte visa dig hur man skapar ett barntema, men om du har fastnat, ta en titt på stilarket i kodpaketet för denna handledning.
Enligt min erfarenhet är denna teknik vanligtvis nödvändig för anpassade posttyper och taxonomier snarare än för vanliga inlägg och kategorier eller taggar, så jag börjar med att registrera en posttyp och taxonomi.
Obs! Jag använder samma "djur" posttyp som jag registrerade i en tidigare handledning om att skapa ett bildbaserat arkiv. Om du vill driva sakerna lite längre kan du kombinera tekniken i den handledningen med den jag visar dig här och visa dina listor med taxonomi med utvalda bilder.
I ditt temas funktionsfil lägg till följande kod för att registrera posttypen:
// registrera en anpassad posttyp som kallas "djur" funktion wptp_create_post_type () $ labels = array ('name' => __ ('Djur'), 'singular_name' => __ ('animal'), 'add_new' => __ ('Nytt djur'), 'add_new_item' => __ ('Lägg till nytt djur'), 'edit_item' => __ ('Rediger djur'), 'new_item' => __ ('Nytt djur'), 'view_item '=> __ (' Visa djur '),' search_items '=> __ (' Sök djur '),' not_found '=> __ (' Inga djur hittades '),' not_found_in_trash '=> __ (' Inga djur hittades Skräp' ), ); $ args = array ('labels' => $ etiketter, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => utdrag ',' anpassade fält ',' miniatyrbild ',' sidattribut '),' taxonomies '=> array (' post_tag ',' category ')); register_post_type ('animal', $ args); add_action ('init', 'wptp_create_post_type');
Lägg sedan till koden för att registrera taxonomin:
// register en taxonomi som heter "Animal Family" funktionen wptp_register_taxonomy () register_taxonomy ('animal_cat', 'animal', array ('etiketter' => array ('name' => 'Animal Families', 'singular_name' => ' Djurfamilj "," search_items '=>' Sök djurfamiljer ',' all_items '=>' Alla djurfamiljer ',' edit_item '=>' Redigera djurfamiljer ',' update_item '=>' Uppdatera djurfamilj ',' add_new_item '=>' Lägg till ny djurfamilj ',' new_item_name '=>' Nytt djurfamiljnamn ',' menynamn '=>' Djurfamilj '),' hierarkisk '=> sant,' sort '=> sant,' arg '=> array (' orderby '=>' term_order '),' rewrite '=> array (' slug '=>' djurfamilj '),' show_admin_column '=> true)); add_action ('init', 'wptp_register_taxonomy');
När du har gjort det här, lägg till några data. Nedan kan du se de data jag har lagt till med vissa taxonomi villkor som tillämpas. Jag gör inget påståendet om min terminologi när det gäller djurfamiljer, så snälla, kommentera inte om jag har fel!
Nästa steg är att skapa en arkivmall för den nya posttypen. Skapa ett nytt namn i ditt tema arkiv-animal.php
.
Eftersom det här temat är ett barntema för tjugofemtioår, kommer arkivmallen att behöva kod kopierat från det temat som ett omslag för den anpassade loop du ska skapa. Så lägg till följande i din arkivmall:
Obs! Om du arbetar med ditt eget tema kopierar du inpakningskoden från ditt eget temas index eller arkivfil.
3. Följa arkivmallen: Hämta taxonomi
Så att ditt arkiv kan visa djur efter taxonomi, är nästa steg att hämta dessa villkor.
I din nya mallfil, under stängningen
tagg (eller under den inledande delen av din förpackningskod om du använder ditt eget tema), hämta villkoren med
get_terms ()
:'räkna', 'hide_empty' => 0)); ?>Observera att jag har använt två parametrar här:
sortera efter
- Detta låter dig ange ordningen för de angivna termerna. Jag har använt räkna
som värdet så att termen med de flesta inlägg som tilldelas den visas först, men du kan beställa med namn eller ID - om du lämnar detta tomt ordnar WordPress efter namn. Se Codex-sidan på get_terms ()
för mer detaljer.hide_empty
- Detta berättar att WordPress inte hämtar några villkor utan inlägg som tilldelats dem. Det sparar dig att kontrollera om din fråga har några inlägg senare.Har du gjort det, använder du för varje()
att berätta för WordPress att gå igenom alla dessa villkor och köra en fråga som du behöver definiera. Nedanför koden som du just lagt till, lägg till följande:
"djur", "animal_cat" => $ term-> slug); $ query = nytt WP_Query ($ args);
Detta berättar att WordPress ska springa igenom varje term, och definierar sedan frågan som den måste köra varje gång. Argumenten för frågan inkluderar posttypen och termen i 'Animal_cat'
taxonomi, vilket är värdet av $ term
variabel.
Efter att ha definierat din fråga måste du lägga till en slinga. Först, skriv ut namnet på termen som frågas som en rubrik. Under linjen börjar $ query
men inuti armbågarna på för varje
uttalande, lägg till den här raden:
eko''. $ term-> namn. '
';
Lägg sedan till koden för att innehålla dina inlägg i en lista:
// skriva ut titlarna i en lista echo '
Inne i listan lägger du nu till din slinga:
// Starta Loop medan ($ query-> have_posts ()): $ query-> the_post (); ?>
Som du kan se är detta en enkel slinga som matar ut titeln på varje inlägg i en länk till inlägget och matar inte ut något innehåll. Om du ville att du kunde lägga till ett utdrag eller en avbildad bild här.
Slutligen, återställ sökningen med wp_reset_postdata ()
under linjeläsningen eko "';
Så här ser din fråga och slingan ut:
"djur", "animal_cat" => $ term-> slug); $ query = nytt WP_Query ($ args); // mata ut namnet i ett rubrik tag echo "'. $ term-> namn. '
'; // skriva ut titlarna i en lista echo '
Slutligen spara din mallfil och se ditt arkiv av posttyp. Du får se att det listar dina inlägg efter taxonomi men inte på en lång lista.
Den här tekniken är användbar när du vill att besökare snabbt kan se kategoriserad data utan att behöva titta på en rad arkivsidor - det sammanför allt på ett ställe men sorteras för bekvämlighet. Här är några idéer för hur du kan anpassa tekniken och ta det vidare:
get_categories ()
eller get_tags ()
.index.php
fil för att visa inlägg enligt kategori, tagg eller taxonomi villkor.posts_per_page
och offset
i dina frågor argument att göra det här - se detaljer om hur detta fungerar på WP_Query Codex-sidan.posts_per_page
för att begränsa antalet inlägg som visas så att varje lista är lika lång. Du kan kombinera detta med styling för att visa listor sida vid sida.get_term_link ()
att göra detta.