WordPress: jak zrobić stronę archiwum?

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:

pobierz plik: page-archiwum.php-.zip


Opublikowano

w

,

przez

Komentarze

6 odpowiedzi na „WordPress: jak zrobić stronę archiwum?”

  1. Awatar Jerry
    Jerry

    A słuchaj, nie lepiej zrobić takie archiwum by pod miesiącami była lista tytułów publikacji w postaci linków.
    Teraz trzeba klikać w miesiące by zobaczyć ich tytuły.
    Wiem, że może to być zbyt obszerne, ale ja chciałbym mieć taki uporządkowany spis treści jak w książce. (J)

  2. Awatar Marcin Pietrzak

    @Jerry: wszystko można :D a czy to będzie lepiej czy gorzej, to kwestia gustu.

  3. Awatar Helikopterek
    Helikopterek

    Czy mógłbyś podpowiedzieć w jaki sposób dodać podlinkowane tytuły poszczególnych wpisów w takim archiwum?

  4. Awatar Marcin Pietrzak

    @Helikopterek: prawdę mówiąc nie do końca rozumiem pytanie. Tytuły wpisów?

  5. Awatar Radek
    Radek

    Witam,

    Mam mały problem. Twoje rozwiązanie nie działa w przypadku mojego themu MAGAZEEN Theme, jaki zastosowałem na stronie. Theme pochodzi z 2009 r., więc pewnie motyw, dla którego je kroiłeś, nie istniał wtedy i dlatego nie zadziałało. Pomógłbyś mi dostosować swoje rozwiązanie do mojego motywu? Chciałbym, aby, tak jak u Ciebie, występowała strona Archiwum /archiwum w tej postaci co u Ciebie, ale w moim motywie MAGAZEEN. Chciałbym do niej podlinkować na końcu strony index.php, odsyłając czytelnika do wcześniejszych postów, właśnie jw. do strony archiwum. Wyznam, że php nie znam.

    Pozdrawiam!

  6. Awatar Radek
    Radek

    PS. O poradę poprosiłem także tutaj:

    http://pl.forums.wordpress.org/topic/magazeen-theme-strona-archiwum-nazwablogaarchiwum-jak-to-zrobic

    gdzie wyjaśniłem, jakie kroki wykonałem. Zauważyłem, po zdjęciu z avatara, że jesteś moderatorem forum supportu na pl.rodpress.org Z góry dziekuję i pozdrawiam!

    Radek

Jeżeli chcesz skomentować, napisz mail na adres marcin w domenie strony na której jesteś. Dodam twoj komentarz.