Andrzej przesłał do mnie takie oto zapytanie:
(…) Otóż
single.phpdzieli mi stronę na divy (i to jest ok) ale chciałem zrobić tak by w 1-szym divie był content aż do znacznika<!--more-->a w drugim divie reszta po znaczniku.
Przy rozwiązaniu skorzystamy z dodatkowych parametrów jakie oferuje funkcja the_content(), która odpowiada za wyświetlanie treści głównej wpisu. Jej pełna składnia prezentuje się następująco:
<?php the_content('more_link_text', strip_teaser, 'more_file'); ?>
Obiektem naszych zainteresowań jest parametr strip_teaser – typ logiczny odpowiedzialny za wyświetlanie zajawki (FALSE) lub jej ukrywanie (TRUE).
Wyświetlanie zajawki i dalszej części wpisu
Dla przypomnienia, standardowe wywołanie funkcji:
<?php the_content(); ?>
da nam następujący wynik (pierwszy akapit to zajawka, drugi to dalsza część wpisu):

Standardowe wywołanie funkcji the_content();
Wyświetlanie jedynie dalszej części wpisu, bez zajawki
Gdy funkcję wywołamy z ustawionym parametrem strip_teaser na TRUE czyli:
<?php the_content('', true, ''); ?>
to otrzymamy tylko dalszą część wpisu, bez zajawki:

Wyświetlenie jedynie dalszej części wpisu, bez zajawki
Czyli pół zadania wykonane :-).
Wyświetlanie jedynie zajawki, bez dalszej treści wpisu
Tutaj posłużymy się rozwiązaniem, które już opisywałem a które wiązało się z ignorowaniem znacznika more przy wyświetlaniu pojedynczego wpisu czy strony.
Tak więc, wywołanie nastepującego kodu:
<?php global $more; $more = 0; the_content('', false, ''); $more = 1; ?>
wyświetli jedynie zajawkę, bez dalszej części wpisu (i bez odnośnika „czytaj więcej):

Wyświetlenie jedynie zajawki, bez dalszej części wpisu
A to druga część zadania :-).
Wyświetlenie zajawki i dalszej części wpisu w oddzielnych div-ach
Składając obie funkcje w jeden kod otrzymamy to samo co na początku z tą różnicą, że teraz możemy umieścić zajawkę i dalszą część wpisu w oddzielnych blokach:
<div style="background:#E7E7E7"> <?php global $more; $more = 0; the_content('', false, ''); $more = 1; ?> </div> <div style="background:#DFDFC3"> <?php the_content('', true, ''); ?> </div>
Czego efektem będzie:

Wyświetlenie zajawki i dalszej części wpisu w oddzielnych div-ach

ocena: 4,50 / 5 | głosów: 8
Rewelacyjne! Już widzę jak na 90% blogach wpisy są kilkukolorowe :P
Może aż tak źle nie będzie :-). Właściwie to nie wiem w jaki sposób Andrzej wykorzystał takie rozwiązanie – może zademonstruje w komentarzu (?).
Gdyby nie Szymon to bym musiał główkować i główkować.
Demonstruje jak było:
http://i8.photobucket.com/albums/a6/aniec2/1org.jpg
Galeria znajdowała się po boku co wyglądało źle (i przy większej ilości informacji powodowało by pustkę pod gł. zdjęciem). Previous i Next były w osobnym divie i pomyślałem sobie, że można by tak podzielić wpis, że galerie dawał bym po znaczniku właśnie w divie poniżej gł. zdjęcia.
Kod od Szymona rozwiązał mój problem i dziś całość wygląda tak:
http://i8.photobucket.com/albums/a6/aniec2/2pozmianie.jpg
Jeszcze raz dziękuję za szybką pomoc. Coś czuje, że teraz ludzie zaleją Cię pytaniami:)
Dzięki, od dawna szukałem jak wstawić coś między zajawkę a dalszą część – świetna robota.
Chciałbym tylko zapytać, czy wywołanie dwa razy the_content() nie spowoduje dwukrotnego odpytania bazy danych?
Zmierzyłem za pomocą wbudowanej w WP funkcji
get_num_queries();i o dziwo, liczba zapytań do bazy się nie zmieniła. Nie wiem jednak na ile ta funkcja jest wiarygodna.Taki mechanizm można fajnie wykorzystać na wstanienie reklamy, nie trzeba bawić się w instalowanie wtyczek ani wklejanie kodu do każdego wpisu.
PS. U mnie niestety to nie zadziała, wtyczka Powiązane wpisy (YARPP) wpycha się po każdym the_content();
Nie znam wtyczki ale po screenach widzę, że jest tam opcja „Automatically display related posts?”. Po odznaczeniu opcji wtyczka nie będzie już pewnie automatycznie doklejała swojego kodu (trzeba będzie wywołać ją ręcznie w kodzie).
Ahhh aż mi wstyd, że sam tego nie zauważyłem, a ty, mimo że nie miałeś takiego obowiązku zainteresowałeś się i pomogłeś mi. Dziękuję.
Baza jest odpytana w innym momencie. the_content pokazuje tylko efekty wcześniejszego odpytania.
Osobiście zamiast takiego rozwiązania mam funkcyjkę the_better_content, która bierze zajawkę w div o klasie zajawka i już. get_the content + explode + filtry i działą jak ta lala.
Witaj, świetnie i pięknie,
tylko co zrobić gdy w tekście są też – u mnie niestety po zastosowaniu :Wyświetlenie zajawki i dalszej części wpisu w oddzielnych div-ach + przestaje działać nextpage
dzięki, już dawno kombinowałem jak wstawić adSense po zajawce, na pewno się przyda :)
Właaaaaśnie :D AdSense :D
Teraz zaczną się wszelkie kombinacje :D
Hmm… O ile mi wiadomo samą zajawkę wyświetla funkcja
the_excerpt();. Nie trzeba się męczyć z tymglobal.Według mnie wystarczy:
ale mogę się mylić… :)
Ee… do powyższego komentarza doklejam kod:
Witam.
raczkuję z wordpress i na moim blogu: http://www.urana.eu niestety wyświetlane są całe artykuły. nie bardzo wiem jak zrobić żeby wyświetlał się jedynie kilku wierszowy wstęp i link „dalsza część…”
zapomniałem włączyć powiadamiacza…
@Robert: Wystarczy kliknąć na taki sympatyczny przycisk w edytorze posta, o nazwie More w tekstowym, a z ikonką podzielonej strony w wizualnym (to ten 4-ty od prawej w pierwszym rzędzie).
Albo po prostu wpisz
w edytorze tekstowym (mam nadzieję, że mi nie usunie kodu…) :)Usunęło. Generalnie to jest . Oczywiście zamień te [] na odpowiednie znaczniki… ;)