Tworzenie szablonów dla WordPressa – podstawy część 2
W poprzednim wpisie na temat tworzenie szablonów dowiedziałeś się jak utworzyć dwa podstawowe pliki templatki jakimi są index.php oraz style.css. Dziś napiszę w jaki sposób podzielić plik index.php na kilka logicznych fragmentów, tak aby łatwiej modyfikowało się szablon i dodawało poszczególne funkcjonalności.
Szablon każdej strony składa się z kilku podstawowych elementów takich jak nagłówek, „ciało dokumentu”, pasek boczny, stopka itp. Oczywiście każda strona jest inna i ten schemat nie zawsze się sprawdza. Mimo to w Wordpresie ten podział został ujęty w podobny sposób i każdy element strony zawiera się w osobnym pliku. I tak mamy pliki:
1) header.php – nagłówek
2) sidebar.php – pasek boczny
3) footer.php – stopka
Plik index.php zawiera natomiast z reguły cała resztę czyli ciało dokumentu i kod odpowiedzialny za wyświetlanie postów, archiwum, stron statycznych itp. Plik ten pobiera także wszystkie inne elementy strony za pomocą kilku linii php. Za chwilę opiszę jak się to robi. Wróćmy zatem do naszego poprzedniego przykładu i podzielmy nasz przykładowy szablon strony na poszczególne pliki. To jak dokładnie będzie wyglądał ten podział zależy w dużej mierze od Ciebie i Twoich potrzeb – mimo to można przyjąć ogólną regułę, że podział przebiega w granicach wyznaczonych przez poszczególne elementy blokowe szablonu czyli element header (który jest naszym nagłówkiem) przenosimy do pliku header.php itp.
Przykładowy kod do, którego dodałem poszczególne sekcje wygląda tak:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Przykładowy szablon</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="<?php bloginfo(’stylesheet_url’); ?>" type="text/css" />
</head>
<body>
<div id="header">Nasz nagłówek</div>
<div id="content">Nasz główny content</div>
<div id="sidebar">Pasek boczny</div>
<div id="footer">Stopka</div>
</body>
</html>
Oczywiście możesz dowolnie ostylować taką stronę. Chodzi tutaj o pokazanie samej struktury szablonu. Moglibyśmy poniższy kod zapisać po prostu do pliku index.php i będzie on działał jako szablon. Mimo to, dla późniejszej wygody i po prostu porządku podzielimy cały kod na fragmenty.
Tak będzie wyglądał nasz plik header.php:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Przykładowy szablon</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="<?php bloginfo(’stylesheet_url’); ?>" type="text/css" />
</head>
<body>
<div id="header">Nasz nagłówek</div>
Jak widzisz wkleiłem tu całość od początku dokumentu do końca nagłówka, w którym później możemy umieścić logo serwisu itp. Plik sidebar.php będzie wyglądał tak:
<div id="sidebar">Pasek boczny</div>
natomiast plik footer.php jak łatwo się domyślić będzie zawierał w sobie dalszą część strony do końca dokumentu:
<div id="footer">Stopka</div>
</body>
</html>
Mamy już stronę podzieloną na sekcję, które teraz znajdują się w osobnych plikach. Możesz je wgrać na serwer. Ostatnia czynność jaką musimy wykonać, aby wszystko działało to w pliku index.php podmienić usunięty kod na pojedyncze linie php, które pobiorą te fragmenty z osobnych plików, które właśnie utworzyliśmy.
Kod index.php będzie wyglądał zatem tak:
<?php get_header(); ?>
<div id="content">Nasz główny content</div>
<?php get_sidebar(); ?>
<?php get_footer(); ?>
I to wszystko. Jak widzisz łatwo zapamiętać poszczególne kody php służące do pobierania pozostałych plików szablonu. W dalszej kolejności będziemy edytować jeszcze plik index.php, tak aby wyświetlał poszczególne wpisy. Odbywa się to przy wykorzystaniu tzw. wordpress loop (pętli wordpress). W kolejnych wpisach opiszę dokładnie jak zbudowana jest taka pętla i jakie dokładnie spełnia funkcje. Pozostałe fragmenty oczywiście także wyposażymy w dodatkowe funkcjonalności np. pasek boczny będzie mógł wyświetlać widgety czyli specjalne moduły spełniające wyspecjalizowane funkcję takie jak galeria, lista komentarzy itp.
Ostatnia rzecz jaką dziś jeszcze zrobimy to dodanie do plików nagłówka i stopki specjalnych kodów, które pobiorą dane wysyłane przez WP, które muszą się znaleźć w tych miejscach. W taki sposób działają różne pluginy, które muszą dodać swój kod do naszego szablonu. Zatem plik header.php w ostatecznej wersji będzie wyglądał tak:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Przykładowy szablon</title>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<link rel="stylesheet" href="<?php bloginfo(’stylesheet_url’); ?>" type="text/css" />
<?php wp_head(); ?>
</head>
<body>
<div id="header">Nasz nagłówek</div>
Dodałem linijkę <?php wp_head(); ?> W tym miejscu wordpress będzie wstawiał swój kod. Na razie nie musimy dokładnie wiedzieć w czym rzecz – ważne, że bez tego niektóre pluginy nie będą działały oraz to, że kod ten musi znajdować się w sekcji head naszej strony.
Analogicznie plik footer.php będzie miał taką postać:
<div id="footer">Stopka</div>
<?php wp_footer(); ?>
</body>
</html>
Dodatkowa linia powinna znajdować się przed tagiem body i ma podobne znaczenie co ta w pliku header.php. Po wgraniu na serwer szablon powinien działać tak samo jakby znajdował się w jednym pliku. Mimo to, że nie widać różnicy w działaniu to poczyniliśmy duży krok naprzód w projekcie naszej templatki wordpress. Komentarze jak zwykle mile widziane.




