Good Ideas

Gestire le immagini su WordPress: Cleverthumb versione 2

Gestire le immagini su WordPress può essere impegnativo. Spesso si ha la necessità di avere a disposizione le immagini contenute nel testo dell’articolo o semplicemente quelle allegate al post. Ma cosa succede se facciamo uso di immagini esterne o se i nostri autori fanno il copia&incolla di testo da altre fonti contenenti immagini? CleverThumb è una funzione che in questi casi può esservi di aiuto!

cleverthumb2

Tempo fa avevo pubblicato un articolo dove spiegavo il funzionamento di cleverthumb, una funzione di mia creazione. Oggi siamo arrivati alla versione 2 che contiene alcuni miglioramenti sostanziali.

Funzionamento

CleverThumb è una funzione che va inserita nel file functions.php all’interno del tema corrente di WordPress. Passando a questa funzione l’id del post, CleverThumb riesce a restituire la prima immagine utile, ridimensionata secondo le misure passate come parametro. Inoltre la miniatura (thumbnail) viene messa nella cache: tutte le richieste successive alla prima faranno uso dell’immagine già creata, riducendo così le risorse necessarie.

Rispetto alla versione precedente, CleverThumb2 si è adattata alle nuove funzionalità di WordPress, cercando le immagini allegate al post (attachment). Inoltre, in presenza di immagini esterne, cerca di scaricarle sul server locale.

La funzione ha due blocchi logici principali: la ricerca dell’immagine e il suo ridimensionamento. La ricerca dell’immagine segue questo iter:

  1. Viene cercata la prima immagine in allegato al post
  2. Viene parserizzato il testo alla ricerca di tag IMG
  3. Se l’immagine trovata negli step 1 o 2 è esterna, viene scaricata sul server locale

Parametri di CleverThumb

I parametri della funzione sono:

  • id: l’id del post
  • width: la larghezza della miniatura risultante
  • height: l’altezza della miniatura risultante
  • only_src: se true, viene restituito solo il path della miniatura, altrimenti viene generato l’intero markup IMG
  • alt: l’attributo alt del markup IMG
  • attr: altri attributi del markup IMG

Impostazioni iniziali

La funzione va incollata nel file functions.php all’interno del tema corrente di WordPress (wp-content/themes/xxx/functions.php).

Dovete anche caricare il file class.ImageToolbox.php e configurare la variabile, indicando l’esatta posizione della classe ImageToolBox.

Per ultimo, dovete specificare dove andranno salvati i thumbnail: è una cartella a vostra scelta che dovrà avere i permessi di scrittura 777.

Sorgente e Download del pacchetto

Potete scaricare il pacchetto completo (funzione e classe ImageToolBox) oppure analizzare semplicemente il codice sorgente:

function cleverThumb($id, $width=50, $height=50, $only_src=false, $alt="", $attr=""){
//ini_set('display_errors', 1);
global $wpdb;
/* CONFIGURE THESE VARIABLES */

# Set the path where the class.ImageToolbox.php is
$imageToolBox_path  = dirname(__FILE__)."/scripts/class.ImageToolbox.php";

# Set the destination path where the thumbs will be saved
$synPublicPath      = "/wp-content/uploads/thumbs/";

/* STOP. Modify at your own risk */
include_once ($imageToolBox_path);
$src="";

$images = get_children(array('post_parent' => $id,'post_status' => 'inherit','post_type' => 'attachment','post_mime_type' => 'image','order' => 'ASC','orderby' => 'menu_order'));
if ( $images ) {
//echo "<pre>";print_r($images);echo "</pre>";
$images=array_reverse($images);
$image=array_pop($images);
$img = wp_get_attachment_image_src( $image->ID, 'full' );
$image_src=$img[0];
}

if ($image_src=="") {
$the_content =$wpdb->get_var("SELECT post_content FROM $wpdb->posts WHERE ID = $id");
$pattern = '!<img.*?src="(.*?)"!';
preg_match_all($pattern, $the_content, $matches);
$image_src = $matches['1'][0];
}
if ($image_src=="") return;

$image_src_arr = parse_url($image_src);

if ($image_src_arr['host']!="" and false) {
$loc=$synPublicPath.str_replace(array('/','+'),'-',$image_src_arr['path']);
if (!file_exists($_SERVER['DOCUMENT_ROOT'].$loc)) {
if( ini_get('allow_url_fopen') ) {
copy($image_src, getenv("DOCUMENT_ROOT").$loc);
} else return;
}
$image_src = $loc;
$image_src_arr = parse_url($image_src);
}

$img=$image_src_arr["path"];
$imgArr = @getimagesize(getenv("DOCUMENT_ROOT").$img);

$resultimg   = $synPublicPath.$imgArr[0]."x".$imgArr[1]."-".basename($img);
$typeArr=split("/",$imgArr['mime']);
$type=$typeArr[1];

if (!file_exists($_SERVER['DOCUMENT_ROOT'].$img)) return;

$tmb_exists  = file_exists($_SERVER['DOCUMENT_ROOT'].$resultimg);
$img_created = date("Y-m-d H:i:s", @filectime($_SERVER['DOCUMENT_ROOT'].$img));
$tmb_created = date("Y-m-d H:i:s", @filectime($_SERVER['DOCUMENT_ROOT'].$resultimg));
$imgArr = @getimagesize(getenv("DOCUMENT_ROOT").$resultimg);

if ($tmb_exists) $sameSize= ($imgArr["width"]==$width) and ($imgArr["height"]==$height);
if (!$tmb_exists || ($tmb_exists && ($img_created > $tmb_created)) || !$sameSize ){
$thumbnail = new Image_Toolbox(getenv("DOCUMENT_ROOT").$img);
$thumbnail-> setResizeMethod('resample');
$thumbnail-> newOutputSize($width, $height, 1, false, '#FFFFFF');
$thumbnail-> save(getenv("DOCUMENT_ROOT")."/".$resultimg, $type);
}
if ($only_src===true) return $resultimg;
else return "<img src=\"".$resultimg."\" alt=\"".str_replace("\"","",htmlentities($alt))."\" ".$attr."/>";
}

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *