Jak wyświetlać na blogu dokładnie to co chcemy?

Wpis z dnia 10.01.2006, umieszczony w kategorii "Wordpress".

Czasami zdaża się, że np. na stronie głównej chcemy wyświetlić tylko posty z określonej kategorii, albo rozmieścić je w niestandardowy sposób. WordPress daje nam także w tym przypadku bardzo dużo możliwości.
Przykład takiej niestandardowej strony głównej można zobaczyć na http://news.biskupiak.net/. Zajmijmy się sposobami na dostosowanie WordPress’owego Loop’a do naszych potrzeb.

Jeśli chcemy wyświetlić na stronie głównej lub jakimkolwiek archiwum posty tylko z jednej kategorii, wystarczy że po instrukcji (która rozpoczyna pętlę):

<?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

dodamy:

<?php if (in_category('news')) { ?>

W tym przykładzie zostaną wyświetlone tylko wpisy z kategorii o znaczniku `news`, zamiast znacznika można podać też pełną nazwę kategorii lub jej `ID`.

Oczywiście musimy pamiętać o zamknięciu konstrukcji warunkowej, a więc przed:

<?php endwhile; else: ?>

dodajemy:

<?php } ?>

Jeszcze większe możliwości daje nam funkcja `query_posts`, przykład:

<? $posts = query_posts('cat=1,2,5&showposts=2'); ?>

Taką instrukcję umieszczamy przed rozpoczęciem pętli. Instrukcja przykładowa ogranicza wyświetlanie wpisów w pętli do kategorii `1,2,5` - dodatkowo parametr `showposts`, jak sama nazwa wskazuje, określa ile postów ma zostać wyświetlonych (niezależnie od głównych ustawień bloga!).

— 10/01/2006

