publikacja: 5 maja 2009, 23:46; autor: Szymon Skulimowski http://wpninja.pl/wasze-pytania-zajawka-i-dalsza-czesc-wpisu-w-oddzielnych-div-ach/

Wasze pytania: Zajawka i dalsza część wpisu w oddzielnych div-ach

Wasze pytania: Zajawka i dalsza część wpisu w oddzielnych div-ach

Andrzej przesłał do mnie takie oto zapytanie:

(…) Otóż single.php dzieli 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):

wasze-pytania-zajawka-i-dalsza-czesc-wpisu-w-oddzielnych-div-ach-01

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:

wasze-pytania-zajawka-i-dalsza-czesc-wpisu-w-oddzielnych-div-ach-02

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):

wasze-pytania-zajawka-i-dalsza-czesc-wpisu-w-oddzielnych-div-ach-03

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:

wasze-pytania-zajawka-i-dalsza-czesc-wpisu-w-oddzielnych-div-ach-04

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

Komentarze (19)

  1. Jacek Krużycki (5 maja 2009, 23:52) #:

    Rewelacyjne! Już widzę jak na 90% blogach wpisy są kilkukolorowe :P

  2. Szymon Skulimowski (5 maja 2009, 23:54) #:

    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 (?).

  3. aniec2 (6 maja 2009, 8:44) #:

    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:)

  4. Paweł Rabinek (6 maja 2009, 10:13) #:

    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?

  5. Szymon Skulimowski (6 maja 2009, 10:26) #:

    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.

  6. Flanker (6 maja 2009, 12:44) #:

    Taki mechanizm można fajnie wykorzystać na wstanienie reklamy, nie trzeba bawić się w instalowanie wtyczek ani wklejanie kodu do każdego wpisu.

  7. Flanker (6 maja 2009, 13:16) #:

    PS. U mnie niestety to nie zadziała, wtyczka Powiązane wpisy (YARPP) wpycha się po każdym the_content();

  8. Szymon Skulimowski (6 maja 2009, 13:21) #:

    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).

  9. Flanker (6 maja 2009, 13:42) #:

    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ę.

  10. palmiak (10 maja 2009, 23:31) #:

    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.

  11. Mariusz (12 maja 2009, 12:32) #:

    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

  12. marsjaninzmarsa (14 maja 2009, 15:49) #:

    dzięki, już dawno kombinowałem jak wstawić adSense po zajawce, na pewno się przyda :)

  13. Jacek Krużycki (14 maja 2009, 16:05) #:

    Właaaaaśnie :D AdSense :D
    Teraz zaczną się wszelkie kombinacje :D

  14. yasc (15 sierpnia 2009, 16:50) #:

    Hmm… O ile mi wiadomo samą zajawkę wyświetla funkcja the_excerpt();. Nie trzeba się męczyć z tym global.

    Według mnie wystarczy:

    
    

    ale mogę się mylić… :)

  15. yasc (15 sierpnia 2009, 16:51) #:

    Ee… do powyższego komentarza doklejam kod:

  16. Robert (9 marca 2010, 13:28) #:

    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ęść…”

  17. Robert (9 marca 2010, 13:28) #:

    zapomniałem włączyć powiadamiacza…

  18. marsjaninzmarsa (17 maja 2010, 17:29) #:

    @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…) :)

  19. marsjaninzmarsa (17 maja 2010, 17:31) #:

    Usunęło. Generalnie to jest [nawias ostry]!–more[zamknięcie tegoż nawiasu]. Oczywiście zamień te [] na odpowiednie znaczniki… ;)

Dodaj własny komentarz