Skapa arkiv per år, månad och kategori

written by Lena on October 26, 2008 in Wordpress with 6 comments

Ett enkelt och överskådligt arkivsystem är nästan ett måste om man bloggar – framförallt om man bloggar mycket. Ofta används denna templatetag någonstans långt ned i sidoblocket:

  1. <?php wp_get_archives(); ?>

Resultatet kan bli en lång lista som givetvis tar en massa plats. Vi ska nu kika på hur man kan lösa detta på ett bra och praktiskt vis genom att ge arkivet sina egna sidor och sedan skapa en länk till arkivet utan att använda något plugin.

Filen archives.php

Det första vi behöver är en fil som heter archives.php. Var aktsam om att denna inte är detsamma som filen archive.php. I filen archives.php lägger vi in de templatetags som normalt förekommer i sidoblocket.

Börja med att öppna upp ett tomt dokument som du sedan kallar archives.php. Eftersom det är ett helt nytt template (sida) vi ska göra så måste vi också ange ett namn så wordpress kan hitta denna. Högst upp i detta dokument lägger du därför in följande kod:

  1. <?php
  2. /*
  3. Template Name: Archives
  4. */
  5. ?>

Direkt under dessa koder så infogar du detta:

  1. <?php get_header(); ?>

Hur vi lägger in kommande koder har att göra med hur just din layout ser ut, men låt oss säga att koderna för din sidebar kommer direkt efter “get header” då infogar du också den direkt efter.

  1. <?php get_sidebar(); ?>

Vi ska ta oss fram till det block som du huvudsakligen använder, ex content, maincol, main osv – det vill säga till det block som ditt innehåll finns. Först ska vi ha en rubrik som anger arkiv för respektive kategori:

  1. <h2>Arkiverat per kategori</h2>

Därefter – omedelbart efter – infogar du följande (enbart för arkiv kategorier):

  1. <?php $catid = $wpdb->get_var("SELECT cat_ID FROM $wpdb->categories WHERE cat_name='namn på någon speciell kategori du vill ange först'"); ?>

Eftersom arkivet ska anges i listform ser själva koderna för arkivet ut så här. Observera att det är ett mellanrum mellan start och sluttagg, tag bort denna om koden ska fungera:

  1. <ul>
  2. < ?php wp_list_categories('title_li=&sort_column=name&show_last_updated=1&use_desc_for_title=1&exclude=' .$catid. '') ? >
  3. </ul>

Det var listan för dina kategorier. Nu ska vi även göra ett arkiv som listar dina månader och det ser exakt likadant ut som för dina kategorier, byt bara ut koden och lägg in följande koder under arkivet för kategorierna:

  1. <h2>Arkiverat per månad</h2>
  1. <ul>
  2. <?php wp_get_archives('type=monthly'); ?>
  3. </ul>

Sist vill vi kanske ha ett arkiv för alla år som du har bloggat, det gör vi på samma vis:

  1. <h2>Arkiverat per år</h2>
  1. <ul>
  2. <?php wp_get_archives('type=yearly'); ?>
  3. </ul>

Du avslutar din layout som vanligt med att lägga in:

  1. <?php get_footer(); ?>

Det här var filen archives.php. Nu ska vi göra huvudfilen som anropar respektive arkiv.

Att göra filen archive.php

Var mycket noga med vilken fil det handlar om eftersom namnen är så lika. Archive.php är en “vanlig” fil – det vill säga en fil där “The Loop” finns. Har du inte filen archive.php så kan du kopiera din index.php och döpa om den förutsatt att den inte är modifierad med nya koder eller customfields. Vi ska alltså ha en sida med enkla och rena (post)koder som börjar med denna kod i The Loop:

  1. <?php if (have_posts()) : ?>

Koder som kallar på respektive arkivsida

Det är mellan < ?php if (have_posts()) : ? > och < ?php while (have_posts()) : the_post(); ? > vi ska stoppa in våra speciella koder och templatetags.

  1. <?php if (have_posts()) : ?>
  2. <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?>
  3. <?php /* If this is a category archive */ if (is_category()) { ?>
  4. <h2><?php single_cat_title(); ?></h2>
  5. <?php /* If this is a tag archive */ } elseif( is_tag() ) { ?>
  6. <h2>Taggat &#8216;<?php single_tag_title(); ?>&#8217;</h2>
  7. <?php /* If this is a daily archive */ } elseif (is_day()) { ?>
  8. <h2>Archive for <?php the_time('F jS, Y'); ?></h2>
  9. <?php /* If this is a monthly archive */ } elseif (is_month()) { ?>
  10. <h2>Archive for <?php the_time('F, Y'); ?></h2>
  11. <?php /* If this is a yearly archive */ } elseif (is_year()) { ?>
  12. <h2>Archive for <?php the_time('Y'); ?></h2>
  13. <?php /* If this is an author archive */ } elseif (is_author()) { ?>
  14. <h2>Vi som skriver!</h2>
  15. <?php /* If this is a paged archive */ } elseif (isset($_GET['paged']) && !empty($_GET['paged'])) { ?>
  16. <h2>Blog Arkiv</h2>
  17. <?php } ?>
  18. <?php while (have_posts()) : the_post(); ?>

Därefter kommer koden som visar respektive arkiv (likt vanliga poster):

  1. <div class="Post" id="post-<?php the_ID(); ?>">

Glöm inte att spara denna fil som archive.php utan s på slutet. När allt är klart skickar du upp filerna i din temamapp.

Infoga ditt nya arkiv i wordpress

Klicka in dig på Write Page – och skriv in titeln, förslagsvis arkiv. Därefter skrollar du ned så du kommer till rullgardinslistan Page Template. Leta fram filen som heter Archives, den bör ligga direkt efter Default. Markera (klicka på) filen Archives så du verkligen ser att det är denna som förvalts. Sedan skrollar du upp till Publish Status och markerar Published. Sist trycker du på Publish.

Länken som öppnar arkivsidan archives.php är beroende på vilket ID sidan har och titeln du har givit den. Antingen anger du absolut url – det vill säga http://din_domän.se/sidans_titel/ – eller så länkar du till sidan med följande kod (sidans ID) Observera att det är ett mellanrum mellan start och sluttagg, tag bort denna om koden ska fungera:

  1. <ul>
  2. < ?php wp_list_pages('sort_column=menu_order&include=Sidans_ID&title_li='); ? >
  3. </ul>

Du kan se hur det fungerar genom att klicka på arkiv uppe i min meny.
Lycka till!

Liknande poster:

Share with me
Created by disruptive.nu