Czasami zdarza się, że musimy lub chcemy pod treścią konkretnej strony wyświetlić wpis (post) lub wpisy (posty) z danej kategorii. Powody mogą być różne od artystycznej wizji po chęć stworzenia np. jakiegoś kursu, katalogu produktów, aktualności.
W większości wypadków normalni użytkownicy WordPress wykorzystują do tego odpowiednią wtyczkę. Jednak czasami jeśli np. budujemy własny motyw (skórkę, szatę graficzną) lub użycie wtyczki wydaje nam się zbyt kłopotliwe możemy wyświetlanie postów wykonać z pomocą dość prostego kodu PHP (WordPress jest napisany głównie w PHP).

Tym właśnie tematem chcę zająć się dzisiaj. Jeśli jednak wolicie skorzystać z wtyczki polecam wtyczki post in page.
Dodawanie postów na stronie bez wtyczki
Zacznijmy może od podstaw. By móc wypisać posty na stronie najpierw musimy mieć oczywiście stronę oraz jakiś motyw. To właśnie ten drugi (motyw) będziemy modyfikowali bądź budowali (w zależności od umiejętności i potrzeb).
Gdzie jest haczyk? O tuż jeśli do budowy użyjemy gotowego motywu to podczas aktualizacji nasza zmiana może zostać nadpisana. Dlatego też zalecam stworzenie dodatkowego wyglądu strony (nowego szablonu) w motywie i to właśnie w nim umieszczony zostanie kod funkcjonalność. A i na wszelki wypadek tak jak przy innych tego typu pracach pamiętamy by robić kopię zapasową. Dzięki temu w razie potrzeby będziemy mogli wadliwą wersję zastąpić działającą. Inny typ szablonu strony oczywiście wybieramy podczas edycji artykułu w prawym panelu bocznym.
Dość istotne jeśli nie masz doświadczenia w tego typu modyfikacjach by przed przystąpieniem do pracy zapoznać się z kilkoma innymi moimi wpisami.
Wypisywanie wpisów z kategorii kiedy strona ma taką samą nazwę
W celu wypisania postów z danej kategorii trzeba w pliku strony (oryginalny to page.php) dodać poniższy kod. Kod najlepiej umieścić pod wypisaniem treści artykułu – w ten sposób będziemy mieć pewność iż pobierze poprawnie nazwę kategorii. Jednocześnie będziemy mogli dodać własny opis nad listą wpisów.
<?php
$nameofkat = $post->post_name;
query_posts('category_name='.get_permalink().'&post_status=publish,future');
while (have_posts()) : the_post();
echo "<div class=''>";
the_post_thumbnail();
echo "<h3 class='entry-title'>";
echo "<a href='".get_permalink()."'>";
the_title();
echo "</a>";
echo "</h3>";
the_content();
echo "</div>";
endwhile;
?>
By lepiej można go było zrozumieć przedstawię teraz co robią poszczególne elementy specyficzne dla WordPress, czyli daruję opis pobocznych elementów HTML, PHP i odwołania do CSS.
$nameofkat = $post->post_name; // pobieramy nazwę kategorii
query_posts('category_name='.get_permalink().'&post_status=publish,future'); // bież pod uwagę posty znajdujące w kategorii nazywającej się tak samo jak nazwa strony
query_posts('cat=6'); // weź pod uwagę posty z kategorii o id=6
W tym przypadku pod treścią artykułu pokażą się wpisy (posty) należące do kategorii o takiej samej nazwie jak strona.
Podobny efekt można uzyskać – Zmiana adresów stałych.
Wypisywanie wpisów z kategorii innej niż nazwa strony
Aby wyświetlić wpisy na stronie, która ma inną nazwę niż kategoria, w której się one znajdują będzie nam potrzebny trochę inny skrypt. Kod będzie wyglądał tak:
<?php
query_posts('cat=7');
while (have_posts()) : the_post();
echo "<div class=''>";
the_post_thumbnail();
echo "<h3 class='entry-title'>";
echo "<a href='".get_permalink()."'>";
the_title();
echo "</a>";
echo "</h3>";
the_content()
echo "</div>";
endwhile;;
?>
W drugim przypadku mamy odgórnie narzucone id kategorii. W efekcie wszystkie strony korzystające z pliku z tym kodem będą wyświetlać te same wpisy.
Powyżej wypisałam 2 różne sposoby uzyskania listy postów z kategorii. W pierwszym przypadku w zależności od strony zostanie wzięta pod uwagę inna grupa wpisów. Spełniać ona musi jednak warunek posiadania takiej samej nazwy jak strona np. na stronie Oferta wyświetlą się wpisy z kategorii Oferta o ile taka istnieje.
W drugim przypadku na każdej stronie z tym szablonem wypisujemy posty z kategorii posiadającej id=7.
the_title(); // wypisanie tytułu postu
get_permalink() // adres postu, jego lokalizacja np. http://www.aurainweb.pl/przykladowy-post
the_content(); // wypisuje urywek tekstu, aż do "read more"
Czasami może przydać się również kod:
get_the_date; // data utworzenia postu
W powyższym kodzie ominęłam składnię CSS ze względu na zróżnicowaną budowę dostępnych szablonów.
Jeżeli mapie jakieś pytania lub sugestie możecie zostawić je w formie komentarza.
Dodatkowe tagi
- Jak dodać wpis do wybranej przeze mnie strony na wp?
- Umieszczenie wpisu na innej stronie
- Wypisywanie postów z szablonu
- modyfikacja szablonu, bez wtyczki
