Artykuły:

  • data publikacji: 25.03.2009

    Query_posts, czyli jak ujarzmić loopa część 1.

    kategoria: Wordpress autor: palmiak

    Query_posts, czyli jak ujarzmić loopa część 1.

    WordPress, wbrew temu co myśli o nim wiele osób, od długiego czasu nie służy tylko do blogów. Chociażby dzięki funkcji query_posts(), możemy zachęcić naszego WordPressa do wyświetlania tylko tych wpisów które chcemy zobaczyć. W tym wpisie postaram się przedstawić Wam kilka przykładów zastosowania tej funkcji.

    The Loop w wersji podstawowej

    Loop to nic innego jak pętla, dzięki której wyświetlane są wpisy. Do zastosowań blogowych najczęściej wystarcza jej podstawowa forma, czyli:

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    nasz wpis
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>

    Oczywiście jest tego kilka drobnych modyfikacji, ale sprowadza się to wszystko właśnie do tego. Dzięki temu kodowi WP wypisuje albo najnowsze wpisy (strona główna), albo wpisy z poszczególnej kategorii (archiwa) etc.

    Kategorie

    Załóżmy, że nie chcemy aby na stronie głównej pokazywały nam się wpisy z kategorii o ID=3. By to zrobić wystarczy skorzystać z funkcji query_posts() na index.php:

    <?php query_posts('cat=-3'); ?>

    <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>
    nasz wpis
    <?php endwhile; else: ?>
    <p><?php _e('Sorry, no posts matched your criteria.'); ?></p>
    <?php endif; ?>
     

    Jak łatwo zauważyć query_posts() umieszczamy przed loopem, a całą resztą zajmują się argumenty tej funkcji. W naszym przypadku cat=-3. Analogicznie, jeżeli chcemy wyświetlić tylko wpisy z kategorii o ID=3 to piszemy cat=3.

    A co jeżeli nie chcemy, żeby userzy widzieli kategorię o ID'ach 2,3,4? cat=-2,-3,-4.

    Utrudnijmy sobie teraz zadanie i spróbujmy wyświetlić wpisy z kategorii o ID=7 z roku 2007. cat=7&year=2007.

    Jak ktoś ma ochotę może jeszcze spróbować pobawić się z kolejnością wyświetlania dodając order=ASC|DESC. Jak już jesteśmy przy kolejności warto też wiedzieć po czym sortujemy. Jeżeli byśmy chcieli posortować alfabetycznie wpisy byśmy musieli napisać: order=ASC&orderby=title. Jeżeli byśmy chcieli wypisać kilka losowych postów korzystamy z orderby=rand.

    Nic nie stoi nam też na drodze, by zamiast ID kategorii korzystać z jej nazwy - category_name=wordpress. Nietrudno się domyślić co to zrobi.

    Na koniec pewien rarytasik. Bardzo przydatny, jeżeli chcemy zrobić zaawansowaną wyszukiwarkę. Załóżmy, że chcemy wyświetlić wpisy, które są jednocześnie w kategorii o ID=2 i o ID=7. Można oczywiście bawić się w pisanie zapytań SQLowych, jednak można prościej - array('category__and' => array(2,7)).

    Z kategoriami umiemy już prawie wszystko. Przedstawię Wam jeszcze cztery przydatne opcje:

    Offset służy do pominięcia określonej przez nas liczby wpisów. Przydaje się to kiedy robimy dwa loopy na stronie. W pierwszym wyświetliliśmy 2 wpisy, więc w drugim warto by było je pominąć. Żeby to zrobić wystarczy napisać offset=2 i już.

    Posts_per_page - jak sama nazwa mówi - określamy ile wpisów ma być wyświetlonych na stronie. Nadpisuje to naszą defaultową wartość, którą podaliśmy w panelu administracyjnym.

    Showposts - wyświetla określoną liczbę wpisów. Chcemy pokazać trzy wpisy to piszemy showposts=3.

    Paged - służy do wyświetlenia wpisów z określonej strony. Jeżeli mamy np. 10 wpisów, na każdej stronie pokazują się 3 to pisząc paged=2 pokażą się wpisy nr 4,5 i 6.

    Pojedyncze wpisy, strony

    Bez zbędnego owijania w bawełnę. Jeżeli chcemy pokazać wpis o ID=666 to korzystamy z p=666. Możemy też odwołać się za pomocą nazwy name=tytul.

    Gdy chcemy wyświetlić konkretną stronę (tym razem ID=777) to korzystamy z page_id=777 lub (jeżeli wolimy nazwę) pagename=wpis.

    Przy okazji warto zapoznać się z tym co napisał Szymon a'propos wymuszenia wyświetlania zajawek. Z własnego doświadczenia mogę powiedzieć, że się to bardzo często łączy wyświetlaniem pojedynczego wpisu czy strony za pomocą loopa.

    Autorzy

    Na zakończenie troszkę o wyświetlaniu wpisów danego autora. Gdybym chciał pokazać swoje wpisy to po prostu piszę author=1 (bo takiego mam ID'a) lub author_name=palmiak. Oczywiście możemy to poszerzyć o sortowania, ilość wpisów etc etc. Nie będę jednak tego powtarzał.

    Podsumowanie

    Jak wspominałem na początku - WP naprawdę ma duże możliwości i może służyć jako mały/średni CMS. Jak widzicie po powyższym wpisy można wypisywać na wiele różnych sposobów - wg daty, tytułu, losowo, tylko określonego autora. Nic nie stoi także na przeszkodzie, żeby za pomocą php dopisać do tego dodatkową funkcjonalność. Zapraszam więc do odpalenia WP i eksperymentów - dopiero wtedy zobaczycie z czym to się je.

    W kolejnej części skupię się głównie na tagach oraz custom_fields'ach.

    ps. jak widzicie ostatnio troszkę mało rzeczy się ukazuje - po prostu też drobny kryzys nas trafił. Mam nadzieję, że niebawem sytuacja się poprawi i powrócimy do starego trybu publikacji. Ciągle jednak żyjemy i mamy się dobrze.

    Udostępnij ten artykuł:
    • Print
    • Digg
    • del.icio.us
    • Facebook
    • Mixx
    • Google Bookmarks
    • Gwar
    • RSS
    • Technorati
    • Twitter
    • Wykop

  • 108 Responses to “Query_posts, czyli jak ujarzmić loopa część 1.”

    1. KMO pisze:

      Ciekawy artykuł ;)
      Na pewno się przyda

      • Griselda pisze:

        Merci pour cet article. C'est tout ce que je peux dire. Vous avez très certainement fait ce blog en quelque chose de spécial. Vous savez bien ce que vous faites, vous avez couvert bases.Thanks tellement!

    2. piecuch pisze:

      czekam na 2 część ;-)

    3. tomek pisze:

      A czy istnieje możliwość wyświetlenia stron albo kategorii podrzędnych, można tak array(’category__and’ => array(2,7)) ale chodzi mi o to żeby po dodaniu podkategorii nie trzeba było dopisywać jej do szablonu a parametr child_of to chyba w tym przypadku nie działa.

    4. yasc pisze:

      a jaka funkcja odpowiada za niewyświetlanie postów z danej kategorii?

    5. palmiak pisze:

      Jest napisane. cat=-ID (po prostu minusik stawiasz przed ID kategorii i już)

    6. Burger pisze:

      Gdy dam

      wyświetlaja mi się wpisy z różwnych kategorii.

      A gdy nie napisz minusa czyli

      wszystko jest ok, tylko wyświetla się 6 wpisów (ustawione by po tyle się wyświetlało) i jest link do starszych wpisów, a na tej następnej stronie te same wpisy…

    7. Burger pisze:

      oj, uciekł kod

      Gdy dam

      ?php query_posts('cat=-16'); ?

      [...] czyli

      ?php query_posts('cat=16'); ?

      [...]

    8. Burger pisze:

      yasc, cat=-2,-3,-4

      pomijasz tą której nie chcesz ;)

    9. To powiedzcie mi jeszcze tylko jak zrobić coś takiego:
      - najpierw miejsce na wyróżniony artykuł (ostatni wpis z wyróżnionej kategorii), czyli cat=3&showposts=1
      - niżej (drugi loop) na stronie głównej reszta artykułów z wyłączeniem tego JEDNEGO wyróżnionego, czyli cat=-3&……… ?

      Po prostu nie chcę, żeby wyróżniony art pojawiał się dwa razy na stronie głównej ale reszta artów z wyróżnionej kategorii ma się pojawiać.

      Wszystko dotyczy TYLKO strony głównej – na /page/2/ itd ma być wszystko standardowo :)

      Proszę o pomoc, bo kombinuję i nic :/

    10. Do tego zauważyłem, że na każdej podstronie (/page/x/) mam taką samą zawartość :/

    11. palmiak pisze:

      Tak na szybko z pracy.

      Najpierw tak jak zrobiłeś. czyli cat=3&showposts=1 potem zaś cat=3&offset=1(by przeskoczyć ten pierwszy)&posts_per_page=10(ilość wpisów na podstronie).

      Powinno być wtedy ok.

    12. Burger pisze:

      Jednakże problem z tą samą zawartością na każdej stronie zostaje…

    13. palmiak pisze:

      Sprawdziłem. Nie działa. Tzn wystarczy dopisać paged=$paged, czy w sumie:

      query_posts(“cat=3&offset=1&posts_per_page=10&paged=$paged”);

    14. Burger pisze:

      Mi to nie działa, wpisy nadal te same.
      Skontaktuj się ze mną przez email

    15. palmiak pisze:

      Kontakt mailowy kontaktem mailowym, ale warto by było ustalić co nie działa. Powiedz mi czy skopiowałeś to co napisałem czy przepisałeś ręcznie? Bo jeżeli to pierwsze to muszę zastrzelić WP, za używanie tych cudzysłowów zamiast normalnych. Po prostu napisz zwykłe cudzysłowy zamiast tego na co wp zamienia.

    16. Burger pisze:

      Zawsze poprawiam kod
      ma tak
      ?php query_posts(‘cat=3&posts_per_page=3&paged=$paged’); ?

      chciałbym ci dać link, ale tu nie moge, ponieważ projekt nie może zostać jeszcze ujawniony :)

    17. palmiak pisze:

      Już widze błąd. Normalny cudzysłów czyli ” a nie ‘ inaczej php nie wie, że $paged to zmienna tylko myśli, że to kawałek tekstu.

    18. ‘cat=3&posts_per_page=3&paged=$paged’ ? w drugim loopie chce mieć wszystkie wpisy poza tym jednym jedynym, który pojawi się w pierwszym loopie…. :(

    19. Napisałeś:

      Najpierw tak jak zrobiłeś. czyli cat=3&showposts=1 potem zaś cat=3&offset=1(by przeskoczyć ten pierwszy)&posts_per_page=10(ilość wpisów na podstronie).

      To da mi takie efekt: najpierw (to co zrobiłem w 1 loopie) będę miał 1 wpis z katID 3. później będę miał (to co Ty napisałeś) 10 wpisów z katID 3 z pominięciem tego pierwszego…

      A mi chodzi o to, żeby 1 loop byl tylko na stronie głównej i pokazywał ostatni wpis z katID 3, natomiast 2 loop ma pokazywać normalnie wszystkie wpisy z całego bloga (wszystkie kategorie) z pominięciem tego jednego wpisu z 1 loopa (najlepiej gdyby był pomijany tylko jeżeli miałby się dublować na stronie głównej).

      ps. szkoda, że nie ma powiadomień o odpowiedzi :P

      • miego pisze:

        u mnie działa coś takiego, parametry query post sobie dobierz sam:

        <!– pierwsza pętla –>
        <?php
        $temp = $wp_query;
        $wp_query= null;
        $wp_query = new WP_Query();
        $wp_query->query('cat=3&showposts=1'.'&paged='.$paged);
        ?>

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

        <?php endwhile; ?>

        <?php $wp_query = null; $wp_query = $temp;?>

        <!– koniec pierwszej petli –>

        <!– druga pętla –>
        <?php
        $temp = $wp_query;
        $wp_query= null;
        $wp_query = new WP_Query();
        $wp_query->query('cat=3&showposts=1'.'&paged='.$paged);
        ?>

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

        <?php endwhile; ?>

        <?php $wp_query = null; $wp_query = $temp;?>

        <!– koniec drugiej petli –>

    20. agressiva pisze:

      “ps. szkoda, że nie ma powiadomień o odpowiedzi ” – moze niedlugo sie pojawią ;)

    21. Burger pisze:

      Dzięki palmiak, działa teraz.
      Ale zauważyłem jeszcze jeden problem, gdy dam !-more– w poście, to tekst przed tym znacznikiem się nie wyświetla w ogóle.

    22. Burger pisze:

      Poradziłem sobie, wszystko gra :)

    23. Adrian pisze:

      Super wpis, właśnie tego mi było trzeba.

    24. Flacktub pisze:

      Może ktoś powiedzieć jak wyświetlić same tematy postów w danej kategorii ? (i najlepiej żeby można było je jakoś posegregować, np najczęściej czytane, oraz ustalić ich liczbę)
      Jest w ogóle jakiś spis funkcji php do wp ?

      • palmiak pisze:

        Spisu funkcji poszukaj na codex.wordpress.org.

        Co do pierwszego to w query post dajesz która kategoria Cię interesuje oraz showposts=-1 (wyświetli wszystkie wpisy) a w loopie wyświetlasz tylko the_title() i już.

        Żeby ustalić ich liczbę po prostu tworzysz sobie zmienną pomocniczą i inkrementujesz co wyświetlenie title.

        Najczęściej czytane musisz rozwiąząć za pomocą wtyczek.

    25. Tomek pisze:

      Bardzo pomocny post. Jestem poczatkujacym uzytkownikiem WP, jednak nie mam wielkiego pojecia o PHP, staram sie ogranac wszystko “na logike”.

      Wiem juz jak wyswietlic posty z konkretnej kategorii. Moje pytanie jest nastepujace:
      Jak wyswietlic jedna kategorie na jednej stronie (innej niz glowna)? I przy okazji pominac ta kategorie na str. glownej? Najlepiej jeszcze, zeby dalo sie zrobic RSS do kazdej (albo chociaz kilku) kategorii.

      prosze o pomoc
      pozdrawiam

    26. [...] czyli jak ujarzmić loopa część 1. | Vivee – wordpress, webmastering, grafika i fotografia vivee.info/…ry_posts-czyli-jak-ujarzm… Pokaż reakcje /* */ inne strony z tej witryny + obserwuj co [...]

    27. egipt wakacje pisze:

      Bardzo dobry poradnik. Praktycznie bez zadnej znajomosci php udalo mi sie osiagnac taki efekt, ze posty na stronie glownej wyswietlaja sie losowo:) Wczesniej szukalem roznych pluginow na stronie WordPress ale nic nie znalazlem, a tutaj takie proste rozwiazanie zalatwilo sprawe :) Dzieki :)

    28. michelpollard26 pisze:

      This was really a helpful post for me .Thanks a lot for sharing such a nice post in this blog. I had also bookmarked this post for my future use. Thanks a lot!portable swimming pools

    29. The information in this blog was very interesting and it was very useful for me. I had liked the stuff very much. Thanks a lot!secure weightloss pills reviews

    30. It is great to see the informative stuff in this blog. I had really liked it very much. Thanks a lot for the lovely site. I found it very interesting.

    31. web cialis pisze:

      Wow!!! What a post it is!!! I have never been to this website ever before. Have never seen it before, thanks for the blog post guys!!!online diabetes pills journal

    32. diabetiedtes pisze:

      Once go through this site, which is very interesting and helpful. I assure you people it is one of the best site I ever had gone through that has good information about what you are looking for.overweight subjects

    33. first viagra pisze:

      One of my friends suggested me about this site which she found interesting, and when I opened the site I also found it interesting and beneficial and recommended few of my family members to go through it.diet side effects news

    34. Wow! You guys are amazing and do a good job by providing some good content in this particular website. I hope everybody will make a visit to this website and read the content as it is helpful for some extent.

    35. alex777 pisze:

      .InterestingI layout on your blog. I really enjoyed reading it and also I will be back to read more in the future
      >,credit repair,credit problems

    36. This is a great blog with excellent posts and links.
      Thanks for sharing.

    37. insanity pisze:

      Pętla będzie zawsze jak pętla. Wpisy są faktycznie wyświetlane na tej pętli.

    38. SpyBubble pisze:

      I was looking around for a blog on this topic and stumbled acros your site on google… I am quite interested and I bookmarked it and will be back to check it out some more later

    39. Bronek pisze:

      Hej, a w jaki sposob wyswietlic np. 3 ostatnie wpisy (dowolna cat) i strony? Tzn, by system nie rozroznial czy to post czy page – a jedynie listowal trzy najswiezsze?

    40. I would just like to add that if you wanted to sort the entries alphabetically you have to write: order = ASC & order by = title.

    41. webhosting pisze:

      I often like surfing on net and find info on new things and this time I got a new website which has great info and is quite brilliantly written. Am just thrilled and excited to see this and hope to see more work of you people in future.
      webhostin reviews rated

    42. You guys are really wonderful who search and bring such a wonderful info, I am glad to see this time also a useful stuff that had inspired me. Thanks a lot do keep giving us genuine stuff
      webhosting tips guide

    43. I enjoy reading the post and have become a great fan of yours. Keep up with the good job and please provide us with great blogs. I really appreciate the research you people take for the posts.
      webhosting unlimited info

    44. It was perfect collection of such useful information. This was a helpful post foe me. Thanks for sharing such nice information. Thanks a lot!
      webhosting unlimited reviews

    45. newsa rchives pisze:

      I was a great experience to read your post. I found your site from Google and thank a lot for this nice and wonderful information. The information posted was useful and interesting.
      webhost news articles

    46. This is such a nice and interesting blog! So much information you have shared. Thank you for posting!

      • Jesica Hasan pisze:

        Hi, There is obviously a lot to know about this. I think you made some good points.this is very useful information. I actually appreciate your own position and I will be sure to come back here.
        Robert@driving lessons leeds

    47. WordPress jest zgodny w dostarczaniu nam użytkowników z wielkim funkcji. I rzeczywiście, jak ich tematów.

    48. backlinks pisze:

      Takie istotne informacje przekazał. Spędziłem więcej czasu na czytanie tego bloga porównać z innych stron blog internetowych. Zastanawiam się, czy można opublikować więcej na ten temat.

    49. Można kontynuować na tworzeniu świetnie świetnie napisane artykuły, które specyficznie pobudza obywateli do siebie na górę oceniony. To fascynujące! To wspaniale, aby dowiedzieć się, że istnieje użytkownik, który myśli, jak również prace bardzo. Świetną robotę!

    50. bany1236 pisze:

      Dziękujemy! Zawsze chciałem napisać coś w moim miejscu w tym stylu. Czy mogę wziąć udział swojego posta na moim blogu? seragam

    51. Jasmine Miranda pisze:

      Ciekawe i właściwej stronie. Byłem tak zadowolony, że odwiedziły tę witrynę. Mam nadzieję, że będziesz udział w tym artykule pokrewnym.relocation services

    52. But what you probably don’t know is that there is a quick way to see all WordPress options on one screen. Even those that aren’t accessible through the Options menu interface. And not only that, but you can even edit all those options at once.

    53. Andrea Stevenson pisze:

      Wordpress has been a great deal in my work. I prefer to use than spend my money to a low quality one.prostate cancer treatment

    54. Wordpress jest dobrym narzędziem online .. jest ono używane przez wielu użytkowników online. Jest znany z dobrej jakości i każdy może powiedzieć, jak to jest korzystne.

    55. Ashley Meyer pisze:

      Wordpress jest rzeczywiście nie tylko blogi, zgadzam się. Ale większość ludzi będzie korzystać z tego czysto w blogach, ponieważ jest to bardziej wiarygodne.Cursos ingles extranjero

    56. p90x diet pisze:

      Thanks for presenting those codes and for you r discussions. I can use those information in the future..-)

    57. Krzysiek pisze:

      A jeśli bym chciał wyświetlić kilka podstron , gdzie rodzicem jest jakaś inna strona…?

    58. seragam pisze:

      I agree with your conclusions and will eagerly look forward to your incoming updates. Just saying thanks will not just be adequate, for the wonderful clarity in your writing.It is imperative that we read blog post very carefully. I am already done it and find that this post is really amazing
      seragam
      seragam sekolah
      pria terganteng didunia
      pria paling ganteng secianjur
      cowok keren

    59. puerto banus hen is very interesting and helpful………..

    60. Charlene pisze:

      By means of assessing this trendy web page, I can tell whether a web page is building a good and fine topic for debate. Reading the entire article, I’m significantly pleased and happy to assert you’re one of them who make the most efficient blog pages which I've been to.bed bug bite treatment

    Leave a Reply

