WP-DOC

Pisanie motywu

02.08 Wpisy z kategorii

Ostatnia modyfikacja: 05.04.2021

Znając hierarchię plików motywu WordPress, zaczniemy tworzyć poszczególne elementy strony. Na początku utworzymy plik category.php, gdzie będą wyświetlane posty z danej kategorii. Ze względu na prostotę motywu, plik ten zawartością będzie niemal identyczny jak plik index.php. Dlatego warto skopiować plik index.php i zmienić jego nazwę na category.php. Plik ten będzie wyświetlał wszystkie wpisy z klikniętej kategorii.

Pętla dla kategorii

Do wyświetlania wpisów z kategorii używamy dokładnie tej samej pętli co w przypadku wyświetlania wszystkich wpisów na stronie głównej. WordPress dokładnie wie jaki link został kliknięty i za pomocą jakiego pliku ma wyświetlić treść. W pętli nie dodajemy żadnych dodatkowych argumentów, dla określenia że mają zostać wyświetlone wpisy z kategorii.

Informacje o kategorii

Za pomocą funkcji get_the_category(), można pobrać wszystkie informacje na temat kategorii bieżącego posta. Funkcji można używać poza pętla. Jako argument przyjmuje numer ID posta. Jednak kiedy nie podamy numeru ID, zostaną pobrane informacje na temat kategorii aktualnego posta. Natomiast kiedy funkcja zostanie uruchomiona w pliku odpowiedzialnym za wyświetlanie wpisów kategorii bez żadnych parametrów, zostaną pobrane informacje na temat aktualnej kategorii. Na listingu niżej przypisanie funkcji do zmiennej, a następnie wywołanie wszystkich parametrów.

category.php – wywołanie wszystkich parametrów funkcji get_the_category() – fragment pliku

$info_category = get_the_category();
var_dump($info_category);

// Poniżej efekt funkcji var_dump();
array(1) {
  [0]=>
  object(WP_Term)#3813 (16) {
    ["term_id"]=>int(2)
    ["name"]=>string(18) "Poznajemy HTML-CSS"
    ["slug"]=>string(18) "poznajemy-html-css"
    ["term_group"]=>int(0)
    ["term_taxonomy_id"]=>int(2)
    ["taxonomy"]=>string(8) "category"
    ["description"]=>string(0) ""
    ["parent"]=>int(0)
    ["count"]=>int(1)
    ["filter"]=>string(3) "raw"
    ["cat_ID"]=>int(2)
    ["category_count"]=>int(1)
    ["category_description"]=>string(0) ""
    ["cat_name"]=>string(18) "Poznajemy HTML-CSS"
    ["category_nicename"]=>string(18) "poznajemy-html-css"
    ["category_parent"]=>int(0)
  }
}

Jak widać otrzymujemy tablicę z informacjami na temat bieżącej kategorii. Poniżej przykładowe wyświetlenie otrzymanych informacji.

Przykłady wykorzystania informacji otrzymanych z funkcji get_the_category()

// Nazwa Kategorii
<h1><?php echo $info_category[0]->name; ?></h1>

// Opis kategorii
<p><?php echo $info_category[0]->description ?></p>

// Ilość postów w kategorii
<span><?php echo $info_category[0]->count ?></span>

// Numer ID kategorii
$info_category[0]->cat_ID;

Wyświetlanie nazwy kategorii w motywie

Mając utworzony plik category.php, na bazie pliku index.php, dodajmy do pliku kategorii funkcje get_the_category(), aby wyświetlać nazwę aktualnie przeglądanej kategorii.

category.php – dodanie nazwy kategorii – fragment kodu

<div class="content_post">
    <?php $info_cat = get_the_category(); ?>
    <p class="cat_name"><?php echo $info_cat[0]->name; ?></p>
    // Tutaj zaczyna się pętla pobierająca posty

Warto również dodać trochę kodu css dla akapitu o nazwie klasy cat_name. Poniższy kod w pliku style.css najlepiej umieścić w 75 linii kodu.

style.css – nadanie styli elementowi o nazwie klasy cat_name – fragment kodu

.cat_name {
    margin-top: 0;
    padding: 15px;
    background: rgb(69,69,69);
    font-size: 1.2em;
    color: rgb(255,255,255);
}

