La nuova funzionalità delle miniature di WordPress, introdotta con la versione 2.9 e discussa in WordPress 2.9+: la nuova funzione post thumbnails, può essere automatizzata tramite un semplice script in PHP. Questo può risultare comodo quando “ci si scorda” di inserire le miniature su ogni articolo o se si vuole aggiornare il pregresso. Lo script qui presentato, tuttavia, parte dai seguenti presupposti:
- Imposta le miniature solo sui POST
- La miniatura è l’attachment (immagine) del POST
Nulla vieta, comunque, di modificare e personalizzare le Query qui esposte. Il loop centrale è:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // Seleziona tutti i Post pubblicati (escluse quindi revisioni) $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'post' AND post_status = 'publish' ORDER BY ID"; $posts = $wpdb->get_results($sql); foreach($posts as $post ) { // Se il post non ha la miniatura if( !hasPostThumbnail( $post->ID )) { // Cerca se tra gli attachment ne esuste uno collegato al post in questione if( ($post_attachment_id = hasPostImageAttachment( $post->ID) ) > 0) { $sql = "INSERT INTO $wpdb->postmeta (`post_id` , `meta_key` , `meta_value` ) VALUES ('$post->ID', '_thumbnail_id', '$post_attachment_id')"; $res = $wpdb->query($sql); } else { nslog("Impossibile associare una miniatura al post [$post->post_title] - $post->ID"); } } } |
Le due funzioni di servizio sono:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | // Controlla che un post abbia la miniatura function hasPostThumbnail($post_id) { global $wpdb; $sql = "SELECT * FROM $wpdb->postmeta WHERE post_id = $post_id AND meta_key = '_thumbnail_id'"; $res = $wpdb->get_row($sql); return (!is_null($res)); } // Verifica che il post_id abbia un attachment di tipo image function hasPostImageAttachment($post_id) { global $wpdb; $sql = "SELECT * FROM $wpdb->posts WHERE post_type = 'attachment' AND post_mime_type LIKE '%image%' AND post_parent = $post_id"; $post = $wpdb->get_row($sql); if ( count($post) > 0 ) { return $post->ID; } else { return 0; } } |








11
Ottimo post! Sicuramente utilissimo!
Scusa… dove devo inserire questi pezzi di codice?
P.S. è possibile creare in automatico la thumbnail a partire dalla prima immagine inserita nell’articolo?
@Carlo: il primo codice può essere inserito all’interno di una funzione qualsiasi (all’interno del file
functions.php) o su una pagina template custom. Il secondo codice sono due funzione di servizio usate dalla prima. Queste, sicuramente, puoi inserirli tranquillamente nel filefunctions.phpdel tuo tema.La funzione
hasPostImageAttachment()esegue il controllo da te richiesto: verifica che un post abbia almeno un’immagine in attach.Il primo codice, quindi, fa esattamente quello che chiedi tu: crea i thumbnail su tutti i post (anche quelli già pubblicati) prendendo la prima immagine in attach al post stesso.
Se hai altri dubbi ciedi pure.
Ciao,
grazie per le info. Volevo chiederti è possibile impostare nei codici indicati nel tuo post, le dimensioni delle vecchie immagini controllate tramite campi personalizzati come in quelle definite con la nuova funzione di wordpress? Spero potrai aiutarmi, a presto
Tiziana
Ma se invece volessi escludere le miniature in tutti i miei post come devo fare? Di default, quando inserisco l’immagine in evidenza, compare una thumb che non voglio assolutamente… ho individuato (credo) la parte di codice che mi iteressa:
2
3
set_post_thumbnail_size( 130, 130, true ); // Normal post thumbnails
add_image_size( 'single-post-thumbnail', 250, 250 ); // Permalink thumbnail size
ma non capisco un granchè! aiutatemi!