Come aggiungere in automatico le immagini in evidenza è una domanda ricorrente.
Capita di cominciare a utilizzare un sito senza impostare le immagini in evidenza.
Poi si cambia tema e questo nuovo tema supporta le immagini in evidenza e noi non ne abbiamo impostata neanche una.
Bel casino, andare ad aggiungere immagini in evidenza post per post è un lavoro lungo e noioso.
Per questo ho realizzato questo script che potete utilizzare liberamente, è rilasciato con licenza GPL 2 o successiva.
Cosa fa questo script?
Lo script è diviso in due parti:
Una funzione che cerca le immagini presenti nel post
- Uno script da inserire nel CHILD THEME al posto della funzione per mostrare le thumbnail
- Una funzione che va a cercare le immagini non attached al post ma presenti sotto forma di link
Come funziona la gestione delle immagini in WordPress:
Quando scrivete un post, utilizzando il pulsante aggiungi media, potete caricare immagini che vengono attached al post. Questo significa che nel database verra inserito un record con tutti i dati dell’immagine, con un ID univoco e con la correlazione al post.
Potete anche inserire, semplicemente, il link a un’altra immagine NON attached al post, ma attached a un altro post o anche presente su altri domini.
Lo script che ho creato gestisce tutti questi casi
La logica dello script:
Per prima cosa lo script verifica se è impostata l’immagine in evidenza.
Se è impostata la visualizza e tutto finisce.
Se non è impostata verifica se ci sono immagini attached al post.
Se ci sono, prende la prima immagina e la imposta, automaticamente, come immagine in evidenza e la visualizza.
Dal prossimo accesso al post l’immagine in evidenza è impostata e quindi si ferma al primo step.
Se non ci sono immagini attached al post viene richiamata la funzione che cerca le immagini inserite solo tramite link.
Se ne trova, ne prende una e la visualizza come immagine in evidenza. Attenzione che NON la imposta come immagine in evidenza.
Se non trova immagini ne visualizza una scelta da voi.
La funzione per trovare le immagini presenti nel post solo come link:
Questa funzione dovete inserirla nel file functions.php
; del vostro CHILD THEME, oppure in un vostro plugin di utilità.
function wolly_get_first_post_image(){
if( $output = preg_match_all( '/<img.+src=\'"[\'"].*>/i', $post->post_content, $matches ) ){
$first_img = $matches[1][0];
} else {
$first_img = 'http://yoururl.tld/image-url';
}
return $first_img;
}
Lo script per sostituire la funzione del vostro tema che visualizza le immagini in evidenza:
if ( has_post_thumbnail() ) {
the_post_thumbnail();
} else {
$images = get_attached_media( 'image' );
if ( ! empty( $images ) ){
$image = reset($images);
$first_image = $image->ID;
set_post_thumbnail( $post_id, $first_image );
the_post_thumbnail();
} else {
echo '<a href="'; the_permalink(); echo '" class="thumbnail-wrapper">';
echo '<img src="'; echo wolly_get_first_post_image(); echo '" alt="" />';
echo '</a>';
}
}
Per qualsiasi dubbio, suggerimento o proposte di miglioramento, scrivete nei commenti.
la butto lì…
fare un filtro su “post_thumbnail_html” in modo da farlo funzionare senza modificare il codice del template?
get_the_post_thumbnail (https://developer.wordpress.org/reference/functions/get_the_post_thumbnail/ ) ci regala un bel filtro a fine funzione…
return apply_filters( ‘post_thumbnail_html’, $html, $post->ID, $post_thumbnail_id, $size, $attr );
Ci avevo pensato, ma ogni tema fa a modo suo.
Quasi sempre mettono un costrutto if per verificare se c’è la thumbnail.
Se però hai qualche idea per implementarlo sul filtro, sei il benvenuto.
A breve metto tutto su github
Ciao,
è possibile inserire una immagine in evidenza con un link al suo url? Ad esempio: se volessi inserire una immagine non prendendola dalla libreria dei media di Wordpress ma da un sito di hosting di immagini, come posso fare?