Jak tworzyć i dostosowywać fragmenty WordPress

Opublikowany: 2020-04-16

Fragment to opcjonalny tekst powiązany z postem. Przez większość czasu jest używany jako podsumowanie postu. Jeśli używasz nowego edytora, zobaczysz opcję na pasku bocznym o nazwie Fragment :

Fragmenty w Gutenberg
Fragmenty w Gutenbergu.

Jeśli się nie pojawi, być może trzeba będzie włączyć opcję w ustawieniach Gutenberga. Kliknij ikonę wielokropka w prawym górnym rogu edytora, a następnie Opcje :

Ustawienia Gutenberga
Ustawienia Gutenberga.

Następnie poszukaj fragmentu i włącz go:

Jak aktywować panel, aby edytować fragment posta.
Jak aktywować panel, aby edytować fragment posta.

W zależności od tego, jak skonfigurowany jest Twój motyw, fragment pojawi się podczas przeglądania Twoich postów na blogu, wyników wyszukiwania itp. Na przykład na naszym blogu możesz zobaczyć, jak wszystkie nasze posty są prezentowane wraz z powiązanymi z nimi fragmentami:

Wpisy na blogu Nelio z ich fragmentami.
Wpisy na blogu Nelio z ich fragmentami.

Czy napisanie tego fragmentu jest zawsze obowiązkowe? Jeśli nie, co robi WordPress? Czy pokazuje coś lub w ogóle nic? Cóż, odpowiemy na te pytania i przyjrzymy się bliżej opcjom, które WordPress daje nam dostosuj fragmenty.

Jak działają fragmenty WordPress

WordPress ma dwie funkcje umożliwiające uzyskanie fragmentu posta: get_the_excerpt i the_excerpt . Oba są zdefiniowane w wp-includes/post-template.php i jeśli spojrzysz na ich kod źródłowy, odkryjesz, że wszystko, co the_excerpt , to echo wyniku get_the_excerpt (po przefiltrowaniu go za pomocą the_excerpt ). Zasadniczo możemy więc z grubsza powiedzieć, że jedyną rzeczą, którą musisz zrozumieć, aby wiedzieć, jak działają fragmenty w WordPressie, jest funkcja get_the_excerpt .

Jak widać, get_the_excerpt jest niezwykle proste:

 function get_the_excerpt( $post = null ) { // ... $post = get_post( $post ); if ( empty( $post ) ) { return ''; } // ... return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); }

Zasadniczo ładuje post (jeśli go nie ustawisz, używa posta dostępnego w pętli WordPress) i zwraca jego atrybut post_excerpt . Wygląda więc na to, że brak fragmentu oznacza, że ​​WordPress ostatecznie niczego nie pokaże, prawda?

Nie tak szybko, kolego.

Zauważ, że ta funkcja w rzeczywistości nie zwraca bezpośrednio wartości post_excerpt. Zamiast tego filtruje go za pomocą nowego filtra: get_the_excerpt. Więc jeśli są jakieś akcje powiązane z tym filtrem, ostateczny wynik może się potencjalnie zmienić i nie być już pustym ciągiem…

I rzeczywiście, tak się tutaj dzieje! Jeśli nie napiszemy fragmentu do danego postu, oto co zobaczymy w interfejsie:

Automatyczny fragment.
Automatyczny fragment wygenerowany przez WordPress.

pierwszymi słowami naszego postu będą fragmenty generowane przez WordPress.

Funkcja wp_trim_excerpt

Jeśli wykonamy szybkie wyszukiwanie w kodzie źródłowym WordPressa, zobaczymy, że domyślnie z filtrem get_the_excerpt powiązana jest tylko jedna akcja. W szczególności w wp-includes/default-filters.php widzimy, że funkcja o nazwie wp_trim_excerpt jest przechwycona.

Zgodnie z dokumentacją WordPress, wp_trim_excerpt odpowiada za wygenerowanie fragmentu zawierającego maksymalnie 55 słów i w razie potrzeby dodany wielokropek. A oto klucz: funkcja uważa, że ​​wygenerowanie fragmentu „jest konieczne”, jeśli jeszcze go nie ma (co w ogólności jest równoznaczne z stwierdzeniem, że użytkownik nie napisał fragmentu w edytorze). Możesz to zobaczyć w kodzie źródłowym funkcji :

 function wp_trim_excerpt( $text = '', $post = null ) { $raw_excerpt = $text; if ( '' == $text ) { $post = get_post( $post ); $text = get_the_content( '', false, $post ); // [...] » Generates the excerpt using the post content } return apply_filters( 'wp_trim_excerpt', $text, $raw_excerpt ); }

Widzieć? Jeśli nie ma fragmentu ( $text jest pustym ciągiem), pobierz zawartość bieżącego postu ( get_the_content from $post ) i użyj go do wygenerowania fragmentu.

Od tego momentu możesz dalej kopać i odkrywać, w jaki sposób WordPress faktycznie generuje kod źródłowy. Myślę jednak, że już masz pomysł, więc ponownie przyjrzyjmy się dokumentacji, która rzuca trochę światła na ten temat:

Zwraca maksymalnie 55 słów z dołączonym wielokropkiem, jeśli to konieczne. Limit 55 słów może być modyfikowany przez wtyczki/motywy przy użyciu filtra excerpt_length . Ciąg „ […]” może być modyfikowany przez wtyczki/motywy przy użyciu filtra excerpt_more .

wp_trim_excerpt Dokumentacja

Teraz wiesz już wszystko, co musisz wiedzieć, aby w pełni dostosować automatyczne fragmenty, które WordPress generuje dla Twoich postów.

Jak dostosować automatyczne fragmenty

Rzućmy okiem na kilka przykładów wykorzystania filtrów, które widzieliśmy w dzisiejszym poście, aby dostosować automatyczne fragmenty. Przy okazji pamiętaj, że aby dodać którąkolwiek z tych modyfikacji do swojej witryny, prawdopodobnie musisz stworzyć wtyczkę.

a) Jak zmienić liczbę słów, które chcę w moich fragmentach?

To jeden z najprostszych. Widzieliśmy już, że mamy do dyspozycji filtr excerpt_length , aby wybrać ile słów chcemy w naszych fragmentach, więc użyjmy go:

 function nelio_100_word_excerpts( $length ) { if ( is_admin() ) { return $length; } return 100; } add_filter( 'excerpt_length', 'nelio_100_word_excerpts', 99 );

Zauważ, że pierwszą rzeczą, którą robimy w naszej funkcji, jest upewnienie się, że jesteśmy w interfejsie. Jeśli jesteśmy na pulpicie nawigacyjnym ( is_admin ), lepiej nie rób nic z naszymi fragmentami. Gdy mamy pewność, że znajdujemy się w „bezpiecznym środowisku”, wystarczy zwrócić nasz magiczny numer. W moim przypadku: 100 słów.

b) Jak zmienić tekst, który pojawia się po automatycznym wyciągu?

Ten jest również niezwykle łatwy, ponieważ widzieliśmy już, że jest dla niego filtr:

 function nelio_clickable_read_more( $more ) { if ( is_admin() ) { return $more; } return sprintf( '<a href="%s">Tell me more!</a>', esc_url( get_the_permalink() ) ); } add_filter( 'excerpt_more', 'nelio_clickable_read_more', 99 );

W takim przypadku zwracamy tylko tekst „Powiedz mi więcej!” po podsumowaniu i utwórz link, aby użytkownicy mogli w nie kliknąć.

c) Jak ograniczyć długość fragmentu do określonej liczby znaków?

Funkcja wp_trim_words ma filtr o tej samej nazwie, którego możemy użyć do zmodyfikowania końcowego fragmentu, którego używa WordPress. Użyjmy go więc:

 function nelio_140_char_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } return mb_substr( $excerpt, 0, 140 ); } add_filter( 'wp_trim_excerpt', 'nelio_140_char_excerpts', 99, 2 );

Filtr wp_trim_words dotyczy zarówno fragmentów automatycznych, jak i fragmentów zdefiniowanych przez użytkownika. W moim przykładzie interesuje mnie tylko modyfikowanie fragmentów, które zostały wygenerowane automatycznie, więc muszę dodać nowy warunek. Jeśli pamiętasz, wp_trim_words generuje automatyczny fragment tylko wtedy, gdy oryginalny fragment był pusty, więc wszystko, co musisz zrobić, to sprawdzić to, aby uzyskać pożądany wynik.

Z drugiej strony zauważ, że użyłem mb_substr zamiast klasycznej funkcji substr . Jeśli zastanawiasz się dlaczego, powód jest prosty: jeśli piszesz na swoim blogu w języku innym niż angielski, prawdopodobnie będziesz używać znaków wielobajtowych, a skracanie wielobajtowych ciągów za pomocą substr może się nie udać. Przeczytaj dokumentację PHP, aby uzyskać więcej informacji na ten temat.

d) Jak tworzyć fragmenty z pierwszym akapitem treści?

I na koniec przykład, jak utworzyć fragment, używając dokładnie pierwszego akapitu swojego postu. Tym razem bez wyjaśnienia, więc zwróć uwagę na to, co robię:

 function nelio_first_paragraph_excerpts( $excerpt, $raw_excerpt ) { if ( is_admin() ) { return $excerpt; } if ( '' !== $raw_excerpt ) { return $excerpt; } $content = apply_filters( 'the_content', get_the_content() ); return substr( $content, 0, strpos( $content, '</p>' ) + 4 ); } add_filter( 'wp_trim_excerpt', 'nelio_first_paragraph_excerpts', 99, 2 );

W skrócie…

Wielka moc WordPressa tkwi w jego rozszerzalności. Dziś szczegółowo zobaczyliśmy, jak WordPress generuje fragmenty postów oraz wszystkie filtry i funkcje, które oferuje, aby dostosować końcowy wynik do Twoich potrzeb.

Mam nadzieję, że podobał Ci się dzisiejszy post. Podziel się nim ze znajomymi, aby więcej osób poznało zalety WordPressa!

Polecane zdjęcie Aarona Burdena na Unsplash.