Skip to content

Wszystko o WordPressie, tworzeniu stron — i nie tylko

✂️ 5 Porad dotyczących konfiguracji fragmentów w WordPress

✂️ 5 Porad dotyczących konfiguracji fragmentów w WordPress

Ви wchodzą Państwo na stronę główną swojego bloga i widzą ogromne fragmenty postów rozciągnięte na trzy ekrany. Czytelnik nie będzie przewijał trzech ekranów dla jednego artykułu, tylko wyjdzie. Albo odwrotnie: zapowiedzi urywają się w pół słowa, link „Czytaj dalej" nie pojawia się, a kanał RSS wygląda jak ogryzki zdań bez początku i końca.

Zazwyczaj WordPress przycina fragmenty po pierwszych 55 słowach i wstawia standardowy wielokropek. Żadnych ustawień długości, żadnej personalizacji tekstu linku, a dla stron (Pages) fragmenty w ogóle nie są przewidziane. Wszystko to da się rozwiązać, ale nie przez klikanie w checkboxy, tylko kilkoma linijkami kodu.

Poniżej 5 praktycznych technik: od zmiany długości fragmentu dla całej witryny po precyzyjne dostosowanie do kategorii i automatyczne wstawianie linku „Czytaj dalej". Każda z gotowym snippetem, który kopiuje się i wkleja do functions.php.

💡 Szybki przegląd:

  • Zmieniamy długość fragmentu dla całej witryny jedną funkcją w functions.php
  • Ustalamy różną długość dla różnych kategorii za pomocą warunku in_category()
  • Dodajemy link „Czytaj dalej" na końcu każdego fragmentu
  • Włączamy fragmenty dla stron WordPress jedną linijką kodu
  • Zarządzamy fragmentami bez programowania za pomocą wtyczki Advanced Excerpt

Czym są fragmenty w WordPress i jak działają

Fragment (excerpt) to zwięzły opis postu, który wyświetla się w listach wpisów: na stronie głównej, w archiwach kategorii, w wynikach wyszukiwania i w RSS. W przeciwieństwie do tagu <!--more-->, który przycina treść w dowolnym miejscu, fragment jest samodzielną encją: WordPress albo pobiera Pana/Pani ręczny tekst z metaboksu „Fragment", albo generuje go automatycznie z pierwszych 55 słów postu.

Ręczny fragment ma zawsze wyższy priorytet. Jeśli wypełnił Pan/Pani pole „Fragment" w edytorze, system pokaże właśnie jego, ignorując automatyczne przycinanie. Daje to pełną kontrolę: można napisać sensowne podsumowanie, zamiast zadowalać się pierwszymi dwoma zdaniami, które przypadkowo znalazły się na początku tekstu.

Problem w tym, że metaboks „Fragment" jest domyślnie ukryty. Włącza się go w „Ustawieniach ekranu" (przycisk na górze strony edycji postu): proszę zaznaczyć pole przy „Fragment", a pole pojawi się pod edytorem. Dalej zaczyna się personalizacja: pięć technik poniżej pokrywa wszystkie typowe scenariusze.

1. Zmieniamy długość fragmentu przez functions.php

To podstawa. WordPress domyślnie odcina 55 słów, to za mało na wyrazistą zapowiedź, ale wystarczająco, by czytelnik zrozumiał temat. Jeśli potrzebują Państwo więcej (lub mniej), filtr excerpt_length rozwiązuje zadanie jedną funkcją.

Co robi kod: przedefiniowuje liczbę słów, którą WordPress zwraca w the_excerpt(). Nie dotyka ręcznych fragmentów: jeśli wypełnił Pan/Pani pole w edytorze, wyświetli się ono bez zmian.

  • Proszę otworzyć functions.php swojego motywu (Wygląd → Edytor motywu → functions.php) lub przez FTP
  • Proszę dodać na końcu pliku (przed ?>, jeśli występuje):
1function my_excerpt_length($length) {
2 return 110;
3}
4add_filter('excerpt_length', 'my_excerpt_length');
  • Proszę zapisać plik

Liczba 110 to liczba słów. Dla typowego bloga 80-120 słów daje 3-4 zdania, to wystarczy na sensowną zapowiedź bez przeciążania strony głównej. Czytniki RSS również będą wdzięczne: mają one swoje limity, a zbyt długi fragment może zostać przycięty bardziej agresywnie, niż Pan/Pani zakładał.

Jeśli używa Pan/Pani motywu blokowego (Block Theme, FSE), functions.php może nie występować lub nie działać zgodnie z oczekiwaniami. W takim przypadku proszę utworzyć motyw potomny lub użyć wtyczki Code Snippets, która dodaje snippety bez edycji plików motywu.

2. Różna długość fragmentu dla różnych kategorii

Wiadomościom wystarczy 30 słów, a recenzjom i poradnikom potrzeba 100-120. Filtr excerpt_length w podstawowej wersji daje jedną wartość dla całej witryny, co jest nieelastyczne. Poniższy kod rozwiązuje kwestię długości według kategorii.

