Powracając na moment do tematu plików motywu w WordPressie, chciałbym teraz wspomnieć o możliwościach jakie dają szablony stron (ang. page templates), co można z nimi zrobić, do czego służą i jak wykorzystać. Twórcy WordPressa dokładnie przewidzieli, że dla niektórych wyświetlenie listy wpisów, i samych wpisów może być niewystarczające. Już jakiś czas temu WordPress wyewoluował w bardzo funkcjonalny CMS, którego poza blogami można również łatwo przekształcić w profesjonalną stronę dla biznesu, organizacji, radia itd. (wystarczy trochę kreatywności, wiedzy i czasu, albo pieniędzy).

Dla zobrazowania, o co dokładnie mi chodzi załóżmy, że prowadzimy stronę firmową i potrzebujemy, aby strona „Kontakt” miała inny układ w stosunku do reszty strony – nie potrzebujemy na niej sidebara, nie chcemy żadnych dodatkowych nagłówków, nie chcemy komentarzy itd. Inny przykład – tabela z cenami, albo galeria – tym razem chcemy aby użytkownik widział tylko główny panel ze zdjęciami. Być może zmienić tło, albo całkowicie układ.

Albo inny przykład. Jakiś czas temu już się w to bawiłem i utworzyłem sobie dynamiczną stronę archiwum. Mówiąc najogólniej w uporządkowanej tabelce zrobiłem indeks opublikowanych na łamach tego bloga wpisów, z możliwością podejrzenia wypisu i zorientowania się, o czym mniej więcej wtedy pisałem.

Zawsze, gdy potrzebujemy coś dodać, zmienić albo coś usunąć z motywu, a nie ma takiej możliwości w edytorze wpisów, musimy skorzystać z szablonów strony.

W moim odczuciu pojęcie może być przez niektórych mylnie zrozumiane – należy go szukać w kodeksie WP pod hasłem „page template”. W naszym pięknym języku zwrot ten oznacza „szablon strony” i nie było by w tym nic dziwnego, gdyby nie to, że gdy słyszymy szablon strony, to zazwyczaj mamy na myśli całą stronę. Niezależnie od tego ile różnych układów treści ma zaimplementowanych, a tutaj, w WordPressowskich kręgach,  mamy na myśli tylko jeden konkretny układ strony.

Do czego można wykorzystać taki szablon strony? Pierwszy przykład, który przychodzi mi na myśl to ustawienie go jako strony głównej – możemy ustawić inną stronę startową dla bloga, a także dla każdej strony utworzyć zupełnie inaczej wyglądające podstrony.

Zagadnienie jest całkiem proste i chyba właściwie wszystko, co będzie potrzebne opisywałem już we wcześniejszych wpisach.

Jeszcze trochę teorii

Warto wiedzieć, że strona to nie wpis. Strony nie są wyświetlane, ani brane pod uwagę w pętli wpisów WordPressa. Do stron nie można przypisywać tagów, ani grupować w kategorie, strony nie są również plikami – są zapisywane tak jak posty w bazie danych.

WordPress – tworzymy inną stronę startową

Przykład praktyczny. Zacznijmy od utworzenia w katalogu głównym motywu nowego pliku. Nazwa – małymi literami i dobrze, aby mniej więcej podpowiadała do czego szablon ma służyć – na przykład intro.php i nazwa szablonu Intro, otwieramy plik i na samym początku dodajemy następujący komentarz:

<?php
/*
Template Name: Intro
*/
?>

Powyższy kod jest niezbędny, ponieważ rejestruje plik intro.php jako szablon strony w WordPress.

Zapisujemy zmiany. To tyle – w tym momencie utworzyliśmy nowy szablon strony. Od teraz przy dodawaniu nowej strony (szablon starych stron też można zmienić) z menu po prawej stronie możemy wybrać nowo-utworzony szablon dla właśnie pisanej strony.

page-template

Jeżeli teraz stronę zapiszemy, albo podejrzymy na podglądzie, to niestety ukaże nam się tylko białe tło. Więc teraz wszystko zależy od nas – pod komentarzem trzeba dopisać kod, który wyświetli coś na naszej stronie intro.

Możemy zacząć od zera, czyli od czystego szkieletu struktury dokumentu HTML, albo wykorzystać dotychczas używane pliki motywu  (header, footer, sidebar itd.). W moim przypadku header.php i footer.php będą idealnie pasować. Zatem tylko je sobie tutaj wczytam:

<?php
/*
Template Name: Intro
*/
?>

<?php get_header(); ?>

<!-- właściwa treść strony -->

<?php get_footer(); ?>
Warto tutaj przypomnieć, że istnieje możliwość utworzenia innej stopki czy nagłówka, można je później zapisać w innym pliku i dla porządku w kodzie, tylko tutaj wczytywać. Pisałem o tym więcej przy okazji plików motywu.

Założenia projektu

Moja strona intro ma się pojawiać po przejściu pod adres główny witryny, czyli wpadmin.pl. Ma wyświetlać logo, nazwę domeny i stopkę. Po kliknięciu w link ma przenosić do listy ostatnich wpisów. Niby nic prostszego, a jednak trzeba wiedzieć kilka rzeczy.

page-template2

WordPress inna strona główna

WordPress pokazuje ostatnio dodane wpisy jako stronę domową (pierwszą, po przejściu pod główny adres domeny). Jeżeli zmienisz to ustawienie na inną stronę, to automatycznie z każdego wpisu po kliknięciu na logo przenosi zawsze na tę ustawioną tutaj stronę (zwykle kliknięcie w logo powinno przenosić do listy ostatnich wpisów).

W każdym razie, aby to naprawić trzeba będzie utworzyć jedną pustą stronę (w kodeksie piszą o dwóch, ale my jedną utworzyliśmy przed minutą) z domyślnym motywem, zatytułować ją na przykład Blog i opublikować. Tak jak na poprzednim screenie, ustawiamy stronę główną na Intro, a stronę z wpisami na naszą pustą stronę „blog”. Jeżeli wszystko zrobiliśmy dobrze, to od teraz pod adresem http://wpadmin.pl pojawiać się będzie nasza strona intro, natomiast pod adresem wpadmin.pl/blog/ lista ostatnio opublikowanych na blogu wpisów.

Żeby wszystko działało zgodnie z moimi założeniami, należy lekko zmodyfikować plik header.php, właściwie link loga, tak aby po kliknięciu zawsze przenosił do listy ostatnio opublikowanych wpisów.

<a href="<?php bloginfo( 'url' ); ?>" id="logo" title="Strona Główna wpadmin.pl">wpadmin.pl<span><?php bloginfo( 'description' ); ?></span></a>

podmieniam na:

 <a href="<?php bloginfo( 'url' ); ?>/blog/" id="logo" title="Strona Główna wpadmin.pl">wpadmin.pl<span><?php bloginfo( 'description' ); ?></span></a>

zmiany zapisuję, to wszystko!

Strona intro jest już gotowa do działania.

Aktualizacja 2017-07-10

Wpis został zaktualizowany.

Wpis otagowano:

Pomogłem? Dodaj coś od siebie! Skomentuj ten wpis:

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *