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:
[zip href='http://iworks.pl/wp-content/uploads/2012/08/page-archiwum.php-.zip']page-archiwum.php-.zip[/zip]
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)
Marcin Pietrzak
@Jerry: wszystko można :D a czy to będzie lepiej czy gorzej, to kwestia gustu.
Helikopterek
Czy mógłbyś podpowiedzieć w jaki sposób dodać podlinkowane tytuły poszczególnych wpisów w takim archiwum?
Marcin Pietrzak
@Helikopterek: prawdę mówiąc nie do końca rozumiem pytanie. Tytuły wpisów?
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!
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