Jest to druga edycja darmowego kursu WordPress traktująca o tworzeniu motywów do tego właśnie CMSa dla początkujących. Po przeczytaniu tego artykułu powinieneś być w stanie zakodować gotowy szablon statycznej strony w HTML i CSS do w pełni funkcjonalnej skórki WordPress.
W poprzednim wpisie, a było to już jakiś czas temu, wrzuciłem paczkę z przykładowym szablonem w HTML mojego autorstwa, który teraz zostanie poddany opisanym tutaj „przeróbkom”, aby stać się pełnoprawnym motywem. 🙂
W tym kursie poruszone zostaną następujące zagadnienia:
- Krok 1 – Uaktywnienie szablonu w panelu administracyjnym
- Nazwa motywu i dane informacyjne
- Podstawowe klasy dla edytora WordPress
- Miniatura / Podgląd motywu
- Aktywacja motywu
- Krok 2 – Podpięcie pliku
style.css
do motywu - Krok 3 – Funkcje
wp_head
, orazwp_footer
- wp_head
- wp_footer
- Krok 4 – The Loop – Pętla WP
- Krok 5 – podział szablonu na pliki motywu WordPress
- Jak najlepiej dzielić?
Większość z tych rzeczy zostało dokładniej omówionych w poprzednich wpisach, jeżeli czegoś tutaj nie zrozumiałeś, potrzebujesz obszerniejszych wyjaśnień lub innego przykładu, to zapraszam Cię do lektury również wcześniejszych wpisów, oraz sekcji komentarzy, gdzie zwykle staram się dodatkowo pomagać! 🙂 Zaczynajmy…
Krok 1 – Uaktywnienie szablonu w panelu administracyjnym
Zanim szablon będzie widoczny w panelu administracyjnym i będziemy mogli śledzić bieżące postępy, musimy wykonać kilka prostych czynności, w których utworzymy główne (najważniejsze) pliki motywu, określimy nazwę naszego szablonu, jego autora, wersję, dodamy screenshot itp.
Zacznijmy od przejścia do katalogu motywów WordPress (wp-content/themes) i utworzenia w nim nowego folderu, w którym będziemy zapisywać wszystkie pliki naszego nowego motywu.
Nazwa mojego katalogu i motywu, to newdivide2
.
Teraz przenieśmy tam to, co przygotowałem w poprzednim wpisie, czyli zawartość archiwum – pliki index.html
, style.css
i katalog z grafiką img
.
Zmieniamy rozszerzenie pliku index.html
na index.php
.
Nazwa motywu i dane informacyjne
Otwieramy do edycji plik style.css
i na samym początku, w komentarzu, dodajemy dane informacyjne dotyczące naszego motywu, tak jak jest to zaprezentowane poniżej:
/* Theme Name: New Divide II Theme URI: https://wpadmin.pl Author: ziemekpr0@gmail.com Author URI: https://wpadmin.pl Description: This is basic theme for my new website: https://wpadmin.pl Version: 0.1 License: GNU General Public License v2 or later License URI: http://www.gnu.org/licenses/gpl-2.0.html Tags: light, white, two-columns Text Domain: newdivide */
Aby nasz szablon został wykryty w panelu WordPress, niezbędna jest tylko pierwsza linijka, czyli ta z nazwą motywu, ale zawsze warto podać bardziej szczegółowe informacje.
/* Theme Name: Mój szablon WP */
Podstawowe klasy CSS WordPressa
Niezbędne jest również dodanie zestawu podstawowych klas, z których korzysta edytor wpisów WordPress (dzięki temu tekst sformatowany w edytorze wpisów będzie wyglądał podobnie po stronie użytkowników). Poniżej wspomniany zestaw – wystarczy wszystko skopiować i wkleić do pliku style.css
:
/* =WordPress Core -------------------------------------------------------------- */ .alignnone { margin: 5px 20px 20px 0; } .aligncenter, div.aligncenter { display: block; margin: 5px auto 5px auto; } .alignright { float:right; margin: 5px 0 20px 20px; } .alignleft { float: left; margin: 5px 20px 20px 0; } a img.alignright { float: right; margin: 5px 0 20px 20px; } a img.alignnone { margin: 5px 20px 20px 0; } a img.alignleft { float: left; margin: 5px 20px 20px 0; } a img.aligncenter { display: block; margin-left: auto; margin-right: auto; } .wp-caption { background: #fff; border: 1px solid #f0f0f0; max-width: 96%; /* Image does not overflow the content area */ padding: 5px 3px 10px; text-align: center; } .wp-caption.alignnone { margin: 5px 20px 20px 0; } .wp-caption.alignleft { margin: 5px 20px 20px 0; } .wp-caption.alignright { margin: 5px 0 20px 20px; } .wp-caption img { border: 0 none; height: auto; margin: 0; max-width: 98.5%; padding: 0; width: auto; } .wp-caption p.wp-caption-text { font-size: 11px; line-height: 17px; margin: 0; padding: 0 4px 5px; } /* Text meant only for screen readers. */ .screen-reader-text { clip: rect(1px, 1px, 1px, 1px); position: absolute !important; white-space: nowrap; height: 1px; width: 1px; overflow: hidden; } .screen-reader-text:focus { background-color: #f1f1f1; border-radius: 3px; box-shadow: 0 0 2px 2px rgba(0, 0, 0, 0.6); clip: auto !important; color: #21759b; display: block; font-size: 14px; font-size: 0.875rem; font-weight: bold; height: auto; left: 5px; line-height: normal; padding: 15px 23px 14px; text-decoration: none; top: 5px; width: auto; z-index: 100000; /* Above WP toolbar. */ }
Miniaturka (podgląd) szablonu
Dodanie do motywu podglądu w postaci obrazka nie jest obowiązkowe ale daje bardzo fajny efekt przy wyborze motywów w panelu administracyjnym WordPress i zajmuje tylko chwilę.
Wystarczy stworzyć plik graficzny w rozmiarze 1200px x 900px a następnie zapisać go w katalogu głównym szablonu pod nazwą – screenshot.png
.
Aktywacja motywu
Na zakończenie tego kroku przechodzimy do panelu administracyjnego (Wygląd→ Motywy) i aktywujemy motyw.
Krok 2 – Podpinamy style.css do motywu
Na tym etapie, gdy odwiedzimy stronę główną zauważymy, że przykładowa treść, która znajdowała się wcześniej w pliku szablonu (index.html
), już się wyświetla ale nie działa arkusz stylów CSS. Jak to naprawić?
Podpięcie CSS do motywu WordPress
Aby podpiąć plik style.css
do motywu w WordPress otwieramy plik index.php
i szukamy w kodzie linijki w której dołączamy plik CSS:
<link rel="stylesheet" href="style.css" type="text/css" media="screen"/>
i zastępujemy ją tą linijką:
<link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>" type="text/css" media="screen" />
Generalnie chodzi o użycie funkcji specjalnej funkcji WordPress get_stylesheet_uri()
w atrybucie href
elementu link
. Funkcja zwraca adres URL do pliku z podstawowym plikiem CSS aktywnego motywu (style.css
).
Podpinanie dodatkowych skryptów do motywu WordPress
Czasami zachodzi potrzeba, wykorzystania więcej niż jednego pliku CSS, dodatkowych skryptów JavaScript, favicony, czy na przykład statycznych obrazków. W takim wypadku ścieżki należy podawać np. w ten sposób:
<link rel="icon" href="<?php bloginfo('template_url'); ?>/img/favicon.ico" />
W tym przypadku definiujemy favicon do strony. W atrybucie href
funkcja bloginfo(’template_url’);
zwraca nam pełny adres URL do katalogu aktywnego motywu, a następnie podajemy dalszą część ścieżki do pliku z grafiką. W efekcie końcowym dostajemy pełną ścieżkę, dla tego przykładu taką:
https://wpadmin.pl/wp-content/themes/newdivide3/img/favicon.ico
Zapisujemy wszystkie zmiany, odświeżamy stronę główną bloga i w tym momencie wszystko powinno wyglądać tak jak w przykładowym szablonie HTML.
<head>
dla motywów napisanych w HTML5 powinna wyglądać jak na listingu poniżej. Możemy skorzystać z niego jak z gotowca.<!DOCTYPE html> <html <?php language_attributes(); ?>> <head> <meta charset="<?php bloginfo( 'charset' ); ?>" /> <title><?php wp_title(); ?></title> <link rel="profile" href="http://gmpg.org/xfn/11" /> <link rel="stylesheet" href="<?php echo get_stylesheet_uri(); ?>" type="text/css" media="screen" /> <link rel="pingback" href="<?php bloginfo( 'pingback_url' ); ?>" /> <?php if ( is_singular() && get_option( 'thread_comments' ) ) wp_enqueue_script( 'comment-reply' ); ?> <?php wp_head(); ?> </head> [...] Reszta kodu HTML
Krok 3 – Funkcje wp_head, wp_footer
Teraz dodajmy dwie niezbędne funkcje WordPressa. Tak powinno wyglądać ich umieszczenie:
wp_head()
<!-- reszta kodu sekcji <head> --> <?php wp_head(); ?> </head>
wp_footer()
<!--reszta kodu strony --> <?php wp_footer(); ?> </body> </html>
Po szczegółowe informacje dotyczące umieszczania i samych funkcji odsyłam do kodeksu WP, oraz do mojego wcześniejszego wpisu. Tutaj wspomnę tylko, że:
- wp_head() – funkcja powinna zostać umieszczona tuż przed tagiem
</head>
- wp_footer() – umieszczamy na końcu sekcji
<body>
, tuż przed znacznikiem</body>
:
W efekcie, jeżeli wszystko zrobiliśmy poprawnie i jesteśmy zalogowani, to na górze strony pokaże się czarny toolbar WordPressa.
Krok 4 – The Loop – Pętla WP
Jak najprościej się za to zabrać? Otwieramy do edycji index.php
i szukamy fragmentu w którym umieszczone są wpisy – w moim motywie jest to blok div z id #content
, a dodatkowo każdy wpis to oddzielny blok z klasą .entry
.
Z bloku #content
usuwamy wszystko, co jest nam nie potrzebne – w tym momencie potrzebujemy tylko jednego bloku z klasą .entry
aby pozmieniać statyczne elementy na dynamicznie generowane przez WordPress. Blok z klasą .entry
wstawiamy do ciała pętli, w taki sposób:
<div id="content"> <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?> <div class="entry"> <h1>Na karcie Wstawianie znajdują się galerie zawierające elementy</h1> <div class="fancy-divider"><div></div></div> <div class="entry-date">Opublikowano <span>15 stycznia 2013</span></div> <p>Na karcie Wstawianie znajdują się galerie...</p> <a href="#" class="read-more">Czytaj dalej →</a> <hr /> <div class="entry-footer"> <div class="entry-author"><span class="icon"></span>Dodał <span>ziemekpr0</span></div> <div class="entry-cat"><span class="icon"></span>Kategorie: WPAdmin.pl, Własny motyw wp</div> <div class="entry-comments"><span class="icon"></span>Komentarzy: 23</div> </div> </div><!-- /.entry --> <?php endwhile; else: ?> <p><?php _e('Nie znaleziono postów spełniających podane kryteria.'); ?></p> <?php endif; ?> </div><!-- /#content -->
Aby nadać wpisom dynamicznego charakteru, elementy statyczne należy podmienić na funkcje WP generujące ich odpowiedniki.
Podmieniamy następujące linijki:
<h1>Na karcie Wstawianie znajdują się galerie zawierające elementy</h1>
na
<h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
<p>Na karcie Wstawianie znajdują się galerie[…]</p> <a href="#" class="read-more">Czytaj dalej →</a>
na
<?php the_content('Czytaj dalej →'); ?>
Dodatkowo, w style.css
zmieniam nazwę klasy z .read-more
na .more-link
, bo tak nazywa się klasa linku generowanego przez WordPress w funkcji the_content()
.
<div class="entry-date">Opublikowano <span>15 stycznia 2013</span></div>
na
<div class="entry-date">Opublikowano <span><?php the_time('d-m-Y'); ?></span></div>
<div class="entry-author"><span class="icon"></span>Dodał <span>ziemekpr0</span></div>
na
<div class="entry-author"><span class="icon"></span>Dodał <span><?php the_author(); ?></span></div>
<div class="entry-cat"><span class="icon"></span>Kategorie: WPAdmin.pl, Własny motyw wp</div>
na
<div class="entry-cat"><span class="icon"></span>Kategorie: <?php the_category(', '); ?></div>
<div class="entry-comments"><span class="icon"></span>Komentarzy: 23</div>
na
<div class="entry-comments"><span class="icon"></span><?php comments_popup_link('Brak komentarzy', '1 Komentarz', 'Komentarzy: %'); ?></div>
Krok 5 – podział szablonu na pliki motywu WordPress
Jak zapewne zauważyłeś, do tej pory cały czas działaliśmy tylko w dwóch plikach. Przydało by się trochę uporządkować nasz motyw i podzielić go na odpowiednie pliki składowe. Przyda nam się to później, gdy będziemy chcieli utworzyć inne układy dla stron statycznych, albo chociażby strony z innym layoutem dla pojedynczego wpisu. Dokładniej o co chodzi opisałem tutaj. Dobrze jest przemyśleć i przewidzieć jakie układy stron planujemy i w jaki sposób będziemy je budować, aby nie powielać tego samego kodu w wielu plikach. Na razie nie ma co się martwić, po utworzeniu kilku własnych motywów nabierzesz wprawy i odpowiednich nawyków. Najważniejsze, że zawsze można później pliki edytować, dlatego nie należy bać się eksperymentować! 🙂
Jak najlepiej dzielić?
Zacznijmy od utworzenia 3 nowych plików: header.php
, sidebar.php
, footer.php
i umieszczenia w nich:
header.php
– wszystko od początku do tagu rozpoczynającego sekcję<body>
włącznie, oraz w tym przypadku, ponieważ nie planuję innych menu pomiędzy różnymi układami stron, również moje dwa poziome menusidebar.php
– prawa kolumna z widetami (na razie statycznymi), czyli cały blok o id#sidebar
footer.php
– wszystko, zaczynając od bloku z id#footer
aż do końca.
Miej na uwadze, że są to luźne wskazówki. Nic się nie stanie jak poprzesuwasz kod według własnych preferencji.
Powstałe puste miejsca w pliku index.php, z których zabraliśmy kod, zastępujemy odpowiadającymi im funkcjami, które odpowiadają za wczytanie odpowiedniego pliku:
- get_header();
<?php get_header(); ?>
- get_sidebar();
<?php get_sidebar(); ?>
- get_footer();
<?php get_footer(); ?>
Jeżeli wszystko dobrze zrobiliśmy, to po operacji podziału index.php
na dodatkowe pliki i odświeżeniu strony nie powinniśmy zauważyć żadnej różnicy.