Szablony stron (page templates) w WordPressie

Atrybuty strony WordPressa

Niedawno wyjaśniłem wam to, jaka jest różnica pomiędzy stronami a wpisami na blogu w WordPressie. Dziś opiszę wam, jak stworzyć szablon nietypowej strony na przykładzie jednej ze stron WPBloger’a.

W WordPressie każdej stronie można przyporządkować jej indywidualny szablon. Robi się to w kokpicie WP w menu Strony w panelu Atrybuty strony. Aby móc z tej opcji skorzystać trzeba najpierw takie szablony stron przygotować. Jak to zrobić?

Domyślne nazwy plików w szablonie WordPressa

Na początek warto zapamiętać, że WordPress posiada kilkanaście domyślnych nazw plików w szablonie, które odpowiadają za wyświetlanie określonych informacji. Zaleca się, aby nie używać nazw tych plików dla stworzenia własnych szablonów stron. Te zastrzeżone nazwy plików to:

  • index.php – plik odpowiadający za wyświetlanie strony głównej bloga
  • comments.php – szablon komentarzy
  • front-page.php – szablon strony głównej, wykorzystywany tylko wtedy, gdy jako stronę główną serwisu ustawisz którąś z jego stron nie zawierającą wpisów na blogu
  • home.php – jeśli ustawisz jako stronę główną serwisu którąś ze stron nie zawierających wpisów na blogu to ten plik staje się szablonem strony wyświetlającej wpisy na blogu
  • single.php – plik odpowiadający za wyświetlenie pojedynczego wpisu z bloga
  • single-<post-type>.php
  • page.php – podstawowy plik odpowiadający za wyświetlenie strony zawierającej informacje inne niż wpis z bloga (np. informacje o autorze)
  • category.php – plik odpowiadający za wyświetlenie strony z wpisami na blogu przyporządkowanymi określonej kategorii
  • tag.php – plik odpowiadający za wyświetlenie strony z wpisami na blogu przyporządkowanymi do określonego tagu
  • taxonomy.php
  • author.php - plik odpowiadający za wyświetlenie strony z wpisami na blogu przyporządkowanymi do określonego autora
  • date.php - plik odpowiadający za wyświetlenie strony z wpisami na blogu przyporządkowanymi określonemu czasowi (rok, miesiąc, dzień, godzina, minuta, sekunda)
  • archive.php - plik odpowiadający za wyświetlenie archiwalnych wpisów na blogu
  • search.php - plik odpowiadający za wyświetlenie strony z wynikami wyszukiwania wpisów na blogu
  • attachment.php - plik odpowiadający za wyświetlenie załącznika
  • image.php - plik odpowiadający za wyświetlenie pojedynczego obrazka
  • 404.php – szablon strony błędu 404 używany, gdy WordPress nie znajdzie w bazie danych wpisu lub strony odpowiadających zapytaniu przez użytkownika

Tworzymy własny szablon strony

Na blogu WPBloger stroną, która ma własny szablon jest Redakcja, gdzie wyświetlana jest lista autorów wpisów na blogu i dalsza część poradnika będzie się opierała na tym przykładzie.

Aby stworzyć własny szablon strony w ramach danego szablonu WordPressa należy utworzyć nowy plik. Jego nazwa jest właściwie dowolna (należy tylko wykluczyć z niej domyślne nazwy plików, których listę wymieniłem wyżej). Plik z szablonem strony musi być zapisany z rozszerzeniem .php. Ja nazwałem więc plik contributors.php.

Treść pliku z szablonem strony musi zaczynać się obowiązkowo od takiego kodu:

<?php /* Template Name: Nazwa szablonu strony */ ?>

Oczywiście, jako Template name wpisujemy właściwą nazwę szablonu strony. Nazwa ta wyświetli się nam na liście opcji do wyboru w sekcji Atrybuty strony w panelu admina WP w menu Strony przy tworzeniu nowej bądź edycji już istniejącej strony. Ja wybrałem dla swojego szablonu nazwę Autorzy bloga, dlatego początkowy kod w pliku wygląda tak:

<?php /* Template Name: Autorzy bloga */ ?>

Reszta kodu, która znajdzie się poniżej tych paru obowiązkowych linijek jest praktycznie dowolna i odpowiadać będzie za to, co wyświetli się na danej stronie opartej o jej szablon. W tym miejscu warto pamiętać o wstawieniu w szablon strony trzech funkcji:

<?php get_header(); ?>

odpowiadającej za wczytanie pliku zawierającego nagłówek bloga,

