WordPress maakt standaard archieven die al uw berichten in omgekeerde volgorde weergeven. Als gebruikers berichten in een bepaalde categorie of met een gegeven taxonomieperiode zoeken, moeten ze de archiefpagina voor die categorie of term bezoeken.
Maar wat als u uw hoofdarchief voor een berichttype gebruiksvriendelijker wilt maken? In deze zelfstudie laat ik je zien hoe je een archiefpagina kunt maken voor een aangepast berichttype waarin berichten van dat berichttype worden weergegeven op basis van een taxonomie, zodat bezoekers in plaats van één lange lijst een lijst voor elke taxonomieterm zien.
Om deze tutorial te volgen, heb je een ontwikkelinstallatie van WordPress en een code-editor nodig. Je maakt een thema dat een kindthema is van vierentwintig, dus dat moet je geïnstalleerd hebben (wat het standaard zou moeten zijn).
Ik ga je niet laten zien hoe je een kindthema kunt maken, maar als je vastzit, kijk dan eens naar het stylesheet in het codebundel voor deze tutorial.
In mijn ervaring is deze techniek meestal nodig voor aangepaste berichttypen en taxonomieën in plaats van voor normale berichten en categorieën of tags, dus ik zal beginnen met het registreren van een berichttype en taxonomie.
Opmerking: ik gebruik hetzelfde 'dier'-berichttype dat ik heb geregistreerd in een eerdere zelfstudie over het maken van een op afbeeldingen gebaseerd archief. Als je de dingen een beetje verder wilt duwen, zou je de techniek in die tutorial kunnen combineren met de techniek die ik je hier laat zien en je lijst met taxonomie-termen met aanbevolen afbeeldingen weergeven.
Voeg in het functiedossier van je thema de volgende code toe om het berichttype te registreren:
// registreer een aangepast berichttype genaamd 'dieren' functie wptp_create_post_type () $ labels = array ('name' => __ ('Dieren'), 'singular_name' => __ ('dier'), 'add_new' => __ ('Nieuw dier'), 'add_new_item' => __ ('Nieuw dier toevoegen'), 'edit_item' => __ ('Dier bewerken'), 'new_item' => __ ('Nieuw dier'), 'view_item '=> __ (' View animal '),' search_items '=> __ (' Dieren zoeken '),' not_found '=> __ (' Geen dieren gevonden '),' not_found_in_trash '=> __ (' Geen dieren gevonden in Prullenbak '),); $ args = array ('labels' => $ labels, 'has_archive' => true, 'public' => true, 'hierarchical' => false, 'supports' => array ('title', 'editor', ' excerpt ',' custom-fields ',' thumbnail ',' page-attributes '),' taxonomies '=> array (' post_tag ',' category '),); register_post_type ('dier', $ args); add_action ('init', 'wptp_create_post_type');
Voeg vervolgens de code toe om de taxonomie te registreren:
// registreer een taxonomie met de naam 'Animal Family'-functie wptp_register_taxonomy () register_taxonomy (' animal_cat ',' animal ', array (' labels '=> array (' name '=>' Animal Families ',' singular_name '=>' Animal Family ',' search_items '=>' Zoek dierfamilies ',' all_items '=>' Alle dierenfamilies ',' edit_item '=>' Bewerk dierfamilies ',' update_item '=>' Werk dierfamilie bij ',' add_new_item '=>' Nieuwe dierfamilie toevoegen ',' nieuwe_itemnaam '=>' Nieuwe dierfamilienaam ',' menu_naam '=>' dierfamilie ',),' hierarchisch '=> waar,' sorteren '=> waar,' args '=> array (' orderby '=>' term_order '),' rewrite '=> array (' slug '=>' dierfamilie '),' show_admin_column '=> true)); add_action ('init', 'wptp_register_taxonomy');
Nadat u dit hebt gedaan, voegt u enkele gegevens toe. Hieronder ziet u de gegevens die ik heb toegevoegd met een aantal taxonomiebepalingen die zijn toegepast. Ik maak geen aanspraak op de nauwkeurigheid van mijn terminologie met betrekking tot dierfamilies, dus reageer alsjeblieft niet als ik het fout heb!
De volgende stap is het maken van een archiefsjabloon voor het nieuwe berichttype. Maak in je thema een nieuw bestand met de naam archief-animal.php
.
Omdat dit thema een kindthema is van vierentwintig, heeft de archiefsjabloon code nodig die is gekopieerd van dat thema als een omslag voor de aangepaste lus die u gaat maken. Voeg dus het volgende toe aan uw archiefsjabloon:
Opmerking: als u met uw eigen thema werkt, kopieert u de inpakcode uit de index of het archiefbestand van uw eigen thema.
3. Het vullen van de archiefsjabloon: voorwaarden voor taxonomie ophalen
Zodat uw archief dieren op taxonomie termijn kan weergeven, is de volgende stap om die termen op te halen.
In uw nieuwe sjabloonbestand, onder de afsluiting
tag (of onder het openingsgedeelte van uw inpakcode als u uw eigen thema gebruikt), haal de termen op met
get_terms ()
:'tellen', 'hide_empty' => 0)); ?>Merk op dat ik hier twee parameters heb gebruikt:
orderby
- Hiermee kunt u de volgorde van de weergegeven termen opgeven. Ik heb gebruikt tellen
als de waarde, zodat de term met de meeste berichten die eraan zijn toegewezen, als eerste wordt weergegeven, maar u kunt op naam of ID bestellen. Als u dit veld leeg laat, wordt WordPress op naam gesorteerd. Zie de Codex-pagina op get_terms ()
voor meer details.hide_empty
- dit vertelt WordPress om geen termen op te halen zonder dat er berichten aan hen zijn toegewezen. Het bespaart u dat u later moet controleren of uw zoekopdracht berichten bevat.Nadat je dit gedaan hebt, gebruik je foreach ()
om aan WordPress door te geven om elk van deze termen door te nemen en een query uit te voeren die u moet definiëren. Onder de code die u zojuist hebt toegevoegd, voert u het volgende in:
'animal', 'animal_cat' => $ term-> slug); $ query = new WP_Query ($ args);
Dit vertelt WordPress elke term te doorlopen en definieert vervolgens de query die elke keer moet worden uitgevoerd. De argumenten voor de query omvatten het berichttype en de term in de 'Animal_cat'
taxonomie, wat de waarde is van de $ term
veranderlijk.
Na het definiëren van uw vraag, moet u een lus toevoegen. Voer eerst de naam uit van de term die als een kop wordt opgevraagd. Onder het lijnbegin $ vraag
maar binnen de accolades van de foreach
verklaring, voeg deze regel toe:
echo''. $ term-> naam. '
';
Voeg vervolgens de code toe om uw berichten in een lijst te bevatten:
// de berichttitels uitvoeren in een lijstecho '
Voeg binnen de lijst uw loop toe:
// Start the Loop while ($ query-> have_posts ()): $ query-> the_post (); ?>
Zoals u kunt zien, is dit een eenvoudige lus die de titel van elk bericht in een link naar het bericht uitvoert en geen inhoud uitvoert. Als je wilt, kun je hier een uittreksel of uitgelichte afbeelding toevoegen.
Reset tot slot de query met wp_reset_postdata ()
onder de lijnaflezing echo '';
Dit is hoe uw vraag en loop er nu uit zullen zien:
'animal', 'animal_cat' => $ term-> slug); $ query = new WP_Query ($ args); // output de term naam in een echo van de eindtag ''. $ term-> naam. '
'; // de berichttitels uitvoeren in een lijstecho '
Sla tot slot uw sjabloonbestand op en bekijk uw archief van het posttype. U zult zien dat uw berichten op taxonomie worden vermeld in plaats van in een lange lijst.
Deze techniek is handig wanneer u wilt dat bezoekers snel gecategoriseerde gegevens kunnen zien zonder naar een reeks archiefpagina's te hoeven kijken - het brengt alles samen op één plaats, maar gesorteerd voor het gemak. Hier zijn enkele ideeën voor hoe u de techniek kunt aanpassen en verder kunt brengen:
get_categories ()
of get_tags ()
.index.php
bestand om berichten weer te geven op categorie, tag of taxonomie.posts_per_page
en compenseren
in uw zoekargumenten om dit te doen - bekijk details over hoe dit werkt op de WP_Query Codex-pagina.posts_per_page
om het aantal weergegeven berichten te beperken, zodat elke lijst even lang is. Je zou dit met styling kunnen combineren om lijsten naast elkaar weer te geven.get_term_link ()
om dit te doen.