Scenariusz A, jedna kategoria ze specjalną długością. Ma Pan/Pani kategorię „Reviews", gdzie fragmenty mają być krótsze:

1function excerpt_length_category($length) {
2 if (in_category('Reviews')) {
3 return 20;
4 } else {
5 return 60;
6 }
7}
8add_filter('excerpt_length', 'excerpt_length_category');

Proszę zastąpić Reviews slugiem swojej kategorii, a liczby tymi, które są Panu/Pani potrzebne.

Scenariusz B, kilka kategorii z różną długością. Kaskada if/elseif/else pokrywa trzy poziomy: jedną kategorię, grupę kategorii i całą resztę:

1function excerpt_length_category($length) {
2 if (in_category('Review')) {
3 return 35;
4 } elseif (in_category(array('News', 'Videos', 'Editorial'))) {
5 return 60;
6 } else {
7 return 55;
8 }
9}
10add_filter('excerpt_length', 'excerpt_length_category');

in_category() przyjmuje slug kategorii (ciąg znaków) lub tablicę slugów. Warunki są sprawdzane po kolei, zadziała pierwsze dopasowanie. W powyższym przykładzie: posty z „Review" otrzymują 35 słów, z „News", „Videos" i „Editorial" 60, cała reszta 55.

Po zapisaniu proszę sprawdzić stronę główną i kilka stron kategorii: długość fragmentów powinna się różnić w zależności od tego, do której kategorii przypisany jest post.

Fragment się urywa, a czytelnik nie zawsze rozumie, że to tylko zapowiedź, a nie cały artykuł. Link na końcu fragmentu rozwiązuje problem: wyraźne wezwanie do kliknięcia i przeczytania w całości.

Przykład linku Read More na końcu fragmentu WordPress

WordPress domyślnie wstawia [...] w miejscu przycięcia, ale nie jest to link. Filtr excerpt_more zastępuje wielokropek niestandardowym ciągiem znaków z HTML:

1function excerpt_readmore($more) {
2 return '... <a href="' . get_permalink($post->ID) . '" class="readmore">' . 'Read More' . '</a>';
3}
4add_filter('excerpt_more', 'excerpt_readmore');

Co można zmienić:

  • Tekst linku, zamień Read More na własny wariant, na przykład Читать дальше lub Подробнее
  • Klasa CSS, readmore w atrybucie class można zastąpić własną i ostylować link przez CSS (kolor, rozmiar, odstęp, podkreślenie)
  • Separator, trzy kropki ze spacją '... ' przed tagiem <a> można usunąć lub zastąpić przez | albo ,

Po zapisaniu proszę otworzyć stronę główną bloga lub archiwum, na końcu każdego fragmentu pojawi się klikalny link do pełnego posta. Działa to również w RSS (większość czytników wyświetla linki HTML poprawnie).

4. Włączamy fragmenty dla stron WordPress

Strony (Pages) w WordPressie nie obsługują fragmentów domyślnie. Typ wpisu page nie jest zarejestrowany z obsługą excerpt, a metabox w edytorze nie pojawia się, nawet jeśli włączymy go w „Ustawieniach ekranu". Czasem jest to jednak potrzebne: landing page z zapowiedziami stron podrzędnych, niestandardowe wyświetlanie przez WP_Query, strony usług w formie kart.

Rozwiązanie, jedna funkcja, która dodaje obsługę fragmentów dla typu wpisu page:

1function wploop_pages_excerpt() {
2 add_post_type_support('page', 'excerpt');
3}
4add_action('init', 'wploop_pages_excerpt');

Po zapisaniu functions.php:

  • Proszę wejść do edytora dowolnej strony
  • Kliknąć „Ustawienia ekranu" na górze
  • Zaznaczyć pole „Fragment", teraz ta opcja jest dostępna
  • Przewinąć stronę w dół, pole fragmentu się pojawiło

Jeśli używają Państwo niestandardowego typu wpisu (CPT), proszę zastąpić page slugiem swojego CPT, mechanika jest taka sama. Podczas rejestracji CPT przez register_post_type() można od razu podać 'supports' => array(..., 'excerpt') i obyć się bez dodatkowego kodu.

5. Zarządzanie zajawkami przez wtyczkę Advanced Excerpt

Nie chce Pan zaglądać do kodu? Wtyczka Advanced Excerpt daje wizualną kontrolę nad wszystkimi aspektami zajawki przez panel administracyjny.

Strona ustawień wtyczki Advanced Excerpt w panelu administracyjnym WordPress

