WordPress: Jak nadać odmienny styl wpisom z konkretnej kategorii lub konkretnego autora? Grzegorz Wójcik

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:

  1. <div class="post rozrywka"> ... </div>
  2. <div class="post kultura"> ... </div>
  3. <div class="post sport"> ... </div>

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:

  1. function generuj_css() {
  2.  
  3. foreach(get_the_category() as $kategoria) {
  4. $klasy_css .= ' ' . $kategoria->slug;
  5. }
  6.  
  7. echo $klasy_css . ' ' . get_the_author();
  8.  
  9. }

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ę:

  1. (
  2. [0] => stdClass Object
  3. (
  4. [term_id] => 4
  5. [name] => Kultura
  6. [slug] => kultura
  7. [term_group] => 0
  8. [term_taxonomy_id] => 4
  9. [taxonomy] => category
  10. [description] =>
  11. [parent] => 0
  12. [count] => 1
  13. [object_id] => 1
  14. [cat_ID] => 4
  15. [category_count] => 1
  16. [category_description] =>
  17. [cat_name] => Kultura
  18. [category_nicename] => kultura
  19. [category_parent] => 0
  20. )
  21.  
  22. )

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:

  1. <?php if (have_posts()) : ?>
  2. <?php while (have_posts()) : the_post(); ?>
  3.  
  4. <div class="post<?php generuj_css(); ?>" id="post-<?php the_ID(); ?>">
  5. ...
  6. </div>
  7.  
  8. <?php endwhile; ?>

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:

  1. <div class="post" id="post-<?php the_ID(); ?>">

na:

  1. <div <?php post_class() ?> id="post-<?php the_ID(); ?>">

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 Kultura
  • tag-smieszne – taka klasa zostanie przypisana do wpisu z tagiem śmieszne
  • sticky – 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:

  1. post_class(get_the_author());

Mam nadzieję, że powyższe informacje ułatwią wam eksperymenty z wyglądem WordPressowych wpisów.

Czytaj więcej:
Artykuły » WordPress
Tagi:

Grzegorz Wójcik

Grzegorz Wójcik jest założycielem internetowego magazynu kminek.pl. Pasjonat i twórca lekkich, dostępnych i użytecznych stron internetowych budowanych w oparciu o standardy sieciowe i najlepsze praktyki. Prywatnie wielki miłośnik ambitnego kina sci-fi oraz grunge-rocka z lat 90.

Zobacz wszystkie artykuły tego autora (15)

  1. Czy mógłbyś podać przykład fragmentu pliku css odpowiedzialny za ostylowanie postu po wprowadzeniu tej linijki kodu:

    id=”post-“>

    np. klasy sticky?

  2. Sory, nie wprowadziłem otagowania. Chodzi mi o tą linijkę:

    id="post-">

    1. div.sticky { ... }
    2. div.sticky p { ... }
    3. itd.
  3. owl 4

    Świetna rzecz! Dzięki :D

Dodaj komentarz * pola obowiązkowe

 
 

Dozwolone tagi HTML: <strong> <em> <a href="" title=""> <code> <pre lang=""> <blockquote cite="">

Komentarze są moderowane. Mile widziane wpisy wnoszące nowe, ciekawe informacje do omawianego tematu
lub sygnalizujące ewentualne błędy merytoryczne. Wszelkie przejawy spamu lub nieetycznego zachowania bedą
karane blokadą adresu IP/domeny.