Komentarze

Kategorie

Top 10

  • CMSy Artykuły dotyczące różnego rodzaju systemów zarządzania treścią CMS.
  • Flash Podstawowe informacje pomocne przy tworzeniu animacji w Adobe Flash.
  • Fotografia Samouczki dotyczące nie tylko robienia zdjęć ale też ich cyfrowej obróbki.
  • Grafika Ogólnie pojęta grafika komputerowa, od inspiracji, po tworzenie layoutów oraz mniejszych form graficznych.
  • Inne tutoriale wordpressowe Wszystkie inne zagadnienia dotyczące WordPressa.
  • Inspiracje Inspirujące materiały graficzne z dziedziny projektowania stron www, projektów DTP, digital painting, itp.
  • Obróbka zdjęć Techniki retuszu fotografii cyfrowych.
  • Rysunek Tworzenie rysowanych ilustracji w Adobe Photoshop.
  • Skóry do Wordpressa Darmowe oraz płatne – najlepsze skóry do WordPressa.
  • Skrypty client-side
  • Skrypty server-side
  • Tutoriale
  • Webdesign Tutoriale z zakresu projektowania stron www i grafiki użytkowej na rzecz internetu.
  • Wieczór z Open Source
  • Wordpress Ulubieniec naszej publiczności CMS WordPress: nowości, tricki, wtyczki, skóry i wszystko to co może przydać się przy korzystaniu z tego systemu.
  • Wtyczki do Wordpressa Recenzje oraz instrukcje najbardziej popularnych i najbardziej niezbędnych pluginów do WordPressa.
  • XHTML/CSS Ciekawostki z dziedziny kodowania stron www: XHTML, CSS, jQuery.

Najnowsze newsy

Wieczór z Open Source 2010

Jak co roku WSINF organizuje konferencję Wieczór z Open Source.
Chciałbym zaprosić was na tegoroczna konferencję Wieczór z Open Source 2010! Czytaj dalej

Grafart.org i WACOM zapraszają na konkursy!

Witam!

Myślę, że czas najwyższy nadmienić, że za niedługi czas zostanie zorganizowany pierwszy z trzech konkursów, w których główną nagrodą będą tablety firmy WACOM!
Za miejsca drugie oraz trzecie nagrodami będą kubki i koszulki firmy WACOM oraz magazyny graficzne PSD PHOTOSHOP oraz COMPUTERARTS.
Czytaj dalej

Zapraszamy na forum graficzne Graffika.pl

Każda osoba interesująca się grafiką komputerową ma czasami ochotę porozmawiać o swoich pracach, posłuchać rad, krytyki i pochwał innych osób. Idealnym miejscem na realizowanie takich potrzeb jest forum graficzne Graffika.pl.
Czytaj dalej

Polecane strony

  • No bookmarks avaliable.