Come impostare in automatico le miniature su tutti i Post

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;
    }
}

5 commenti a: “Come impostare in automatico le miniature su tutti i Post”

  1. 28 apr, 2010 Napolux:

    Ottimo post! Sicuramente utilissimo!

  2. 07 gen, 2011 Carlo:

    Scusa… dove devo inserire questi pezzi di codice?
    P.S. è possibile creare in automatico la thumbnail a partire dalla prima immagine inserita nell’articolo?

  3. 09 gen, 2011 Giovambattista Fazioli:

    @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 file functions.php del 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.

  4. 16 mar, 2011 Tiziana:

    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

  5. 24 set, 2011 Daniela:

    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:

    1
    2
    3
    add_theme_support( 'post-thumbnails', array( 'post' ) );
    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!

Lascia un commento

TAG XHTML PERMESSI: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> INSERIMENTO CODICE:
<pre></pre> // blocco generico
					<code></code> // blocco generico
					[cc_actionscript][/cc_actionscript] // Actionscript
					[cc_actionscript3][/cc_actionscript3] // Actionscript 3
					[cc_css][/cc_css] // CSS Style Sheet
					[cc_html][/cc_html] // HTML
					[cc_js][/cc_js] // Javascript
					[cc_objc][/cc_objc] // Objective-C
					[cc_php][/cc_objc] // PHP
					[cc_sql][/cc_sql] // SQL


Stop SOPA