top of page

WordPress: jak zrobić stronę archiwum?

Zdjęcie autora: Piotr BartczakPiotr Bartczak

Na mojej stronie jakiś czas temu pojawił się odnośnik do strony zbiorczej archiwum, prezentującej listę lat i miesiącami wraz liczbą wpisów. Dostałem kilka pytań jak to jest zrobione, ponieważ standardowa funkcja wp_get_archives, nie ma podziału pozwalającego pogrupować wpisy jeszcze względem roku. Sprawa nie jest aż tak trudna jakby mogła się wydawać, ale wymaga jednak podstawowej znajomości PHP i troszkę tego jak wybierane są pliki szablonów.

Tworzenie własnego szablonu

Na początek należy wytworzyć szablon strony, czyli dodatkowy plik w naszym motywie, który będzie używany przez stronę „Archiwum” jako szablon. Żeby było łatwiej, cały używany w tym artykule kod pasuje do motywu Twenty Eleven i wystarczy go skopiować i użyć, aby działał bez żadnych kłopotów.

Plik może nazywać się w dowolny sposób, a to, że będzie on szablonem decyduje linijka zawierająca „Temlate Name:”. To co znajdzie się po dwukropku będzie potem widoczne w panelu edycji strony. Zaczynając od nagłówka, musi on wyglądać tak:

<?php
/*
Template Name: Archiwum
*/

Oczywiście wyraz Archiwum można zstąpić dowolny, to jest po prostu nazwa naszego szablonu i pod tą nazwą, jeżeli plik został dodany prawidłowo, w boksie „Atrybuty strony” pojawi się on w menu rozwijalnym „Szablon”, co jest wskazane na poniższym obrazie:

Na zakończenie należy dodać stronę, dla której trzeba ustawić utworzony właśnie szablon, dzięki któremu wyświetlimy miesięczne archiwum z nagłówkami w formie lat, czyli dodajemy naszą stronę „Archiwum” i jako szablon wybieramy „Archiwum”.

Przypomnę też, że jeżeli używane są menu, to należy taką stronę dodać do owego menu. Jeżeli natomiast zajdzie potrzeba pokazania odnośnika to utworzonej właśnie strony, o np. dolne menu jest nie zarządzalne i umieszczone jest „na sztywno” w jakiś pliku motywu, można użyć następującego kodu:

<?php
$archive = get_page_by_title( 'Archiwum' );
if ( is_object( $archive ) && isset( $archive->ID ) ) {
    printf(
        '<a href="%s">%</a>',
        get_page_link( $archive->ID ),
        $archive->post_name
    );
}
?>

Pełen listing szablonu

Kompletny kod mojej strony archiwum:

<?php

/*
Template Name: Archiwum
*/
get_header(); ?>
<div id="primary">
    <div id="content" role="main">
        <?php while ( have_posts() ) : the_post(); ?>
        <article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
            <header class="entry-header">
                <h1 class="entry-title"><?php the_title(); ?></h1>
            </header>
            <div class="entry-content">
<?php
$year = 0;
$list = preg_replace(
     '@</li>@',
     '',
     wp_get_archives(
          array(
               'type' => 'monthly',
               'show_post_count' => true,
               'echo' => false
           )
    )
);
$start = true;
foreach ( preg_split( '/<li>/', $list ) as $entry ) {
    if( !preg_match( '/ (\d{4})</', $entry, $matches ) ) {
        continue;
    }
    if ( $matches[1] != $year ) {
        $year = $matches[1];
        if ( !$start ) {
            echo '</ul>';
        }
        printf( '<h2>%d</h2>', $year );
        echo '<ul>';
        $start = false;
    }
    printf( '<li>%s</li>', $entry );
}
echo '</ul>';
?>
            </div>
        </article>
<?php endwhile; ?>
    </div>
</div>
<?php get_footer(); ?>

Gotowy plik, jak zwykle do pobrania:

0 wyświetleń0 komentarzy

Ostatnie posty

Zobacz wszystkie

Comments


bottom of page