Po instalacji i aktywacji (bezpłatna, z repozytorium WordPress) w menu „Ustawienia" pojawia się strona Advanced Excerpt z następującymi opcjami:

  • Długość zajawki, w znakach lub słowach. Znaki są dokładniejsze przy kontroli układu, słowa, przy czytelności
  • Wielokropek, znak lub kod HTML, którym urywa się zajawka. Domyślnie &hellip; (wielokropek ). Można zastąpić przez [...], strzałkę, ikonę lub pozostawić puste
  • Sposób przycinania, według znaków (słowo może zostać ucięte w połowie) lub według zdań (zawsze całe zdanie, ale zajawka będzie dłuższa niż zadeklarowany limit)
  • Link „Czytaj dalej", włączyć/wyłączyć, określić tekst, opakować w niestandardowy HTML
  • Nie pokazuj ręcznych zajawek, jeśli włączone, wtyczka zawsze generuje zajawkę automatycznie, nawet jeśli wypełnił Pan pole ręcznie
  • Usuwaj shortkody z zajawki, koniecznie proszę trzymać włączone, aby [contact-form-7] lub [shortcode] nie wystawały w zapowiedzi
  • Filtr, wybór, przez którą funkcję motyw wyświetla zajawki: the_excerpt(), the_content() lub obie. Jeśli nie jest Pan pewien, proszę zostawić oba zaznaczenia
Dodatkowe ustawienia filtrowania wtyczki Advanced Excerpt

Wtyczka używa tych samych hooków excerpt_length i excerpt_more, co ręczny kod z porad 1-3, ale opakowuje je w interfejs. Dokumentacja dla programistów, na GitHub Wiki, opisuje filtry do niestandardowej integracji.

Na rok 2026 wtyczka jest aktywna na ponad 80 000 witryn, ale aktualizuje się ją rzadko: ostatnie wydanie ukazało się w styczniu 2024 i jest przetestowane do WordPress 6.4. Przed instalacją na świeżej wersji WordPress proszę sprawdzić zgodność na środowisku stagingowym.

Zanim przejdziemy do często zadawanych pytań, krótkie wideo o pracy z zajawkami w WordPress w praktyce:

⁉️🤔 Często zadawane pytania

Czym ręczna zajawka różni się od tagu <!--more-->?

Zajawka to osobne pole, które jest wyświetlane przez funkcję the_excerpt() w szablonach motywu. Tag <!--more--> wstawia się w treść wpisu i ucina the_content() w konkretnym miejscu. Zajawka pokazuje się w listach wpisów i RSS, tag more działa tylko tam, gdzie używane jest the_content(). Do krótkiego podsumowania w archiwach proszę brać zajawkę, do ucinania długiego wpisu na stronie głównej wystarczy tag more.

Dlaczego zajawka nie pojawia się, chociaż napisałem ją w edytorze?

Motyw nie wywołuje the_excerpt() w odpowiednim szablonie. Proszę sprawdzić szablony archive.php, category.php, home.php i search.php. Jeśli jest tam the_content(), ręczna zajawka jest ignorowana. Proszę zamienić na the_excerpt() lub użyć konstrukcji warunkowej if (has_excerpt()) { the_excerpt(); } else { the_content(); }.

Czy można pokazywać miniaturę wpisu obok zajawki?

Tak, motyw musi wywoływać the_post_thumbnail() przed the_excerpt() w pętli. Większość nowoczesnych motywów WordPress robi to domyślnie. Jeśli nie, proszę dodać wywołanie miniatury w szablonie przed zajawką. Do niestandardowego układu proszę opakować oba wywołania w <div class="post-card"> i ostylować przez CSS.

Jak usunąć zajawki tylko ze strony głównej, zostawiając je w archiwach?

Proszę użyć znacznika warunkowego is_home() wewnątrz filtra. Na przykład w functions.php:

1 function disable_excerpt_on_home($excerpt) {
2 if (is_home()) {
3 return '';
4 }
5 return $excerpt;
6 }
7add_filter('get_the_excerpt', 'disable_excerpt_on_home');

Do dokładniejszego ustawienia według typu strony, kategorii lub typu wpisu proszę użyć wtyczki Advanced Excerpt z porady 5: w jej ustawieniach są checkboxy „Wyłącz na..." dla strony głównej, archiwów, wyszukiwania i pojedynczych stron.

Co robić z zajawkami od razu

Kolejność wdrażania, od prostego do złożonego. Proszę zacząć od porady 1: jedna funkcja, jedna liczba i długość zajawki w całej witrynie jest już pod kontrolą. Następnie proszę dodać link „Czytaj dalej" (porada 3), to krytyczne dla klikalności na stronie głównej i w RSS. Jeśli prowadzi Pan blog z działami o różnym formacie, porada 2 o długości według kategorii usunie dysonans między newsami a dłuższymi tekstami.

Wtyczkę Advanced Excerpt (porada 5) proszę brać, jeśli chce Pan całkowicie uniknąć kodu lub jeśli motyw używa niestandardowego sposobu wyświetlania treści i filtry excerpt_length/excerpt_more nie działają. W innych przypadkach kod z functions.php jest pewniejszy: mniej zależności, nie generuje obciążenia, działa z każdym motywem.

1