Kurs WordPress (5)

Autor: Damian Chodorek • Opublikowany: 8 grudnia 2014 • Ostatnia aktualizacja: 8 lutego 2015 • Kategoria: kursy, wordpress

Przeszukiwanie i dołączanie plików szablonu. Wstrzykiwanie treści. Mechanizm zaczepów i filtrów.

W poprzednich częściach wspomniałem o standardowych plikach szablonu. Należą do nich min. index.php, single.php.

W rzeczywistości sprawa jest bardziej skomplikowana. WordPress będąc na określonej podstronie, poszukuje plików .php w określonej kolejności. Nie będę się na ten temat zbytnio rozpisywał, ponieważ wszystko jest dobrze wyjaśnione tu: http://codex.wordpress.org/Template_Hierarchy.

Kiedy nasz szablon jest potomny to w pierwszej kolejności WP przeszuka jego katalog. Jeśli nie znajdzie odpowiednich plików, zacznie przeszukiwać katalog rodzica. W związku z tym, jeżeli chcesz stworzyć swój własny szablon na bazie frameworka wystarczy, że skopiujesz interesujący Cię plik do katalogu szablonu potomnego i dokonasz jego edycji.

Przykładowo jeżeli skopiujesz index.php do własnego katalogu, to wszelkie zmiany, które w nim dokonasz będą natychmiastowo widoczne. Zajrzyj do wspomnianego pliku. Zobaczysz tam mnóstwo wywołań funkcji, które są wplecione w kod HTML. Aby pozbyć się paska bocznego wystarczy, że usuniesz linijkę thematic_sidebar();.

Dołączanie plików

Często jest tak, że dany fragment strony jest niezależny od podstron. Dobrym przykładem może być header.php, który chcemy wszędzie dołączyć. WP posiada wbudowane funkcje, które robią właśnie to – dołączają odpowiednie pliki.

Są to np. get_header(), która dołącza plik header.php, get_footer(), która dołączy plik footer.php. Tego typu funkcje posiadają opcjonalny parametr.

Wywołanie funkcji get_header('custom') dołączy plik header-custom.php. Widzisz więc zależność pomiędzy parametrem, a nazwą pliku. A co jeśli chcesz dołączyć plik o niestandardowej nazwie? Wtedy należy skorzystać z get_template_part('partname'), która dołączy plik partname.php.

Owszem, język PHP posiada własną funkcję, która dołącza pliki – include(). Preferowane jest jednak używanie funkcji WP, ponieważ zachowanie naszej strony będzie bardziej konsystentne. Jeżeli przykładowo zechcemy dołączył plik header-custom.php i nie zostanie on odnaleziony, to include spowoduje błąd, a funkcja WordPress’owa spróbuje znaleźć plik header.php (zgodnie z tym co pisałem na początku artykułu).

Jeśli jednak masz prawdziwą potrzebę użycia funkcji include() to WP oferuje dwie przydatne stałe: STYLESHEETPATH oraz TEMPLATEPATH. Pierwsza jest dla szablonów potomnych, druga dla zwykłych. Korzystamy z nich, np. tak:

include(TEMPLATEPATH. '/moj_plik.php');

Wstrzykiwanie treści

Oczywiście tworząc własny szablon, będziemy chcieli w niektórych miejscach dodać menu, opisy, formularz wyszukiwania itp. Ogólnie mówiąc – treści. WP posiada multum funkcji, które do tego służą. Dzięki nim wyświetlisz treść danego posta, tagi, tytuł, menu, linki do wszystkich podstron i wiele innych. Poniżej tylko kilka przykładów, aby dać Ci ogólny pogląd.

  • bloginfo() – zwraca daną informację o stronie, np. bloginfo('url') zwróci jej adres,
  • wp_list_pages() – wyświetla listę linków do podstron,
  • get_the_category() – zwraca kategorie posta *,
  • the_title() – zwraca tytuł posta *,
  • the_content() – zwraca treść posta *.

* – gwiazdką oznaczyłem funkcje, które działają wewnątrz pętli zwanej The Loop. WordPress’owa pętla, to jak sama nazwa wskazuje, główna pętla szablonu, której zadaniem jest przeiterowanie przez wszystkie posty. Jej konstrukcja wygląda tak:

