Cum să creați și să personalizați fragmente WordPress
Publicat: 2020-04-16Extras este un text opțional asociat unei postări. De cele mai multe ori, este folosit ca rezumat post. Dacă utilizați noul editor, veți vedea că există o opțiune în bara laterală numită Extras :

Dacă nu apare, poate fi necesar să activați opțiunea din setările lui Gutenberg. Faceți clic pe pictograma puncte suspensie din colțul din dreapta sus al editorului și apoi pe Opțiuni :

Apoi căutați Extras și activați-l:

În funcție de modul în care este configurată tema dvs., fragmentul va apărea când vă uitați la postările dvs. de pe blog, rezultatele unei căutări etc. De exemplu, pe blogul nostru puteți vedea cum sunt prezentate toate postările noastre cu fragmentele aferente:

Acum, este întotdeauna obligatoriu să scrieți acest fragment? Dacă nu, ce face WordPress? Arată ceva sau nimic? Ei bine, vom răspunde la aceste întrebări și vom arunca o privire mai atentă asupra opțiunilor pe care WordPress ne oferă personalizarea fragmentelor.
Cum funcționează extrasele WordPress
WordPress are două funcții pentru a obține fragmentul unei postări: get_the_excerpt și the_excerpt . Ambele sunt definite în wp-includes/post-template.php și dacă aruncați o privire la codul lor sursă, veți descoperi că tot ceea ce face the_excerpt este echo rezultatul get_the_excerpt (după ce l-ați filtrat cu the_excerpt ). Deci, în esență, putem spune aproximativ că singurul lucru pe care trebuie să îl înțelegeți pentru a ști cum funcționează fragmentele în WordPress este funcția get_the_excerpt .
După cum puteți vedea, get_the_excerpt este extrem de simplu:
function get_the_excerpt( $post = null ) { // ... $post = get_post( $post ); if ( empty( $post ) ) { return ''; } // ... return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); } Practic, încarcă o postare (dacă nu setați una, folosește postarea disponibilă în bucla WordPress) și returnează atributul post_excerpt . Deci, se pare că niciun fragment nu înseamnă că WordPress nu va afișa nimic până la urmă, nu?
Nu atât de repede, amice.
Rețineți că această funcție nu returnează de fapt valoarea post_excerpt direct. În schimb, îl filtrează folosind un nou filtru: get_the_excerpt. Deci, dacă există acțiuni asociate cu acel filtru, rezultatul final se poate schimba și nu mai fi șirul gol...
Și într-adevăr, asta se întâmplă aici! Dacă nu scriem un fragment pentru o anumită postare, aceasta este ceea ce vom vedea în front-end:

primele cuvinte ale postării noastre vor fi fragmentul pe care WordPress îl generează.
Funcția wp_trim_excerpt
Dacă efectuam o căutare rapidă în codul sursă WordPress vom vedea că, implicit, există doar o singură acțiune asociată cu filtrul get_the_excerpt . Mai exact, în wp-includes/default-filters.php vedem că o funcție numită wp_trim_excerpt este conectată.
Conform documentelor WordPress, wp_trim_excerpt este responsabil pentru generarea unui fragment cu maximum 55 de cuvinte și o elipsă atașată, dacă este necesar. Și aici este cheia: funcția consideră că generarea unui fragment „este necesară” dacă nu există deja unul (ceea ce, în general, echivalează cu a spune că utilizatorul nu a scris fragmentul în editor). Puteți vedea acest lucru în codul sursă al funcției:
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 ); } Vedea? Dacă nu există niciun fragment ( $text este șirul gol), atunci preluați conținutul postării curente ( get_the_content from $post ) și utilizați-l pentru a genera un extras.

