Zmiana sposobu wyświetlania kolejnych wpisów [WordPress-o-logia]
Kilka dni temu Piotrek (blog.marqu.pl) napisał mi następującego maila:
Słuchaj, mam pytanie. Jak zrobić tak jak jest u Ciebie, że pierwszy wpis wyświetlony jest z rozwinięciem a pozostałe wpisy są skrócone bardzo. Chciałbym tak zrobić u siebie, że 1 wpis ten najnowszy jest zdjęcie (może być za pomocą pól użytkownika), a reszta tak jak u mnie sam tytuł…
Oto jeden ze sposobów:
1. Pętla WordPress
Na początek gorąco polecam wpis Wojciecha Usarzewicza (Pliki szablonów WordPressa – część 3 – Głębsze spojrzenie na pętlę) opisującego samą pętlę WordPress, której znajomość będzie potrzebna by wykonać zadanie.
Tu powiem tylko, że pętla jest tą częścią silnika WordPress, która jest odpowiedzialna za wyświetlanie wpisów. Nazwa bierze się stąd, że dla każdego wpisu, który ma być wyświetlany na danej stronie WordPress przechodzi przez ten sam kawałek kodu (czyli jakby zapętla się). Podstawowa pętla wygląda następująco:
<?php if (have_posts()) : while (have_posts()) : the_post(); ?>
+++ To co będzie wyświetlane
<?php endwhile; ?>
<?php endif; ?>
Dosłownie:
- jeśli są jakieś wpisy do wyświetlenia tzn. jest ich więcej niż 0 (… if …)
- dopóki są jakieś wpisy do wyświetlenia tzn. dla każdego wpisu, który tam jest (… while …)
- Pobierz dane wpisu tzn. wczytaj tytuł, treść, obrazki i czekaj aż ci powiem co z nimi robić (… the_post…)
+++ To co każemy WordPress zrobić piszemy tu
- tu kończymy to, co ma się dziać dla każdego wpisu (… endwhile …)
- tu kończymy to, co ma się zdarzyć gdy w ogóle są jakieś wpisy (… endif …)
2. Wstawiamy licznik wpisów
Aby móc wykonać czynność dla np. pierwszego, trzeciego lub dziesiątego wpisu potrzebujemy licznik. W wersji pierwotnej WordPress zwyczajnie przechodzi przez pętlę ileśtam razy, ale nie wie który akurat kolejny wpis jest wyświetlany. Trzeba to zmienić:
<?php $i = 1; if (have_posts()) : while (have_posts()) : the_post(); ?>
+++ To co będzie wyświetlane
<?php $i++; endwhile; ?>
<?php endif; ?>
Dosłownie:
- $i będzie naszym licznikiem, a $i = 1 oznacza, że początkowo licznik ustawiony jest na jeden
…
- $i++ oznacza tyle, co „w tym momencie zwiększ wartość licznika $i o jeden”
Teraz za każdym razem gdy WordPress wyświetla wpis na stronie głównej wartość $i wzrasta. Jedyne czego teraz potrzebujemy to skorzystać z danych licznika.
3. korzystamy z licznika
Korzystanie z danych licznika odbywa się podobnie jak wyświetlanie wpisów w WordPress
<?php $i = 1; if (have_posts()) : while (have_posts()) : the_post(); ?>
<?php if($i == 1) : ?>
+++ To co będzie wyświetlane jeśli jest to pierwszy wpis
<?php elseif($i == 2) : ?>
+++ wyświetlane jeśli jest to drugi wpis
<?php else : ?>
+++ wyświetlane jeśli jest to kolejny wpis
<?php endif; ?>
<?php $i++; endwhile; ?>
<?php endif; ?>
4. koniec
W ten sposób możemy nie tylko wyświetlać kolejne wpisy w różny sposób, ale też zmieniać tło w co drugim wpisie. Wstawiać kod AdSense tylko dla wybranej liczby wpisów, definiować różne style css dla kolejnych odsłon itp. Zaawansowanym polecam np. bardzo ciekawy wpis na kminek.pl (WordPress: Jak nadać odmienny styl wpisom z konkretnej kategorii lub konkretnego autora?). Dość powiedzieć, że w opisany wyżej sposób wyświetlane są strona główna i wyniki szukania (twórcze rozwinięcie tematu) na tym blogu.
Korzystacie z podobnego rozwiązania? Dajcie odnośniki :)
- Dodaj
kanał rss
do swojego czytnika - Skorzystaj z
adresu trackback - Prenumeruj
kanał komentarzy

