Kurs WordPress (6)

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

Dodawanie filtrów. Własna pętla oraz szablon podstrony.

W ostatnim artykule przybliżyłem Ci temat filtrów i zaczepów oraz podałem przykład tych drugich. Jak pamiętasz stworzenie zaczepu wymaga zdefiniowania funkcji, a następnie podpięcia jej pod dane zdarzenie. W przypadku filtrów jest podobnie. Jedyna różnica tkwi w tym, że funkcja filtru musi posiadać parametr. Oczywiście wynika to z jej przeznaczenia – filtry modyfikują treść, a więc musi ona zostać jakoś przekazana do naszej funkcji.

Załóżmy, że pod każdym postem chcemy dodać kilka zdań o autorze, korzystając właśnie z filtrów. Zdefiniujmy więc odpowiednią funkcję.

function add_text( $content ){ if( is_single() ){ $content .= '<div class="additional-text">'.get_the_author(); $content .= '. '.get_the_author_meta('description').'</div>'; } return $content; }

Funkcja dostanie więc odpowiednią treść, zmodyfikuje ją, a następnie zwróci. Zwróć uwagę na zastosowanie is_single() – funkcja zwraca true jeżeli użytkownik przegląda pojedynczego posta (korzysta z pliku single.php). Istnieje więcej podobnych funkcji, które pomogą określić Ci, w jakiej części strony znajduje się użytkownik. Szerzej na ten temat przeczytasz na http://codex.wordpress.org/Conditional_Tags.

Teraz czas zastosować filtr. Użyjemy do tego celu zaczepu 'thematic_post'. Dzięki temu, nasza funkcja będzie wywołana po wejściu w dowolny post.

add_filter( 'thematic_post', 'add_text', 999 );

Ostatni argument – 999 to priorytet filtru, który określa kolejność jego wykonania. Najpierw WP uruchomi te filtry o niższym priorytecie. Jeśli więc, Twój filtr modyfikuje treść za wcześnie lub za późno, należy pokombinować z jego priorytetem.

Skorzystaliśmy również z funkcji get_the_author() oraz get_the_author_meta('description'). Pierwsza z nich zwróci nazwę autora danego posta. Druga jest bardziej ogólna i może zwrócić wiele informacji – nasz parametr mówi o tym, że jesteśmy zainteresowani opisem autora. Oczywiście te dane będą adekwatne do wpisanych przez użytkownika w panelu administratora.

Własna pętla i szablon podstrony

Na moim drugim blogu http://brieftip.pl/ znajduje się pozycja Popularne, która przenosi do strony zawierającej 5 najpopularniejszych postów. Wyznacznikiem popularności jest liczba wejść, a więc znajduje się tam 5 najczęściej odwiedzanych artykułów. Osiągnąłem ten efekt, przy użyciu dwóch rzeczy: własnej pętli oraz szablonu podstrony.

Szablon podstrony, to plik .php, który administrator może sobie przypisać do utworzonej przez siebie podstrony. W panelu edycji strony znajduje się pozycja Atrybuty strony, a w niej Szablon. Jest to lista rozwijana, w której pojawią się odpowiednio zdefiniowane pliki .php

Jak sprawić, aby pojawił się tam nasz plik? Wystarczy na początku wpisać:

/*
Template Name: Nazwa szablonu strony
*/

i gotowe. Oczywiście plik powinien wyglądać podobnie jak index.php, a więc dołączyć nagłówek (get_header()), stopkę (get_footer()), zdefiniować treść (np. pętlę) itp.

Aby wyświetlić 5 najpopularniejszych postów, skorzystałem z własnej pętli. Poniżej kod.

$query = new WP_Query(array('posts_per_page'=>5,'orderby' => 'meta_value_num', 'meta_key' => 'count_page_hits','order' => 'DESC'));

if ($query->have_posts()): while ($query->have_posts()) : $query->the_post();?>
  /*tu korzystam z funkcji jak: get_the_category(),
    the_permalink(), the_title() itd.*/
<?php endwhile; ?>
<?php else: ?>
    <?php echo 'Nic do wyświetlenia'; ?>
<?php endif; ?>

Najważniejszym fragmentem powyższego kodu jest zapytanie, które definiuje jakie posty mają wyświetlić się w pętli. Korzystam z klasy WP_Query. Ustawiam takie parametry jak: ilość postów, która ma zostać wyświetlona, sposób ich sortowania (wg popularności, malejąco).

Obiekty klasy WP_Query pozwalają na tworzenie dość zaawansowanych zapytań. Warto także zwrócić uwagę na funkcję get_post(), która zwraca tablicę postów, spełniających podane zapytanie. Używa się jej w normalnej pętli, a nie WordPress’owej. Więcej na temat funkcji przeczytasz na stronie http://codex.wordpress.org/Function_Reference/get_post.

Sposoby modyfikacji treści

Z artykułów, które przeczytałeś do tej pory, mogłeś dowiedzieć się 3 sposobów modyfikacji szablonu:

  • bezpośrednia modyfikacja kodu plików,
  • tworzenie i dodawanie własnych plików,
  • korzystanie filtrów.

Warto być świadomym tego faktu oraz rozumieć jakie są konsekwencje korzystania z powyższych sposobów. Który wybrać? To zależy. Przykładowo, jeżeli chcesz coś dodać lub zmienić i nie wymaga to dużej ilości nowego kodu, to warto skorzystać z filtrów. Przydadzą się także, kiedy chcesz dodać funkcjonalność bez modyfikacji szkieletu szablonu.

Własne pliki najprawdopodobniej będziesz chciał dodać kiedy tworzysz szablon na bazie frameworka lub potrzebne będzie dodanie funkcjonalności do konkretnej strony lub posta.

Bezpośrednia modyfikacja kodu, zawartego w plikach, przyda Ci się kiedy od początku będziesz tworzył własny szablon albo coś z frameworka ewidentnie będzie utrudniać Twoje życie. Wtedy wystarczy odpowiednie fragmenty wykomentować lub zmodyfikować.

część 7

Zobacz również
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 (5)Przeszukiwanie i dołączanie plików szablonu. Wstrzykiwanie treści. Mechanizm zaczepów i filtrów.
Kurs WordPress (7)Dodawanie własnego kontenera na widgety.
Kurs WordPress (8)Tworzenie własnego widgetu.
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?

1 komentarz

  • MirekC napisał(a):

    Ciężko było znaleźć ten artykul w google, stronka ciekawa, zasługuje na większy ruch. SEO w 2015 stało się skomplikowane, jest coś co ci się napewno przyda, poszukaj sobie w google – niezbędnik dla każdego webmastera

  • Dodaj komentarz

    Twój adres e-mail nie zostanie opublikowany.