Siccome questo sito non è l’unico in cui ho le mani in pasta, mi hanno chiesto di realizzare una piccola specie di “easter egg” per un’altro sito basato su WordPress. Sostanzialmente cliccando un link nascosto nella pagina, si cambia il theme (solo per l’utente che ha cliccato) e anche la lingua (di modo da poter fare una traduzione più simpatica). Non avendo io le conoscenze e il tempo necessario per fare un plugin e/o un beautiful hack, mi sono messo al lavoro per una delle mie solite modifiche sporche e inconsistenti. Però funzionanti.
Come prima cosa, ho creato un file dal nome custom.php dove ho messo queste righe:
<?php
$expire=time()+60*60*24;
if (isset($_GET['go_pirate'])) {
setcookie(“lang”, “pi_PI”, $expire);
setcookie(“theme”, “pirate”, $expire);
}
if (isset($_GET['go_italian'])) {
setcookie(“lang”, “it_IT”, $expire);
setcookie(“theme”, “italian”, $expire);
}
header(“location: http://…”);
?>
Questo file verrà richiamato dal browser come custom.php?go_pirate o custom.php?go_italian e imposterà dei cookies con scadenza fissata in 24 ore. Al termine dell’esecuzione con un apposito header istruisce il browser per andare automaticamente ad un altro indirizzo ( http://… va sostituito con l’indirizzo dell’homepage [o qualsiasi altra pagina] del sito in questione).
Ora che abbiamo il file che imposta i cookies (un’altra possibilità sarebbe salvare nella sessione, $_SESSION ) non ci serve altro che un link nascosto nei due theme, che come ormai avrete capito sono uno in italiano e l’altro in piratese (ecco spiegato anche il cambio di lingua), nel tema italiano il link dev’essere a `custom.php?go_pirate` mentre in quello pirata a `custom.php?go_italian`. Il file custom.php dev’essere raggiungibile, quindi attenzione a come lo richiamate se state usando l’url rewriting.
Ora due modifichine ai seguenti file, prima wp-config.php, nella cartella principale di wordpress, circa alla linea 70, dovete sostituire la linea contenente `define (‘WPLANG’, ‘it_IT’);` con:
$wp_tmp_lang = $_COOKIE["lang"];
if ($wp_tmp_lang == ‘it_IT’ || $wp_tmp_lang == ‘pi_PI’) {define (‘WPLANG’, $wp_tmp_lang);}
else { define (‘WPLANG’, ‘it_IT’);} /* <<– Default language –>> */
Poi nella sottodirectory wp-includes il file functions.php, dovete modificare la funzione `get_option` nel mio file alla linea 321, e all’inizio della funzione dovete inserire queste righe:
if ( in_array($setting, array(‘current_theme’,'template’,'stylesheet’) ) ) {
$wp_tmp_theme = $_COOKIE["theme"];
if ($wp_tmp_theme == ‘italian’ || $wp_tmp_theme == ‘pirate’) {return $wp_tmp_theme;}
}
io l’ho inserita subito dopo la dichiarazione della variabile `global $wpdb;`
Ecco fatto, ora dovete solo avere due theme che si chiamano `italian` e `pirate` e due lingue `it_IT` e `pi_PI` (per sapere come si crea una nuova lingua, cercate in rete, troverete molto materiale), e avrete il vostro tema selezionabile.