Uno dei problemi più frequenti in WordPress è la gestione delle immagini in evidenza nel caso in cui non venga specificata un'immagine dall'autore del post. Vediamo come risolvere questo problema.
Possiamo definire la seguente funzione di utility:
if( !function_exists( 'my_featured_image' ) ) {
function my_featured_image( $args ) {
global $post;
$post_id = $post->ID;
$html = '';
$defaults = array(
'size' => 'thumbnail',
'timthumb' => false,
'sizes' => array(
'width' => 150,
'height' => 150
)
);
$args = wp_parse_args( $args, $defaults );
extract( $args, EXTR_SKIP );
if( has_post_thumbnail( $post_id ) ) {
$thumb_id = get_post_thumbnail_id( $post_id );
if( !$timthumb ) {
$featured_image = wp_get_attachment_image_src( $thumb_id, $size );
$src = $featured_image[0];
$html = '<img src="' . $src . '" alt="" class="featured-image" />';
} else {
$featured_image = wp_get_attachment_image_src( $thumb_id, 'full' );
$src = $featured_image[0];
$html = '<img src="' . get_template_directory_uri() . '/timthumb.php?src=' . $src;
$html .= '&w=' . $sizes['width'] . '&h=' . $sizes['height'] . '&q=100" class="featured-image" />';
}
} else {
$html = '<img src="http://placehold.it/' . $sizes['width'] . 'x' . $sizes['height'] . '" alt="" class="featured-image" />';
}
echo $html;
}
}
Abbiamo definito degli argomenti di default per la nostra funzione. size
verrà usato nel caso in cui vogliamo utilizzare le dimensioni già definite in WordPress. L'argomento
timthumb
serve invece a stabilire se vogliamo usare la libreria TimThumb, nel qual caso sfrutteremo la larghezza e l'altezza definite nell'array sizes
.
Quando un post non ha un'immagine in evidenza, la funzione genera delle immagini segnaposto utilizzando un servizio online sfruttando le dimensioni definite nell'array sizes
.
Volendo potete sostituire il servizio online usando delle immagini segnaposto definite nei file del vostro tema.
Ecco un esempio d'uso:
<?php
my_featured_image(
array(
'size' => 'my-custom-size',
'sizes' => array(
'width' => 640,
'height' => 300
)
)
);
?>
In questo caso stiamo utilizzando una dimensione personalizzata del nostro tema e come larghezza ed altezza per le immagini segnaposto utilizzeremo gli stessi valori usati con la funzione
add_image_size()
. Come si può notare non stiamo utilizzando la libreria TimThumb.