Nazwa kategorii, powinna być wyświetlana w motywie jak na zdjęciu niżej. Możesz dokonać innych modyfikacji w pliku category.php niż tylko wyświetlić jego nazwę. Można również dodać krótki opis.

Nazwa kategorii w pliku category.php motywu.
Wyświetlanie nazwy kategorii w motywie.

Jeżeli chcemy wyświetlić tylko i wyłącznie nazwę kategorii, wtedy lepiej zastosować funkcje single_cat_title().

Funkcja single_cat_title() przyjmuje dwa argumenty:

  1. Prefix – czyli to co ma zostać wyświetlone przed nazwą kategorii;
  2. Drugi parametr określa czy wyświetlić true czy pobrać tytuł false.

Przykład zastosowania funkcji single_cat_title()

// Przykłady przy założeniu, że przeglądamy wpisy z kategorii o nazwie Poznajemy HTML-CSS
<p><?php  single_cat_title('Przeglądasz kategorię ', true) ?></p> // Wyświetli -> Przeglądasz kategorię Poznajemy HTML-CSS

<p><?php  single_cat_title('', true) ?></p> // Wyświetli -> Poznajemy HTML-CSS

Wyświetlanie opisu kategorii

Opis kategorii możemy wyświetlić na dwa sposoby. Pierwszy z nich to przy pomocy funkcji get_the_category().

Wyświetlanie opisu kategorii za pomocą funkcji get_the_category()

$info_category = get_the_category();
<p><?php echo $info_category[0]->description ?></p>

Drugi sposobem wyświetlenia opisu kategorii jest możliwy przy użyciu funkcji category_description(). Funkcja za parametr przyjmuje ID kategorii, który opis ma wyświetlić. Jeżeli nie zostanie podana żadna wartość, zostanie wyświetlony opis bieżącej kategorii.

Wyświetlanie opisu kategorii za pomocą funkcji category_description()

// Wyświetlanie opisu bieżącej kategorii
<p><?php echo category_description(); ?></p>

// Wyświetlanie opisu kategorii o numerze ID = 4
<p><?php echo category_description(4); ?></p>

Zmiana wyglądu motywu, w zależności od kategorii

Jeżeli w motywie poszczególne kategorie różnią się znacząco, wtedy warto utworzyć dla każdego z nich osobny plik, zgodnie z hierarchią plików dla kategorii. Najczęściej jest to nazwa pliku wraz z numerem ID kategorii, na przykład category-7.php. Jednak kiedy zmiany są znikome nie ma potrzeby tworzenia osobnego pliku, wtedy warto posłużyć się funkcją is_category(). Funkcja ta może przyjąć następujący argument:

  • ID kategorii;
  • nazwa kategorii;
  • slug (uproszczona nazwa) kategorii;
  • tablica z numerami ID, nazwami lub slug;

Jeżeli nie zostanie podany żaden argument funkcji is_category(), funkcja zwróci true, jeżeli będzie wyświetlana strona kategorii.

Funkcja zwraca true lub false w zależności od tego czy kategoria istnieje czy też nie. W instrukcji warunkowej należy sprawdzić jaką wartość zwraca funkcja.

W motywie nazwę kategorii wyświetlamy na szarym tle. Wykorzystując funkcję is_category() zmienimy kolor tła w zależności od kategorii. Najpierw dokonajmy zmiany w pliku style.css. W pliku należy dodać dodatkowe klasy, które będą posiadały tylko jedną właściwość background z innym kolorem. Natomiast z klasy cat_name, należy usunąć właściwość background. Wszystkie zmiany w pliku style.css na listingu niżej.

style.css – klasy odpowiadające za kolor kategorii – fragment kodu

.cat_name {
    margin-top: 0;
    padding: 15px;
    font-size: 1.2em;
    color: rgb(255,255,255);
}

.cat_name_gray {
    background: rgb(69,69,69);
}

.cat_name_blue {
    background: rgb(41,128,185);
}

.cat_name_orange {
    background: rgb(230,126,34);
}

W pliku category.php wcześniejszy dodany kod zamieniamy na ten z listingu niżej. Wewnątrz każdej funkcji należy podać odpowiednie ID kategorii. W moim przypadku jest to:

  • 2 – Poznajemy HTML-CSS
  • 3 – Programowanie w PHP
  • 4 – Baza danych MySQL

