Come creare e personalizzare estratti di WordPress
Pubblicato: 2020-04-16Estratto è un testo facoltativo associato a un post. Il più delle volte, viene utilizzato come riepilogo del post. Se stai usando il nuovo editor, vedrai che c'è un'opzione nella barra laterale chiamata Estratto :

Se non viene visualizzato, potrebbe essere necessario abilitare l'opzione dalle impostazioni di Gutenberg. Fare clic sull'icona dei puntini di sospensione nell'angolo in alto a destra dell'editor e quindi su Opzioni :

Quindi cerca Estratto e abilitalo:

A seconda di come è configurato il tuo tema, l'estratto apparirà quando guardi i tuoi post nel blog, i risultati di una ricerca, ecc. Ad esempio, sul nostro blog puoi vedere come vengono presentati tutti i nostri post con i relativi estratti:

Ora, è sempre obbligatorio scrivere questo estratto? Se non lo facciamo, cosa fa WordPress? Mostra qualcosa o niente? Bene, risponderemo a queste domande e daremo un'occhiata più da vicino alle opzioni che WordPress ci offre per personalizzare gli estratti.
Come funzionano gli estratti di WordPress
WordPress ha due funzioni per ottenere l'estratto di un post: get_the_excerpt e the_excerpt . Entrambi sono definiti in wp-includes/post-template.php e se dai un'occhiata al loro codice sorgente scoprirai che tutto ciò che the_excerpt è fare echo al risultato di get_the_excerpt (dopo averlo filtrato con the_excerpt ). Quindi, in sostanza, possiamo approssimativamente dire che l'unica cosa che devi capire per sapere come funzionano gli estratti in WordPress è la funzione get_the_excerpt .
Come puoi vedere, get_the_excerpt è estremamente semplice:
function get_the_excerpt( $post = null ) { // ... $post = get_post( $post ); if ( empty( $post ) ) { return ''; } // ... return apply_filters( 'get_the_excerpt', $post->post_excerpt, $post ); } Fondamentalmente, carica un post (se non ne imposti uno, utilizza il post disponibile nel ciclo di WordPress) e restituisce il suo attributo post_excerpt . Quindi sembra che nessun estratto significhi che WordPress non mostrerà nulla alla fine, giusto?
Non così in fretta, amico.
Nota che questa funzione in realtà non restituisce direttamente il valore di post_excerpt. Invece, lo filtra usando un nuovo filtro: get_the_excerpt. Quindi, se ci sono azioni associate a quel filtro, il risultato finale può potenzialmente cambiare e non essere più la stringa vuota...
E in effetti, ecco cosa sta succedendo qui! Se non scriviamo un estratto per un determinato post, questo è ciò che vedremo nel front-end:

le prime parole del nostro post saranno l'estratto generato da WordPress.
La funzione wp_trim_excerpt
Se eseguiamo una rapida ricerca nel codice sorgente di WordPress vedremo che, per impostazione predefinita, esiste una sola azione associata al filtro get_the_excerpt . In particolare, in wp-includes/default-filters.php vediamo che una funzione chiamata wp_trim_excerpt è agganciata.
Secondo i documenti di WordPress, wp_trim_excerpt è responsabile della generazione di un estratto con un massimo di 55 parole e, se necessario, vengono aggiunti i puntini di sospensione. Ed ecco la chiave: la funzione considera che generare un estratto “è necessario” se non ce n'è già uno (il che, in generale, equivale a dire che l'utente non ha scritto il brano nell'editor). Puoi vederlo nel codice sorgente della funzione:
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 ); } Vedere? Se non è presente alcun estratto ( $text è la stringa vuota), recupera il contenuto del post corrente ( get_the_content da $post ) e utilizzalo per generare un estratto.

Da questo momento in poi, puoi continuare a scavare e scoprire come WordPress genera effettivamente il codice sorgente. Tuttavia, penso che tu abbia già avuto l'idea, quindi diamo un'occhiata alla documentazione di nuovo, poiché fa luce su questo argomento:
Restituisce un massimo di 55 parole con i puntini di sospensione aggiunti se necessario. Il limite di 55 parole può essere modificato da plugin/temi utilizzando il filtro
excerpt_length. La stringa ' […]' può essere modificata da plugin/temi usando il filtroexcerpt_more.wp_trim_excerptDocumentazione
Quindi ora sai tutto quello che c'è da sapere per personalizzare completamente gli estratti automatici che WordPress genera per i tuoi post.
Come personalizzare estratti automatici
Diamo un'occhiata ad alcuni esempi di come possiamo utilizzare i filtri che abbiamo visto nel post di oggi per personalizzare gli estratti automatici. A proposito, ricorda che per aggiungere una di queste modifiche al tuo sito web probabilmente devi creare un plugin.
a) Come modificare il numero di parole che voglio nei miei estratti
Questo è uno dei più semplici. Abbiamo già visto che abbiamo a nostra disposizione il filtro excerpt_length per scegliere quante parole vogliamo nei nostri estratti, quindi usiamolo:
function nelio_100_word_excerpts( $length ) { if ( is_admin() ) { return $length; } return 100; } add_filter( 'excerpt_length', 'nelio_100_word_excerpts', 99 ); Nota che la prima cosa che facciamo nella nostra funzione è assicurarci di essere nel front-end. Se siamo sulla dashboard ( is_admin ), è meglio non fare nulla con i nostri estratti. Una volta che siamo sicuri di essere in un "ambiente sicuro", dobbiamo solo restituire il nostro numero magico. Nel mio caso: 100 parole.
b) Come modificare il testo che compare dopo un'estrazione automatica
Anche questo è estremamente facile perché abbiamo già visto che c'è un filtro per questo:
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 );In questo caso, tutto ciò che facciamo è restituire il testo "Dimmi di più!" dopo il riepilogo e trasformarlo in un collegamento in modo che gli utenti possano fare clic su di esso.
c) Come limitare la lunghezza di un estratto a un certo numero di caratteri
La funzione wp_trim_words ha un filtro con lo stesso nome che possiamo usare per modificare l'estratto finale utilizzato da WordPress. Quindi usiamolo:
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 ); Il filtro wp_trim_words si applica sia agli estratti automatici che a quelli definiti dall'utente. Nel mio esempio, mi interessa solo modificare estratti che sono stati generati automaticamente, quindi devo aggiungere una nuova condizione. Se ricordi, wp_trim_words genera un estratto automatico solo se l'estratto originale era vuoto, quindi tutto ciò che devi fare è controllarlo per ottenere il risultato desiderato.
D'altra parte, nota che ho usato mb_substr invece della classica funzione substr . Se ti stai chiedendo perché, il motivo è semplice: se scrivi nel tuo blog in una lingua diversa dall'inglese, probabilmente utilizzerai caratteri multibyte e accorciare stringhe multibyte con substr può andare storto. Leggi la documentazione PHP per maggiori informazioni su questo.
d) Come creare estratti con il primo paragrafo del contenuto
E infine, un esempio di come creare un estratto utilizzando esattamente il primo paragrafo del tuo post. Nessuna spiegazione questa volta, quindi presta attenzione a quello che sto facendo:
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 );In breve…
Il grande potere di WordPress risiede nella sua estensibilità. Oggi abbiamo visto nel dettaglio come WordPress genera post estratti e tutti i filtri e le funzioni che offre per personalizzare il risultato finale in base alle proprie esigenze.
Spero che il post di oggi ti sia piaciuto. Condividilo con i tuoi amici in modo che più persone conoscano i vantaggi di WordPress!
Immagine in primo piano di Aaron Burden su Unsplash.