Din acest moment, puteți continua să sapi și să descoperi cum WordPress generează de fapt codul sursă. Cu toate acestea, cred că ați înțeles deja ideea, așa că să aruncăm o privire din nou la documentație, deoarece aruncă puțină lumină asupra acestui subiect:
Returnează maximum 55 de cuvinte cu puncte de suspensie adăugate dacă este necesar. Limita de 55 de cuvinte poate fi modificată de pluginuri/teme folosind filtrul
excerpt_length. Șirul „ […]” poate fi modificat de pluginuri/teme folosind filtrulexcerpt_more.wp_trim_excerptDocumentație
Așa că acum știi tot ce trebuie să știi pentru a personaliza complet fragmentele automate pe care WordPress le generează pentru postările tale.
Cum să personalizați extrase automate
Să aruncăm o privire la câteva exemple despre cum putem folosi filtrele pe care le-am văzut în postarea de astăzi pentru a personaliza fragmente automate. Apropo, amintiți-vă că pentru a adăuga oricare dintre aceste modificări site-ului dvs., probabil că trebuie să creați un plugin.
a) Cum să schimb numărul de cuvinte pe care le doresc în fragmentele mele
Acesta este unul dintre cele mai simple. Am văzut deja că avem la dispoziție filtrul excerpt_length pentru a alege câte cuvinte vrem în extrasele noastre, așa că hai să-l folosim:
function nelio_100_word_excerpts( $length ) { if ( is_admin() ) { return $length; } return 100; } add_filter( 'excerpt_length', 'nelio_100_word_excerpts', 99 ); Observați că primul lucru pe care îl facem în funcția noastră este să ne asigurăm că suntem în front-end. Dacă suntem pe Dashboard ( is_admin ), mai bine nu facem nimic cu fragmentele noastre. Odată ce suntem siguri că ne aflăm într-un „mediu sigur”, trebuie doar să returnăm numărul nostru magic. În cazul meu: 100 de cuvinte.
b) Cum se schimbă textul care apare după o extragere automată
Acesta este, de asemenea, extrem de ușor, deoarece am văzut deja că există un filtru pentru el:
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 );În acest caz, tot ce facem este să returnăm textul „Spune-mi mai multe!” după rezumat și faceți-l un link, astfel încât utilizatorii să poată face clic pe el.
c) Cum se limitează lungimea unui fragment la un anumit număr de caractere
Funcția wp_trim_words are un filtru cu același nume pe care îl putem folosi pentru a modifica fragmentul final pe care îl folosește WordPress. Deci hai sa il folosim:
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 ); Filtrul wp_trim_words se aplică atât extraselor automate, cât și definite de utilizator. În exemplul meu, sunt interesat doar să modific fragmente care au fost generate automat, așa că trebuie să adaug o nouă condiție. Dacă vă amintiți, wp_trim_words generează un extras automat doar dacă fragmentul original era gol, așa că tot ce trebuie să faceți este să verificați acest lucru pentru a obține rezultatul dorit.
Pe de altă parte, observați că am folosit mb_substr în loc de funcția clasică substr . Dacă vă întrebați de ce, motivul este simplu: dacă scrieți pe blogul dvs. într-o altă limbă decât engleza, probabil că veți folosi caractere pe mai mulți octeți, iar scurtarea șirurilor pe mai mulți octeți cu substr poate merge prost. Citiți documentația PHP pentru mai multe informații despre aceasta.
d) Cum se creează fragmente cu primul paragraf al conținutului
Și, în sfârșit, un exemplu despre cum să creezi un fragment folosind exact primul paragraf al postării tale. Nicio explicație de data aceasta, așa că fiți atenți la ceea ce fac:
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 );În scurt…
Marea putere a WordPress constă în extensibilitatea sa. Astăzi am văzut în detaliu cum WordPress generează fragmente de postări și toate filtrele și funcțiile pe care le oferă pentru a personaliza rezultatul final la nevoile tale.
Sper că ți-a plăcut postarea de azi. Împărtășește-l cu prietenii tăi, astfel încât mai mulți oameni să cunoască avantajele WordPress!
Imagine prezentată de Aaron Burden pe Unsplash.
