Good Ideas

CleverThumb: una funzione WordPress per gestire le immagini

Posted by:

|

On:

|

Spesso capita di dover personalizzare il proprio blog inserendo viste di articoli come gli articoli più popolari, gli articoli correlati o i più commentati. Oltre al titolo è sempre consigliato inserire anche un’immagine dell’articolo, magari una miniatura. Oggi vi spiego come estrapolare l’immagine dall’articolo, creare la miniatura, salvarla nella cache, e renderla disponibile sul blog.

CleverThumb for wordpress

Prendendo spunto dal lavoro dell’infallibile Marco Pozzato, ho elaborato il “CleverThumb for WordPress“, una funzione che, dato l’ID di un post per WordPress, crea la miniatura (il thumbnail) e restituisce direttamente il tag già pronto per l’uso.

Requisiti

Prima di procedere è necessario eseguire un paio di operazioni per far funzionare l’intero sistema. Sono questi:

  1. Caricare il file class.ImageToolbox.php all’interno della cartella del proprio template, nella cartella “/scripts“. E’ una classe per la manipolazione delle immagini tramite php, di Martin Theimer.
  2. Assegnare i diritti di scrittura alla cartella destinazione delle miniature (/wp-content/uploads/thumbs)

CleverThumb

La funzione che trovate qui sotto va incollata all’interno del file functions.php che trovate di solito tra i file del vostro template.

[code lang=”php”]/*
cleverThumb ® for WordPress
Create a thumbnail bringing the first image from the wordpress post. It create
the thumb if it isn’t already created, otherwise it is dispatched the cached one.
The output is a <img> markup<img>.
——————————————————————————
Parameters:
– Post ID: the ID of the wordpress post
– Width: the width of the thumbnail
– Height: the height of the thumbnail
– Alt: the alternate text for the <img> markup
– Attr: other html attribute to be added to the <img> markup. I.e. "border=’0’"

*/
function cleverThumb($id, $width=50, $height=50, $alt="", $attr=""){
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="";
$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);
$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);
}
return "<img src=\"".$resultimg."\" alt=\"".str_replace("\"","",htmlentities($alt))."\" ".$attr."/>";
}[/code]

Potete scaricare il codice della funzione da questo file, in questo modo siete certi di avere il codice corretto da eventuali html entities. Dovete accertarvi della correttezza del valore delle due variabili, $imageToolBox_path e $synPublicPath. A questo punto potete usare la funzione CleverThumb all’interno dei vostri file di template, nel Loop di WordPress o in qualsiasi altra posizione. Eccovene un esempio:

[code lang=”PHP”]
echo cleverThumb(get_the_ID(), $width=50, $height=50, $alt=strip_tags(get_the_tag_list(”,’, ‘,”)) )
[/code]

Conclusioni

Nell’ottica di scrivere un tutorial per ricreare il box “Articoli corretali” che trovate sotto a ogni articolo di Dynamick, ho ritenuto propedeutico pubblicare questo post. Accetto le vostre segnalazioni e suggerimenti.

Lascia un commento

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