-
data publikacji: 25.03.2009
Query_posts, czyli jak ujarzmić loopa część 1.
kategoria: Wordpress autor: palmiak
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()naindex.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 przypadkucat=-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 zorderby=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=2i 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ą nazwyname=tytul.Gdy chcemy wyświetlić konkretną stronę (tym razem ID=777) to korzystamy z
page_id=777lub (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) lubauthor_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.
-
28 Responses to “Query_posts, czyli jak ujarzmić loopa część 1.”
Leave a Reply
Komentarze
Kategorie
Top 10
JereManU: 20 darmowych skór do Wordpressa cz.2
Igor: Zapraszamy na forum graficzne Graffika.pl
Maciek Bielski: O wyświetlaniu podstron w Wordpress
mateuzs: Silverstripe
agressiva: Zapraszamy na forum graficzne Graffika.pl
Flacktub: Zapraszamy na forum graficzne Graffika.pl
kamil: Kurs Flash cz.1 – podstawy
Astro: qTranslate – Wielojęzyczny wordpress
feniks: Portfolio graficzne oparte o Wordpress przy użyciu Custom Fields
matiz: Menu akordeonowe z odrobiną CSS3
- 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.
- 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
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
Przypominamy o Konkursie Noworocznym
Wraz z nowym, 2010 rokiem ogłosiliśmy konkurs na tutorial o tematyce CMS-owej.
Mamy nadzieję, że jakieś prace zostaną nadesłane do końca terminu i znajdzie się zwycięzca w pierwszym naszym oficjalnym konkursie z nagrodami.
Zachęcamy wszystkich do spróbowania swoich sił.
Szczegóły dostępne są pod tym adresem: http://vivee.info/2010/01/01/konkurs-noworoczny/
Zareklamuj nas :)
Jako, że pojawiła się na vivee.info nowa skóra przygotowałam nasze firmowe banerki reklamowe. Osoby, które wyrażą chęć wsparcia nas reklamą u siebie na blogach lub innych serwisach mogą pobrać je poniżej. Czytaj dalej
Polecane strony
- WordPress Theme from Scratch – Day 1: PSD
- 20 Tutorials For Creating HDR Images
- Ask the Expert – Using Wordpress to Build Large Scale Websites with Derek Herman
- Making an Interactive Picture with jQuery
- Create a Horizontal Scrolling Website
- 800 Most Wanted Free RSS Icons for Bloggers
- 45 Most Wanted Beautiful Free Hand Drawn Fonts
- Caffe-Break Themed Blog Layout Photoshop Tutorial
- Create a nature inspired layout in photoshop
- Coding a Web Design for Speed and Quality
- Beautiful Hand Drawn Websites | Abduzeedo | Graphic Design Inspiration and Photoshop Tutorials
- 40 Fresh Creative and Inspiring Photographs
- Wordpress portfolio layout | Grafpedia
- Simple Facial Photo Retouching | Grafpedia
- Create a beauty layout in 10 steps | Grafpedia























Ciekawy artykuł
Na pewno się przyda
czekam na 2 część
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.
a jaka funkcja odpowiada za niewyświetlanie postów z danej kategorii?
Jest napisane. cat=-ID (po prostu minusik stawiasz przed ID kategorii i już)
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…
oj, uciekł kod
Gdy dam
?php query_posts(‘cat=-16′); ?
[...] czyli
?php query_posts(‘cat=16′); ?
[...]
yasc, cat=-2,-3,-4
pomijasz tą której nie chcesz
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 :/
Do tego zauważyłem, że na każdej podstronie (/page/x/) mam taką samą zawartość :/
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.
Jednakże problem z tą samą zawartością na każdej stronie zostaje…
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”);
Mi to nie działa, wpisy nadal te same.
Skontaktuj się ze mną przez email
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.
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
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.
‘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….
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
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 –>
“ps. szkoda, że nie ma powiadomień o odpowiedzi ” – moze niedlugo sie pojawią
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.
Poradziłem sobie, wszystko gra
Super wpis, właśnie tego mi było trzeba.
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 ?
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.
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
[...] 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 [...]