WordPress: gestione intelligente delle immagini in evidenza

WordPress: gestione intelligente delle immagini in evidenza

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.

Torna su