<?php get_sidebar(); ?>

odpowiadającej za wczytanie pliku zawierającego boczną kolumnę bloga (tzw. sidebar) oraz

<?php get_footer(); ?>

odpowiadającej za wczytanie pliku zawierającego stopkę bloga, przy czym kolejność występowania tych funkcji nie jest przypadkowa. Tak więc w następnym kroku mój plik wyglądał tak:

<?php /* Template Name: Autorzy bloga */ ?>
<?php get_header(); ?>
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Dopiero teraz można uzupełnić plik kodem odpowiadającym za wyświetlenie listy autorów bloga. Kod ten wstawiamy między funkcje get_header i get_sidebar w ten sposób, aby funkcja get_footer znalazła się na samym końcu szablonu strony. Biorąc to pod uwagę, pełny kod szablonu strony Redakcja na tym blogu wygląda następująco:

<?php /* Template Name: Autorzy bloga */ ?>
<?php get_header(); ?>
<div id="primary">
<div id="content" role="main">
<?php the_post(); ?>
<div id="authorlist"><ul><?php contributors(); ?></ul></div>
</div><!-- #content -->
</div><!-- #primary -->
<?php get_sidebar(); ?>
<?php get_footer(); ?>

Tak przygotowany plik wgrywamy na serwer do katalogu, w którym znajduje się szablon WordPressa, którego aktualnie używamy. Warto po tej operacji wczytać ponownie szablon bloga w panelu admina, aby go odświeżyć. Wtedy będziemy mieć pewność, że system odczyta wszystkie pliki wchodzące w skład szablonu.

Dodatkowo, aby wszystkie dane związane z autorami wpisów na blogu wyświetlały się prawidłowo należy w pliku functions.php wkleić taki kod:

function my_new_contactmethods( $contactmethods ) {
// Add Twitter
$contactmethods['twitter'] = 'Twitter';
//add Facebook
$contactmethods['facebook'] = 'Facebook';
return $contactmethods;
}
add_filter('user_contactmethods','my_new_contactmethods',10,1);

function contributors() {
global $wpdb;

$authors = $wpdb->get_results("SELECT ID, user_nicename from $wpdb->users WHERE display_name <> 'admin' ORDER BY display_name");

foreach ($authors as $author ) {

echo "<li>";
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">";
echo userphoto($author->ID);
echo "</a>";
echo '<div>';
echo "<a href=\"".get_bloginfo('url')."/author/";
the_author_meta('user_nicename', $author->ID);
echo "/\">";
the_author_meta('display_name', $author->ID);
echo "</a>";
echo "<br />";
echo "Strona: <a href=\"";
the_author_meta('user_url', $author->ID);
echo "/\" target='_blank'>";
the_author_meta('user_url', $author->ID);
echo "</a>";
echo "<br />";
echo "Facebook: <a href=\"";
the_author_meta('facebook', $author->ID);
echo "\" target='_blank'>";
the_author_meta('facebook', $author->ID);
echo "</a>";
echo "<br />";
echo "Twitter: <a href=\"";
the_author_meta('twitter', $author->ID);
echo "\" target='_blank'>";
the_author_meta('twitter', $author->ID);
echo "</a>";
echo "<br />";
echo "E-mail: <a href=\"mailto:";
the_author_meta('user_email', $author->ID);
echo "\" target='_blank'>";
the_author_meta('user_email', $author->ID);
echo "</a>";
echo "<br />";
the_author_meta('description', $author->ID);
echo "</div>";
echo "</li>";
}
}

Więcej szczegółów na temat szablonów stron wraz z przykładami znajdziesz w oficjalnej dokumentacji WordPressa.

2 komentarze do wpisu „Szablony stron (page templates) w WordPressie

  1. Wszystko fajnie, tylko jak zrobić by WordPress zaciągnął pliki header, sidebar, footer innego szablonu niż aktualnie używany na stronie.
    „1
    2
    3
    4 ”
    Ten zapis nie sprawi, że mogę utworzyć sobie jakiś haloski theme czy zmodyfikowany aktualny na wybranej podstronie tylko uczyni subtelne różnice znane i widoczne tylko właścicielowi strony. Sorry, ale na przytoczonej stronie /współautorzy/ nie ma nic co by ją istotnie wyróżniło z pozostałych, strona jak każda na blogu. Dodatkowa robota z szablonami, która nie wiele wnosi…

Dodaj komentarz

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

*

Możesz użyć następujących tagów oraz atrybutów HTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>