Załóżmy, że na blogu mamy trzy kategorie – Rozrywka, Kultura i Sport. Strona główna naszego bloga pokazuje oczywiście wpisy z wszystkich trzech kategorii. Początkujący użytkownicy WP bardzo często zadają pytanie – jak sprawić, aby wpisy z danej kategorii były wizualnie odmienne od pozostałych?
Rozwiązanie tego problemu sprowadza się do napisania własnej funkcji i wpięciu jej w odpowiednie miejsce w pętlę WordPressa.
Sposób I (dla WordPressów wcześniejszych niż 2.7)
Wszystkie wpisy w WP objęte są w kodzie HTML pojemnikiem div
z klasą post
(oczywiście pod warunkiem, że korzystamy z domyślnej skórki).
Jako, że do elementu w HTML możemy przypisać wiele klas CSS rozdzielonych spacjami, wystarczy że dodamy odpowiednie klasy do postów z odpowiednich kategorii – dzięki czemu będziemy mogli nadać im odmienne style.
Chcemy uzyskać coś takiego:
|
Zadanie generowania właściwych klas CSS w zależności od kategorii, w której znajduje się wpis powierzymy funkcji generuj_css()
, którą zdefiniujemy w pliku functions.php
:
|
Kluczowym elementem naszej funkcji jest wykorzystanie wewnętrznej funkcji WP get_the_category()
. Jest ona bardzo podobna do standardowej funkcji the_category()
, z tą różnicą, że zamiast wyświetlać kategorie do których należy wpis zwraca je w formie tablicy. Tak samo jak w przypadku the_category()
– aby zadziałała prawidłowo musi zostać umieszczona w ramach WordPressowej pętli.
Jeśli np. wpis należy tylko do kategorii Kultura get_the_category()
zwraca następującą jednoelementową tablicę:
|
Tablica ta jest o tyle ciekawa, że jej elementem jest obiekt, który zawiera praktycznie wszystkie informacje dotyczące danej kategorii, z których możemy skorzystać. W funkcji generuj_css()
skorzystaliśmy z pola slug
, które idealnie nadaje się jako nazwa klasy (nie zawiera spacji i polskich znaków).
Do listy generowanych klas CSS dopisujemy również klasę bedącą nazwą użytkownika autora konkretnego wpisu, aby możliwe było np. dołączenie odpowiedniego zdjęcia do wpisu. Wykorzystaliśmy funkcję get_the_author()
, która zwraca login autora danego wpisu w postaci łańcucha tekstowego.
Napisaną funkcję wpinamy w pętlę WP w następujący sposób:
|
Sposób II (dla WP w wersji 2.7 lub późniejszej)
Okazuje się, że wraz z nadchodzącą wersją 2.7 pojawia się w pętli WP nowa funkcja post_class()
, która robi dokładnie to samo co napisana przez nas funkcja generuj_css()
a nawet więcej!
Aby skorzystać z jej dobrodziejstw, zamieniamy w pętli fragment:
|
na:
|
Od tej pory wpisom zostaną przypisane odpowiednie klasy CSS w zależności od tego w jakiej znajdują się kategorii, jak są otagowane i czy są tzw. wpisami przyklejonymi (nowość w WP 2.7):
category-kultura
– taka klasa zostanie przypisana do wpisu z kategorii Kulturatag-smieszne
– taka klasa zostanie przypisana do wpisu z tagiem śmiesznesticky
– taka klasa zostanie przypisana do przyklejonego wpisu (ang. sticky post)
Co ciekawe, jeśli do listy klas generowanych przez funkcje post_class()
klas chcemy dopisać własną klasę, wystarczy podać łańcuch tekstowy z nazwami klas jako argument. Czyli jeśli chcielibyśmy dopisać klasę będącą nazwą użytkownika autora wpisu możemy to zrobić w ten sposób:
|
Mam nadzieję, że powyższe informacje ułatwią wam eksperymenty z wyglądem WordPressowych wpisów.
Czy mógłbyś podać przykład fragmentu pliku css odpowiedzialny za ostylowanie postu po wprowadzeniu tej linijki kodu:
id=”post-“>
np. klasy sticky?
Sory, nie wprowadziłem otagowania. Chodzi mi o tą linijkę:
id="post-">
Świetna rzecz! Dzięki :D