La funzione di WordPress wp_get_attachment_metadata() si rivela fondamentale per creare slideshow che si adattino alle immagini e non il contrario. Infatti molti plugin per WordPress presuppongono che le immagini allegate ai post siano della dimensione ideale per lo slideshow, ma molto spesso non è così. Spetta sempre a chi gestisce il sito il compito di uploadare e associare le immagini più adatte al post da inserire nel flusso dello slideshow. Ma se sul sito sono già presenti numerosi post ed immagini e il plugin viene inserito in un secondo tempo, ecco che sorge il problema di adattare le immagini al plugin. Vediamo come ovviare a questo problema.
Uso della funzione wp_get_attachment_metadata()
Questa funzione opera nel Loop ed ha bisogno come parametro fondamentale dell'ID dell'immagine allegata. Restituisce un array associativo contenente molte informazioni sull'immagine, comprese larghezza e altezza. Eccone un uso tipico:
$args = array(
'post_type' => 'attachment',
'numberposts' => -1,
'post_status' => null,
'post_parent' => $post->ID
);
$attachments = get_posts( $args );
if ( $attachments ) {
foreach ( $attachments as $attachment ) {
print_r(wp_get_attachment_metadata( $attachment->ID);
}
}
Ed ecco l'output per l'immagine estrapolata dall'array:
Array ( [width] => 643 [height] => 125 [hwstring_small] => height='24' width='128' [file] => 2011/12/css-vertical-caption.png [sizes] => Array ( [thumbnail] => Array ( [file] => css-vertical-caption-150x125.png [width] => 150 [height] => 125 ) [medium] => Array ( [file] => css-vertical-caption-300x58.png [width] => 300 [height] => 58 ) [small-feature] => Array ( [file] => css-vertical-caption-500x97.png [width] => 500 [height] => 97 ) ) [image_meta] => Array ( [aperture] => 0 [credit] => [camera] => [caption] => [created_timestamp] => 0 [copyright] => [focal_length] => 0 [iso] => 0 [shutter_speed] => 0 [title] => ) )
L'array associativo ha ogni tipo di informazione sull'immagine, ma a noi interessano solo la larghezza e altezza effettive:
$meta = wp_get_attachment_metadata($attachment->ID);
$width = $meta['width'];
$height = $meta['height'];
È chiaro che se conosciamo le dimensioni di ciascuna immagine allegata possiamo adattare lo slideshow all'immagine:
[php htmlscript="true"] <script type="text/javascript"> $(function() { $('#slider').sliderPlugin({ <?php if($width < 600 && $width > 490) { echo 'width: 500,' . "\n"; } else { echo 'width: 600,' . "\n"; } if($height < 300 && $height > 190) { echo 'height: 200' . "\n"; } else { echo 'height: 300' . "\n"; } ?> }); }); </script>Ovviamente si tratta di un esempio molto rudimentale, ma vi consiglio di provare a sperimentare qualcosa con questa funzione per vederne i benefici.