Kommentarze: 30 »
pewnie z tego kiedyś skorzystam, bo już kiedyś chciałem coś takiego zrobić ;)
PS. wymiotłeś z cieniem przy szukajce ;)
Loooool :) – Dzieki, kilka godzin siedziałem nad tym paskiem…
no, ale się opłacało bo wygląda teraz lepiej
Ale tan niebieski pasek na stałe przyklejony do góry ekratu jest rozwalony na wszystkich stronach (nie wpisach) np o blogu. U mnie FF3 między nim a krawędzią jest margines na całą jego wysokość.
Dzięki – jeszcze do dopracowania ten element – na razie wyłączyłem go :). Problemy w IE6 i Fx3
u mnie na chromie działał dobrze ;p
Dzieki za informacje :) – akurat chrome nie mam. Tylko Fx 2,3 + IE6,7. Widać wymaga jeszczcze dopracowania w różnych przegladarkach, więc chwilowo zdejmuję.
A ja na swoich blogach korzystam z autorskich wtyczek pokazujących pierwszy wpis w całości oraz dodających reklamy w odpowiednich miejscach (jak np ‘tag’ more czy inny kod, planuję także losowe dodawanie) ;)
Dobra rzecz taka wtyczka, ułatwia zycie :)
Ale obciąża WordPressa. :P
Wielkie dzięki za ten wpis. Dziękuje serdecznie za tak szybką odpowiedź. Pozdrawiam :)
Proszę bardzo – Troche smutno u ciebie bez chociażby jednego zdjęcia na stronie głównej :)
to samo można uzyskać manipulując parametrami query_posts()
i tak:
pierwszy:
query_posts('showposts=1');następne 9:
query_posts('showposts=9&offset=1');zresztą polecam dokumentację, bo można naprawdę wyciągać posty w ciekawy sposób:
http://codex.wordpress.org/Template_Tags/query_posts
Miodzio, dziękuję Marcin. Na Ciebie zawsze można liczyć :).
Słodko. Jeszcze troszkę i się rozpłynę. Dziękuje.
Hmm nie robil bym tego za pomoca 2 query_posts – po co pisac dwie petle i generowac dwa zapytania? Lepiej zrobic to w jednej tak jak pisze Lukasz.
Dzieki za linka ;)
np. :)
Ja to mam refleks, nie ma co…
Ale wracając do tematu – i tak generowane jest tylko jedno zapytanie, niezależnie od ilości wywołań tej funkcji. Więc z punktu widzenia wydajności powinno być podobnie, i tylko od gustów autora skórki zależy, z którego rozwiązania skorzysta… :)
Gwoli ścisłości – w tekście powołujesz się na tekst z WPNinja ale nie ja jestem jego autorem tylko Riff :-).
Najmocniej przepraszam i już poprawiam :)
Ja nie wiem jak Ty to robisz, że każda poprawka graficzna sprawia, że ten blog wygląda jeszcze lepiej :)
Wpis bardzo przydatny, szukałem czegoś takiego ostatnio.
Dziekuję i mam nadzieję, że się przyda :). Korzystam ze sposobu pt. „krok-po-kroku”. Jest troche pracochłonny, ale daje dobre efekty.
[...] Zmiana sposobu wyświetlania kolejnych wpisów [WordPress-o-logia] [...]
Przyda się! Nie wiem czemu dopiero teraz to znalazłem :)
BTW jakoś tak milej i lżej dla oka teraz :)
Że niby jak? Cała szata mi się tu rozjeżdża, a ty mówisz, że milej dla oka? No dobra, o gustach się nie dyskutuje :)
Mi się nic nie rozjeżdza… Pod FF i chyba pod Operą też.
Za to mój blog wyświetla się poprawnie tylko pod FF. IE i Opera coś knocą z headerem… Nie znam się na standardach :P
O rany, rzeczywiście – i jak ta strona ma się poprawnie wyświetlać? Zobacz sobie tu:
http://validator.w3.org/check?uri=http%3A%2F%2Fjacek.kruzycki.pl%2F&charset=%28detect+automatically%29&doctype=Inline&group=0&user-agent=W3C_Validator%2F1.654
Poprawiłem z 49 Errors, 6 warning(s) na 24 Errors, 6 warning(s) :)
Ale theme mi się dalej rozwala – widocznie coś w css usunąłem lub przeoczyłem :/
Najwidoczniej coś w tych pozostałych 24 powoduje zakłócenia, albo zwyczajnie masz błąd logiczny w szacie (też się często zdarza) – po prostu to, co myślałeś że działa w pewien sposób niestety tak nie działa :).
Udało się naprawić :P Winna była dziura w CSS :)