Komentarzy: 34

  1. Piotrek / savek powiedział/a:

    I za to tak bardzo lubię WP ;)

  2. Krzysiek powiedział/a:

    A u mnie nie działa :-( tzn. nic się nie wyświetla po uruchomieniu.

  3. nocny powiedział/a:

    Jeśli Ci się nic nie wyswietla zmień nazwę na id kategorii.
    Ogólnie dziękuje autorowi za ten tips.
    pozdrawiam

  4. Adam powiedział/a:

    U mnie niezależnie czy wpiszę ID czy nazwę kategorii to znika wszystko wewnątrz strony - wszystkie wpisy i strony statyczne są niewidoczne tzn. widać normalnie header, sidebar i footer a newsów i tekstów na stronach statycznych brak. Zależy mi żeby mieć jeden stały tekst na głównej. Modyfikuję theme City Life. Będę wdzięczny za jakieś sugestie :)

  5. Yano powiedział/a:

    Może to Ci pomoże: http://codex.wordpress.org/Category_Templates

  6. mario powiedział/a:

    zgłasza bład

  7. mario powiedział/a:


    zgłasza sie bład w składni

  8. Mikołaj Barczentewicz powiedział/a:

    Tzn. gdzie zgłasza? Bo nie do końca rozumiem.

  9. mario powiedział/a:

    chcialem wkleic kawalek kodu. ale sie nie daje…

    jesli dodaje ?php }? pokazuje sie bład w tej linji

    zreszta petla u mnie w pliku index kończy sie ?php endif; ? a nie ?php endwhile; else: ?

  10. mario powiedział/a:

    troche bałagan zrobilem w tych komentarzach. ale jaki paramet jest odpowiedzialny za wyswietlanie odp. kategorii na stronie głównej ?

  11. Riser powiedział/a:

    Dobry post. Bardzo przydatny. Gdyby nie ta strona nie wiem ile bym się męczył nad spisem postów z danej kategori :)
    Pozdro dla autora :>

  12. Kosmita powiedział/a:

    Tworzę stronę w dwóch językach. W przyszłości dojdą kolejne. Każdy język ustawiłem jako osobną kategorię. Chciałbym na pasku bocznym zrobić opcję “Ostatnio dodano” ale w taki sposób, by pojawiało się 10 nowości z każdej kategorii językowej, np. “Wpisy polskie”.

    Tak wygląda fragment kodu dla pokazywania się wszystkich kategorii w jednym spisie nowości:

    Ostatnio dodano

    A jak ten kod zmienić, by pokazywały się tylko nowe wpisy z jednej kategorii a nie wszystkich? By efekt końcowy był taki:

    Ostatnio dodano (Język polski)
    - Wpis 1
    - Wpis 2
    - Wpis 3 (itd., aż do 10)

    Ostatnio dodano (Pyccкий язык)
    - Запис 1
    - Запис 2
    - Запис 3 (aż do nr 10)

    Itd,. itp.

    Liczę na odpowiedź, bo pytałęm w wielu miejscach, ale nikt nie potrafi pomóc. Czyżby WordPress był pod tym kątem ograniczony? Czy tylko nikt taką opcją się nie interesował.

  13. Kosmita powiedział/a:

    Jak na pasku bocznym wyświetlić “Najnowszych 10 wpisów” z pojedynczej aktegorii (a nie wszystkie naraz)? By wyglądało to tak:

    Ekonomia:
    -Wpis 1
    -Wpis 2
    -Wpis 3 (itd. az do 10)

    Kultura:
    -Wpis 1
    -Wpis 2
    -Wpis 3 (itd. az do 10)

    Itd. a nie tak jak na twojej stronie, że wszystkie kategorie są wrzucone do jednego działu “Najnowsze wpisy”

  14. Mikołaj Barczentewicz powiedział/a:

    Funkcja query_posts() pozwala nam na wybranie kategorii, z których chcemy “wyciągnąć” posty.

    Np. query_posts('cat=1&showposts=2'); wyciągnie 2 najnowsze posty z kategorii o ID = 1.

  15. Kosmita powiedział/a:

    Wkleiłem analogicznie kod z eksperymentalnym nagłówkiem “Eksperyment”

    Eksperyment

    I nic. Widać tylko napis tytułowy “Eksperyment” i niczego poniżej nie wyświetla. A w kategorii “ID=1″ mam ponad 70 wpisów. Zerknij na moją stronę (patrz adres przy nicku i e-mailu) i sam zobacz. Przygotowuję stronę dla kilku wersji językowych i wpisy z każdego języka są osobną kategorią. I dlatego zależy mi, by każda wersja miała osobne menu “Ostatnio dodano”. Może coś nie tak wpisałem do kodu albo brakuje jakiegos pliku który trzeba przenieść z innej templatki? Mam WordPressa 2.1.1

  16. Mikołaj Barczentewicz powiedział/a:

    Niestety zabawa w tego typu modyfikacje WP wymaga znajomości PHP i to trochę większej niż podstawowa.

    query_posts() trzeba dodać przed pętlą < ?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>. Poza tym samodzielnie trzeba się zatroszczyć o wyświetlanie listy z tymi wpisami.

    WP daje ogromne możliwości, ale by osiągnąć dobre efekty trzeba znać PHP, XHTML i CSS oraz wczytywać się uważnie w Codex.

  17. Kosmita powiedział/a:

    Wkleiłem przed w pliku “index”, a w pasku bocznym wkleiłem to co przedtem, i nie działa. Chyba nic z tego mi nie wyjdzie. Mimo to dziękuję za poświęcony czas. Gdybyś jednak chciał dokładnie pomóc (przysyłając gotowy kod do wklejenia w wyznaczone miejsce, daj znać. Ewentualnie podesłałbym kod mojej templatki).

    Pozdrawiam:
    Załamany kosmita - lamiarz totalny

    PS. Coś ci źle wyświetla templatka linki przy nickach w komentarzach. Zamiast mojej strony wyświetla się adres e-mail ale bez @. Chyba jakiś błąd.

  18. Mikołaj Barczentewicz powiedział/a:

    W pierwszym komentarzu musiałeś wpisać e-mail w złe pole, bo w kolejnych jest wszystko OK.

  19. Kosmita powiedział/a:

    Udało mi się! Wiem gdzie zrobiłem błąd. Bo wklejałem opcję query_post(); przed ?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ? na stronie głównej “index” a nie na pasku bocznym w pożądanym miejscu. Jakby ktoś miał z tym problemy, niech wklei kod:

    ?php query_posts(’cat=1&showposts=2′); // dwa ostatnie posty z pierwszej kategorii
    if (have_posts()) : while (have_posts()) : the_post(); ?

  20. Kosmita powiedział/a:

    Oj. zrobiłęm próbę i okazuje się, że trzeba jeszcze coś dopisać, poza query_posts() i resztą wymienioną. A mianowicie (tam gdzie * trzeba wstawić ostry nawias przedni, gdzie # ostry nawias tylny - daję te zamienniki znaków, bo widzę że w moich poprzednich komentarzach znikały):

    *ul#
    *?php query_posts(’cat=1&showposts=2′); // dwa posty z pierwszej kategorii
    if (have_posts()) : while (have_posts()) : the_post(); ?#
    *li#*a href=”*?php the_permalink() ?#”#
    *?php the_title() ?#
    */a#*/li#
    *?php endwhile; endif; ?#
    */ul#

    Nie mam pojęcia dlaczego to działa (w końcu jestem lama, nie?) ale działa!

  21. Anarchista powiedział/a:

    PYTANIE 1:
    Czy istnieje możliwość, aby w przypadku ww. podziału kategorii pierwszy (dzięki Kosmito za kod, jest super!), najświeższy link był pogrubiony i z krótkim wstępem? Zastanawiam się nad uruchomieniem portalu niekomercyjnego opartego na WP. Tak jak to wygląda na Onecie czy Wirtualnej Polsce (czyli jeden news ze zdjęciem i krótki opis, a potem same tytuły innych nowości). Czy to mozliwe?

    PYTANIE 2:
    Co zrobić, aby na pierwsza strona wyglądała inaczej niż podstrony tematyczne? Tzn. aby np. na pierwszej stronie inaczej rozmieścić układ elementów strony (np. dodać wyszukiwarkę google, mapkę pogody, i jeden główny temat dnia, a pod spodem np. trzy kolumenki kategorii tematycznych? Bo na razie jak zmieniam wygląd szaty strony głównej to wszelkie zmiany widoczne są na podstronach. Jak zrobić osobny szablon strony, aby osobno była szata strony głównej a osobno szata strony tematycznej?

  22. Mikołaj Barczentewicz powiedział/a:

    Ad. 1. Oczywiście jest to możliwe. (Jeśli zna się PHP)

    Ad. 2. Kwestie theme’ów WP są szczegółowo opisane na codex.wordpress.org, jest to obszerna tematyka, więc tutaj tylko zasygnalizuję, że oczywiście wszystko o czym piszesz da się zrobić.

  23. Anarchista powiedział/a:

    Znalazłem super templatki Vertigo, które doskonale nadają się do mojego projektu po drobnej przeróbce. Ale mam kilka prostych problemów i prosiłbym o konkretną poradę (jeśli to nie kłopot):
    1. Co zrobić, żeby na stronie głównej nie pojawiał się pasek boczny? Albo żeby pasek boczny zawierał inne menu niż pasek na podstronach? (interesuje mnie to co łatwiej zrobić)
    2. Co zrobić, żeby na stronie głównej i na podstronach, nie pojawiała się treść wpisów, lecz sam tytuł z opisem? Dopiero po kliknięciu na artykuł pojawiłby się cały artykuł. Chodzi o wyłączenie pokazywania całego wpisu lub skrótu wpisu na stronie głównej i na podstronach.
    3. Jaki trzeba wpisać kod w php, aby na stronie głównej pojawiło się coś, co nie będzie pojawiać się na podstronach? Chodzi mi o mapkę pogody i przeglądarkę google.
    Nistety, z rady zaglądania do Codexu nie skorzystam, bo nie znam angielskiego. Chyba, że znasz adres polskiego tłumaczenia.

  24. Anarchista powiedział/a:

    Nie musisz odpisywac na poprzedni wpis. Już sobie poradziłem bo znalazłem odpowiednią templatkę oraz zrozumiałem, że “index” to nie jest strona startowa w WP, tylko jest nią “home” (idiotyzm, jakby podstrona nie mogła się nazywać np. index2″ a strona główna “index”?). Znalazłem też opcje opisów i podpatrzyłem kodowanie i nie mam problemów o któych wyżej pisałem. Dodałem mapkę pogody i przeglądarkę google. Ale mam dwie rzeczy, których nie potrafię przejść.

    1. Poszukuję pluginu do WP z możliwością dodawania nowych newsów przez nie zarejestrowanych użytkowników.
    Nie chcę udostępniać rejestracji, szukam takiego rozwiązania:
    - strona główna, link - dodaj newsa
    - użytkownikowi w nowym oknie otwiera się strona z edytorem oraz z możliwością przesyłania fotek na serwer, wyboru kategorii (lub dodania nowej) etc.
    - po wklepaniu newsa, oczekuje on na akceptację/edycję admina
    - no i jest aktywny
    Czy znasz jakiegoś odpowiedniego plugina?

    2. Chciałbym, aby pod opisem newsa pojawił się link “Czytaj więcej…” Na razie linkiem do całości jest tytuł, ale nie wszyscy internauci się połapią (zwłaszcza starsi). Czy jest jakas komenda php, która pozwala na taki link na końcu opisu?

    I to by było na tyle. Jak te problemy rozwiążę, będę mógł startować z niezależnym, anarchistycznym serwisem w stylu Indymediów. Pozdarwiam i liczę na odpowiedź.

  25. Mikołaj Barczentewicz powiedział/a:

    1. Usunąć < ?php get_sidebar(); ?>. (chociaż być może w tym themie jest to rozwiązane inaczej).

    2. Usunąć funkcję the_content() skąd jej nie chcemy.

    3. Tu nie trzeba specjalnego kodu PHP. Trzeba tylko wiedzieć, że za szablon dla strony głównej odpowiada index.php a dla innych stron są inne szablony.

  26. Anonymous powiedział/a:

    W górnym pasku menu (w nagłówku) umieściłem kategorie tematyczne serwisu. Jak się kliknie wchodzi się do kategorii i pojawiają się najświeższe wpisy. Szukam komendy, która pozwoliłaby mi nad wpisami umieścić nazwę kategorii. Aby użytkownik wiedział na jakiej podstronie tematycznej jest.

    No i ponawiam pytanie odnośnie formularza pozawlającego dodawać newsy niezarejestrowanym użytkownikom, które trafią do poczekalni na akceptację.

    Tutaj próbka nowego serwisu - na razie eksperymentalnie i bez nazwy (nad nazwą jeszcze myślę): http://informacje.dl.pl/

  27. Anarchista powiedział/a:

    Nie wiem, czy poprzedni wpis, sprzed chwili doszedł bo zapomniałem wpisać autora i e-mail (jakby co to go wywal).

    Mam dwa pytania: jak zrobić by po kliknięciu w kategorię tematyczną pojawił się napis tytułowy kategorii tematycznej? Aby użytkownik wiedział na której podstronie jest.

    Ponawiam zapytanie o wtyczkę lub coś, co pozwoliłoby mi stworzyć formularz dodawania newsów dla niezarejestrowanych użytkowników, które przed opublikowaniem trafiałyby do poczekalni na akceptację.

    Tutaj adres roboczy mojego niekomercyjnego serwisu: http://informacje.dl.pl/

  28. R powiedział/a:

    A w jaki sposób zrobić, zeby na stronie głównej wyświetlały się posty ze wszystkich kategorii, za wyjątkiem jednej, wybranej kategorii?

  29. egi powiedział/a:

    Mam prosbe co zrobic aby wpisane przez odwiedzajacych komentarze (wypowiedzi) byly odrazu widoczne tak jak u ciebie? U mnie jest tak ,ze trzeba kliknac w
    np. “jest 1 komentarz” zeby go przeczytać

  30. MARYSIA powiedział/a:

    Nic z tego nie rozumiem a tak bardzo potrzebuję mieć posty podzielone na kategorie. Proszę niech ktoś mi to jakoś wytłumazy. Bo ja nie wiem jak to trzeba zrobi. Proszę :(

  31. MARYSIA powiedział/a:

    Proszę napiszcie mi jak to mam zrobić, bo ja tego nie rozumiem. Proszę

  32. MARYSIA powiedział/a:

    Napiszccie to jakoś bardziej zrozumiale. Proszę napiszcie bardzo tego potrzebuję!!!!

  33. Jachu powiedział/a:

    Świetna porada. Wszedzie szukałem coś na ten temat, a tu jest wszystko, szybko i konkretnie.

  34. ptr powiedział/a:

    Porada rewelacja, a wie ktoś jak wyświetlić 6 wpisów zaczynając od czwartego aby po zmianie strony na dole 1,2,3,4 zmieniały się tez wpisy ponieważ teraz mam ale wyświetla mi się cały czas te same wpisy

Pozostaw komentarz

Możesz używać tych tagów XHTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>