No widzę, że w końcu ktoś zrobił kawał dobrej roboty, jeśli chodzi o budowę skórek do wordpressa. Właśnie takiego materiału szukałem, ale na naszych rodzimych stronach nie znalazłem.
Moje Gratulacje.
Na pewno będę śledził tego bloga.
Pozdrawiam
No w końcu coś sensownego o WordPress.
A już myślałem że to kompletny gniot (WordPress oczywiście)
Witam, dobrze zapowiadająca się strona. Mam nadzieję, że będzie się szybko rozwijać o kolejne ciekawe tematy. Tyle w ramach wprowadzenia
Teraz z konkretnymi pytaniami.
Przerabiał właśnie skórkę bloga. Dążę do zmiany pliku header.php aby na górze bloga zamiast standardowego loga.jpg wstawić flashowe logo. Praktycznie udało mi się tego dokonać jednak flashowe logo wyświetla się mi wyłącznie na stronie głównej, natomiast na stronach i kategoriach już nie działa. Gdzie leży przyczyna takiego stanu rzeczy?
Dodam, że kod flashu wstawiłem pomiędzy:
Z góry dziękuje za pomoc i sugestie.
Być może plik page.php, który wyświetla strony bloga pobiera inny plik nagłówka niż header.php. Wszystko zależy od budowy szablonu więc ciężko coś powiedzieć nie wiedząc na jakim szablonie jest strona
Szablon jaki edytuje to http://www.blogohblog.com/wordpress-theme-digital-statement/
Z tego co widzę to szablon stron też includuje plik header.php wiec moze to po prostu kwestia odświeżenia strony – spróbuj ctrl+f5 i zobacz czy w miejsce grafiki nie pojawi się flash.
Zabrzmi to dziwnie ale pojawia się flash jednak go nie widać (tzn. nie widać ruchomej animacji loga tylko, że w tym miejscu jest ‘coś’ flashowatego.
Ok to już chyba wiem w czym problem. Zapewne chodzi o link do pliku flash. Musisz go dodać przez odwołanie to url bloga albo szablonu (w zależności gdzie umieściłeś plik flash).
< ?php bloginfo('template_url'); ?> – to generuje url do szablonu
< ?php bloginfo('url'); ?> – a to do glownego katalogu bloga.
Jeśli wpisujesz sama nazwę pliku to po wejściu na podstronę nic się nie pojawi bo link nie wskazuje na żaden plik.
Tak dla jasności bo zazwyczaj działam na próbach i błędach
1. Moje pliki flash mieszczą się w głównym katalogu bloga.
2. Odwołanie muszę umieścić w pliku header.php przed kodem pokazującym flash? Czy mylę całkowicie pojęcia?
3. Zastanawiałem się nad wpisaniem odnośników do flasha na sztywno ale nie wiem czy też to pomoże.
1) jeśli tak to musisz użyć funkcji < ?php bloginfo('url'); ?>
2) Tak. ten kod php powyżej wstawia po prostu url bloga, po ktorym dopisujesz nazwe pliku czyli np: < ?php bloginfo('url'); ?>/flash.swf
3) Możesz wpisać na sztywno adres bezwględny do flasha np.: http://blog.pl/flash.swf, ale ma to swoje wady – jeśli przeniesiesz blog pod inna domenę to będziesz musial to później zmieniać
1. użyłem to w taki sposób?
<param name="movie" value="/swf.swf?xml_path=slides.xml” />
Na stronie głównej nadal działa. Na podstronach widać ładowanie się flasha i nagle pojawia się napis copyright
Dobrze, użyłem tej funkcji?
< param name="movie" value="< ?php bloginfo('url'); ?>/slides.xml” />
Niestety ale nie działa ta opcja na podstronach. Pokazuje się jedynie napis copyright. Co ciekawe nawet wpisanie na sztywno url nie pomogło.
- i musi być podane „swf.swf?xml_path=slides.xml” bo wtedy pokazuje się flash przynajmniej na stronie głównej.
- Przeniosłem nawet pliki flasha do katalogu gdzie jest szablon i używałem tego drugiego kodu jednak ten sam efekt.
- Jakieś inne sugestie?
Podeślij link do tej podstrony na której się nie pokazuje to może coś się uda wymyślić.
Jest jakiś inny kontakt do Ciebie. Nie chciałbym pisać tutaj adresu strony póki co.
Jesteś Wielki kolego. Serdecznie dziękuje za pomoc i poświęcony czas na rozwiązaniem tego problemu. Jednak tajnikiwp nie są Ci obce
Pozdrawiam.
Podaje rozwiązanie dla osób, które borykają się z podobnym problemem.
W pliku header.php w kodzie flasha należało wprowadzić zmiany z:
NA
<param name="movie" value= < ? php bloginfo('url') ?> /swf.swf?xml_path=< ? php bloginfo('url') ?>/slides.xml” />
Pozdrawiam.
A co będzie jeśli postąpimy odwrotnie? Jaki będzie skutek?
Ale odwrotnie co zrobimy?:) O co konkretnie pytasz.
Przewodnik znakomity i z klasą napisany.
Dziękuję i pozdrawiam,
Witam, też mam problem z plikiem flash w nagłówku, niestety nie bardzo wiem co robię nie tak ale kody podane do php nie działają, za to osadzanie z macromedia z 1990r. działa tylko wywala to walidator.
wpisane w sekcje
/wood4.swf [- NIE DZIAŁA]
< param name="movie" value="/wood4.swf” /> [_NIE DZIAŁA]
<param name="movie" value= /wood4.swf?xml_path=/slides.xml” /> [- NIE DZIAŁA]
DZIAŁA ??? tylko jak to wpisał kumpel to mu nie działa na podstronach
u mnie śmiga bez bulu http://bandurska.pl/testowy
pozdrawiam RoninPn
sorry za ponowne ale nie przechodzi pełen kod więc dopisuję to z znacznikami html
wpisane w sekcje <body>
[< ?php bloginfo('url'); ?>/wood4.swf] [- NIE DZIAŁA]
[< param name="movie" value="< ?php bloginfo('url'); ?>/wood4.swf” />] [_NIE
DZIAŁA]
[<param name="movie" value= < ? php bloginfo('url') ?> /wood4.swf?xml_path=< ?
php bloginfo('url') ?>/slides.xml” />] [- NIE DZIAŁA]
[<object align="center" id="wood4" type="application/x-shockwave-flash"
data="wood4.swf" width="950" height="200"> <param name="movie" value="wood4.swf"
/></object>]
DZIAŁA ??? tylko jak to wpisał kumpel to mu nie działa na podstronach
u mnie śmiga bez bulu http://bandurska.pl/testowy
pozdrawiam RoninPn
Jeśli coś działa w jednej przeglądarce, a w innej nie to w pierwszej kolejności radzę odświeżyć strone ctrl+f5, tak żeby wyczyścić cache. Spróbuj i daj znać czy to coś dało.
Problem polega na tym że strona na której to nie działa z dodatkowymi linkami „dziedziczonymi”:
http://lolosport.pl
ma dokładnie to samo wpisane co u mnie w tym samym szablonie.
http://bandurska.pl/testowy
Nie jest to zależne do przeglądarki, nawet po wykasowaniu temp’ów cclaener’em to nie działa. Co gorsze podane w komentarzach kody php nie chcą działać.
W tej chwili jak wejdziesz w źródło strony to masz coś takiego
Problem, w tym, że masz odnośnik względny do tego pliku wood4.swf. Dlatego on działa na głównej stronie, bo dla niej jest poprawny, a na pozostałych stronach już nie. Musisz użyć funkcji php, która wstawi przed nazwą pliku katalog, w który znajduję sie plik .swf Jeśli jest to katalog szablonu to trzeba użyć < ?php bloginfo('template_url'); ?> jeśli natomiast katalog całej strony to < ?php bloginfo('home'); ?>