category.php – zmiana koloru kategorii – fragment kodu

<div class="content_post">
<?php 
$info_cat = get_the_category(); 
if(is_category(2)) {
    echo '<p class="cat_name cat_name_gray">'.$info_cat[0]->name.'</p>';
} else if(is_category(3)) {
    echo '<p class="cat_name cat_name_blue">'.$info_cat[0]->name.'</p>';
} else if(is_category(4)) {
    echo '<p class="cat_name cat_name_orange">'.$info_cat[0]->name.'</p>';
}
// Tutaj zaczyna się pętla pobierająca posty

Tablica argumentów dla is_category()

W przypadku kiedy te same zmiany mają dotyczyć kilku kategorii, warto wewnątrz funkcji is_category() posłużyć się tablicą, jak na listingu niżej.

Przykład wykorzystania tablicy w funkcji is_category()

// Dla ID kategorii
if(is_category(array(1,2))) {
    // Tutaj jakieś akcje 
}

// Dla nazwy kategorii
if(is_category(array('Nazwa 1','Nazwa 2'))) {
    // Tutaj jakieś akcje 
}

// Dla slug kategorii
if(is_category(array('nazwa-1','nazwa-2'))) {
    // Tutaj jakieś akcje 
}

// Tablica mieszana ID, nazwa, slug
if(is_category(array(6,'Nazwa 1','nazwa-2'))) {
    // Tutaj jakieś akcje 
}

Czytaj dalej…

02.09 Pojedynczy wpis

KOMENTARZE

Jeżeli masz pytanie lub sugestie dotyczącą artykułu to napisz komentarz. Wartościowe komentarze zostaną umieszczone jako opinie warte uwagi.

Napisz komentarz

Wszystkie pola są obowiązkowe. E-mail nie będzie udostępniony, ani wykorzystywany do rozsyłania wiadomości reklamowych.

5 komentarzy

  • Krzysztof pisze:

    Witam. Czy nazwa classy cat_name jest stała czy można ją dowolnie zmieniać? Mianowicie jak zmieniam plik css według podanych tu informacji, to nie następuje u mnie żadna zmiana wyglądu nazwy kategorii. Badając ten element doszedłem do przeglądarka nie chce pobrać mi nazwy tej classy i pobrać jej elementów. Wyświetlają mi się tylko podstawowe style dla <p> i <body>. Wydaje mi się że listingu „category.php – zmiana koloru kategorii” nie został domknięty znacznik . I pytanie czy fukncje get_the_category() a dokładnie $info_category = get_the_category(); var_dump($info_category); trzeba umieścić w pliku functions.php aby później ją wykorzystać w pliku category.php?

    • Krzysztof pisze:

      Wydaje mi się że listingu „category.php – zmiana koloru kategorii” nie został domknięty znacznik php

    • Maciej pisze:

      „Czy nazwa classy „cat_name” jest stała czy można ją dowolnie zmieniać?” – Nazwę klasy „cat_name” można modyfikować dowolnie. Jest to nazwa nadana przeze mnie.

      „Mianowicie jak zmieniam plik css według podanych tu informacji […]” – Jeżeli zmieniłeś plik CSS, według listingu z tego artykułu, to musisz przypisać klasę „cat_name” do znacznika <p>, tak jak jest to na listingu „category.php – zmiana koloru kategorii” inaczej żadna zmiana nie nastąpi.

      „Wydaje mi się że listingu „category.php – zmiana koloru kategorii” nie został domknięty znacznik” – Zgadza się, znacznik <?php nie został zamknięty, gdyż niżej w pliku category.php znajduje się pętla loop wyświetlająca wpisy, co sugeruje komentarz w tym listingu.

      „I pytanie czy fukncje get_the_category() a dokładnie $info_category = get_the_category(); var_dump($info_category); trzeba umieścić w pliku functions.php aby później ją wykorzystać w […]” – Nie, tą funkcję należy umieścić w pliku category.php, gdyż informacje zwrotne w var_dump($info_category); dotyczą aktualnie przeglądanej kategorii.

      Dziękuję za pytania. Artykuł zostanie nie co skorygowany, aby przyszłe osoby nie miały problemów.