Avete anche voi perso tempo e capire perchè TimThumb non funziona con le configurazioni Network di WordPress 3+ ?
Molti temi ancora lo usano per fare il “crop” delle immagini, anche se Wp oggi ha un’ottimo sistema di gestione immagini. Io di solito mi riscrivo i temi evitando di usare lo script, ma a volte è capitato di non porterlo fare… come risolvere?
La risposta è semplice: WP3+ in configurazione network usa un sistema di Rewrite per identificare le immagini che sono tutte contenute in un unica cartella “blogs.dir”. L’indirizzamento viene effettuato dal file .htaccess e la url è del tipo miodominio.tld/files/path/to/image.jpg. Il problema è che lo script di Timthumb non riesce a reindirizzare la url alla risorsa “vera” nella cartella blogs.dir.
Ecco la soluzione:
1. Troviamo il file timthumb.php sul vostro tema.
2. Aggiungiamo
require_once('../../../wp-blog-header.php');
all’inizio dello script (o almeno subito dopo la parte commentata di intestazione) per richiamare le variabili globali di WordPressm tra cui l’ID del blog in cui ci troviamo (ricordiamoci che siamo in un Network di Blog) . Mi raccomando di fare attenzione al percorso “../../..etc…” che cambia in base alla posizione del file sul server. Nel mio caso il file era nella stessa posizione dei file di template tel tema.
3. Sostituiamo la funzione clean_source($src) (fate un find&replace per trovarla) con questa
/**
* tidy up the image source url
*
* @param $src
* @return string
*/
function clean_source ($src) {
$host = str_replace ('www.', '', $_SERVER['HTTP_HOST']);
$regex = "/^((ht|f)tp(s|):\/\/)(www\.|)" . $host . "/i";
$src = preg_replace ($regex, '', $src);
$src = strip_tags ($src);
$src = str_replace (' ', '%20', $src);
$src = check_external ($src);
// remove slash from start of string
if (strpos ($src, '/') === 0) {
$src = substr ($src, -(strlen ($src) - 1));
}
// don't allow users the ability to use '../'
// in order to gain access to files below document root
$src = preg_replace ("/\.\.+\//", "", $src);
//gdg: wp mu & wp 3 multisite fix
global $blog_id;
$src = preg_replace("/files/", "/wp-content/blogs.dir/$blog_id/files/", $src);
// get path to image on file system
$src = get_document_root ($src) . '/' . $src;
return $src;
}
Noterete subito le differenze e il punto in cui il path viene sostituito con quello reale.
Questo è quanto, a presto!
Questo Blog fa parte del Network
Ho provato, ho seguito tutto passo passo.. ma non funziona..
Hai modo d’aiutarmi?
Dimmi pure Andrea,
cosa non va?
Se vuoi più praticamente contattami su Twitter @enricocorinti
Ciao!
Ciao! …sei l’unico che tratta il problema, pare, (almeno in italiano!) …però non sembra funzionare sul mio sito (ci sto lavorando in locale), secondo me dipende dalla path che consigli di specificare: “/wp-content/blogs.dir/$blog_id/files/” …perchè poi vengono dinamicamente create altre directory dentro cui wp stocca i files, precisamente così “/anno/mese” …purtroppo non parlo bene il piaccapiese e non saprei come correggerla…hai qualche altro suggerimento per caso? Grazie mille!
Buongiorno Enrico, sono arrivato al tuo blog cercando soluzioni in rete per risolvere il problema con timthumb che non mi visualizza le immagini. Volevo chiederti dove posso trovare la funzione clean_source($src) visto che facendo un trova sul file php non riesco a trovarlo. Grazie
Ciao Roberto,
credo che le differenze siano dovute ai nuovi aggiornamenti dopo i bug dell’estate ( http://www.monetizzando.com/bug-wordpress-timthumb-malware-trojan-agosto2011/ )
puoi trovare la funzione “clean_source($src)” a riga 744 della vecchia versione, mentre se usi la nuova versione ( che trovi qui http://code.google.com/p/timthumb/ ) puoi seguire quest’altro tutorial
http://spenserbaldwin.com/wordpress/using-timthumb-php-on-wordpress-network/
Spero possa funzionare