Come risolvere il problema di ridimensionamento invece di ritaglio con the_post_thumbnail in WordPress
Recentemente volevo migliorare il mio blog con immagini in evidenza/thumbnail degli articoli. Sto usando un tema personalizzato basato sul tema roots (non credo sia un problema specifico del tema roots). L'immagine che carico è 1024x768 e dovrebbe essere ritagliata in formato letterbox 1024x512.
Questo è il codice che sto usando nel file del tema:
<?php
if ( has_post_thumbnail() ) {
the_post_thumbnail(array(1024, 512), array('class' => 'img-responsive')); // aggiunge la thumbnail dell'articolo
}
?>
Ora, il problema è che sulla mia installazione locale XAMPP funziona perfettamente. Ma sul server web le immagini non vengono ritagliate e non occupano tutta la larghezza dell'area dei contenuti principali, come invece avviene nell'installazione locale. Controllando il codice con Firebug, l'immagine è larga 682px e alta 512px (mentre dovrebbe essere 1024 x 512px come nella versione XAMPP). Quello che succede è che l'immagine viene ridimensionata, non ritagliata.
Ho ricaricato il tema e ho disabilitato tutti i plugin. Naturalmente ho cercato argomenti correlati, provato altri esempi di codice, verificato che GD sia abilitato - lo è - e rigenerato le thumbnail. Niente di tutto questo ha risolto il problema.
Ogni idea è ben accetta.

Secondo la voce del Codex per the_post_thumbnail()
, passare un array non funziona da WordPress 3.0 in poi:
NOTA BENE: Il ritaglio non funziona in WP 3.0+. Tutto ciò che serve per WP 3.0+ è la chiamata per la miniatura del post. Quindi procedi su Media nel pannello di controllo e imposta la tua miniatura per ritagliare alla dimensione che desideri utilizzare.
L'implementazione corretta è creare una dimensione immagine personalizzata con i valori del tuo array, tramite add_image_size()
all'interno della funzione di setup del Tema (o qualsiasi altro callback agganciato a after_setup_theme
):
add_image_size( 'custom-size', 1024, 512, true );
...poi chiama direttamente quella dimensione:
the_post_thumbnail( 'custom-size' );

Normalmente, se vuoi ritagliare una miniatura devi specificarlo utilizzando "true" come terzo parametro.
array(1024, 512, true)
Almeno così si fa quando definisci una dimensione per le miniature nel tuo functions.php. Quindi immagino che dovrebbe funzionare anche nell'array di the_post_thumbnail :) E se non funzionasse, potresti sempre definire una dimensione per le miniature nel tuo functions.php e usare quella...
Ecco un riferimento: http://codex.wordpress.org/Function_Reference/set_post_thumbnail_size

Ecco cosa ha risolto il problema (forse non la soluzione più elegante, ma funziona per il momento):
In custom.php (il functions.php del tema roots) ho aggiunto questo:
if ( function_exists( 'add_theme_support' ) ) {
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size(1024, 512, true);
}
Nel file del tema dove deve apparire l'immagine in evidenza ho aggiunto questo:
if ( has_post_thumbnail() ) {
the_post_thumbnail(array(1024, 512, true), array('class' => 'img-responsive')); // aggiunge l'immagine in evidenza
}
?>
Ciò che non capisco è che nessuna delle due funziona senza l'altra. Comunque, risolve il problema per ora