<?php if (have_posts()): while (have_posts()) : the_post();?>
    /*tutaj możemy skorzystać z funkcji takich jak the_title()*/
<?php endwhile; ?>
<?php else: ?>
    <?php echo 'Nic do wyświetlenia'; ?>
<?php endif; ?>

Tam gdzie znajduje się komentarz – wewnątrz pętli, możemy korzystać z funkcji, które oznaczyłem gwiazdką. W kolejnych iteracjach zwrócą one dane dla następnego posta. Więcej na ten temat przeczytasz na stronie: http://codex.wordpress.org/The_Loop.

Zaczepy i filtry

Jest to nic innego niż podpięcie naszych funkcji pod funkcje WP. Przykładowo, kiedy WP wywołuje funkcję get_header() możesz zarejestrować własną funkcję, która zostanie wtedy automatycznie wywołana. Przyczepiamy więc własne funkcję do tych standardowych. Czym więc różni się zaczep od filtru?

Zaczepy to zdarzenia, które zachodzą w środowisku WP (np. wyświetlenie footera). Zaczepów używa się najczęściej, aby w momencie zajścia jakiejś akcji na stronie, została automatycznie wywołana nasza funkcja.

Filtry pozwalają modyfikować treść, którą zwracają funkcje WP. Przykładowo chcesz dodać jakiś HTML’owy tag do tytułu posta lub linków.

Powyższe mechanizmy wymagają dwóch kroków: zarejestrowania własnej funkcji oraz zdefiniowania jej. Dzięki temu WP będzie wiedział, w którym momencie powinien uruchomić jaką funkcję (Twoją funkcję). Takich zaczepów jest bardzo dużo i odpowiadają wielu zdarzeniom, które mogą zajść na stronie. Z tego mechanizmu korzystamy tak jak poniżej.

add_action( $hook, $function_to_add, $priority, $accepted_args );
add_filter( $tag, $function_to_add, $priority, $accepted_args );
//przykład - dokładamy faviconę do nagłówka

//najpierw definiujemy funkcję
function my_favicon() {
    echo '<link rel="shortcut icon" href="'
    . get_bloginfo('stylesheet_directory')
    . '/fav.ico"/>';
}

//potem przyczepiamy ją do odpowiedniego wydarzenia
add_action('wp_head', 'my_favicon');

Od tego momentu, wywołanie w szablonie funkcji wp_head(), wywoła także naszą funkcję my_favicon().

Zaczepy i filtry dodajemy w pliku functions.php. To jego przeznaczenie. Nie musimy korzystać wyłącznie ze zdarzeń, które są zdefiniowane przez WP. Możemy także wywołać własne akcje, a tym samym wszystkie podpięte do nich funkcje, przy pomocy do_action( 'nazwa akcji' ).

część 6

Zobacz również
Kurs WordPress (1)Ogólny zarys technologii.
Kurs WordPress (2)Podstawowe rodzaje szablonów.
Kurs WordPress (3)Pierwsze kroki. Framework Thematic.
Kurs WordPress (4)Przeszukiwanie i dołączanie plików szablonu. Wstrzykiwanie treści. Mechanizm zaczepów i filtrów.
Kurs WordPress (6)Dodawanie filtrów. Własna pętla oraz szablon podstrony.
Kurs WordPress (7)Dodawanie własnego kontenera na widgety.
Projektowanie stron WWW (1)10 heurystyk Jakoba Nielsena – Twoja ściąga.
Kurs obiektowego JavaScript (1)Wstęp, historia i zastosowanie języka. Dla kogo jest ten kurs?

3 komentarze

  • Mike napisał(a):

    Wywołuje get_header z parametrem, dla przykładu
    get_header(‚test’) dodając plik header-test.php.

    dlaczego przy uruchomieniu strony nie jest np wykonywany pokaz postu [carousel]

    jak usune z get_header parametr test działa bez problemów

  • bartek napisał(a):

    Świetny kurs – dziękuję!

  • Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany.