WordPress: inserire l'ultimo tweet nell'header

WordPress: inserire l'ultimo tweet nell'header

Inserire l'ultimo tweet nell'header di un tema di WordPress è una caratteristica che personalmente preferisco implementare usando PHP. Il motivo è semplice: se Twitter è down e il feed del vostro status non è raggiungibile, JavaScript bloccherà il caricamento della pagina. Questo avviene perchè tutti i widget JavaScript disponibili non sono stati scritti tenendo presente questa problematica. Il browser rimarrà in attesa del feed fino a quando non entrerà in timeout. Inoltre JavaScript non ha alcun controllo sulla tempistica dei caricamenti delle risorse, eccezion fatta per il metodo setTimeout() che, in linea teorica, dovrebbe poter essere impiegato per questo scopo ma che in pratica si rivela inadatto. PHP invece può stabilire da subito se il feed è disponibile e visualizzare un messaggio di avvertimento. Vediamo come.

Inserite nel file functions.php del vostro tema il seguente codice (se non esiste createne uno):


function get_latest_tweet($twitter_user = 'gabromanato') {
	$html = '';
	$html .= '<div id="latest-tweet">';
	$url = "http://twitter.com/statuses/user_timeline/$twitter_user.xml?count=1";
	
	if(file_get_contents($url)) {
	
		$xml = new SimpleXMLElement(file_get_contents($url));
		$status = $xml->status->text;
		$time = nice_time(strtotime($xml->status->created_at));
		$tweet = preg_replace('/http:\/\/(.*?)\/[^ ]*/', '<a href="\\0">\\0</a>', $status);
	
	
		$html .= '<div id="tweet">' . $tweet . '</div>';
		$html .= '<div id="tweet-time">' . $time . '</div>';
	} else {
	
		$html .= '<div id="tweet">Twitter non risponde.</div>';
	
	}
	
	$html .= '</div>';
	
	return $html;
	
}

function nice_time($time) {
  $delta = time() - $time;
  if ($delta < 60) {
    return 'meno di 1 minuto fa.';
  } else if ($delta < 120) {
    return 'circa 1 minuto fa.';
  } else if ($delta < (45 * 60)) {
    return floor($delta / 60) . ' minuti fa.';
  } else if ($delta < (90 * 60)) {
    return 'circa 1 ora fa.';
  } else if ($delta < (24 * 60 * 60)) {
    return 'circa ' . floor($delta / 3600) . ' ore fa.';
  } else if ($delta < (48 * 60 * 60)) {
    return '1 giorno fa.';
  } else {
    return floor($delta / 86400) . ' giorni fa.';
  }
}

La funzione get_latest_tweet() accetta come unico parametro il vostro nome utente su Twitter. Calcola inoltre il tempo trascorso dall'ultimo tweet e formatta gli URL testuali in link HTML.

Aprite quindi il file header.php del vostro tema ed usate la funzione in questo modo:


<div id="header">

	<div id="branding">
	
		<h1><a href="#">Nome Sito</a></h1>
		<p id="description">Descrizione sito</p>
	
	</div>
	
	<?php echo get_latest_tweet(); ?>

</div>

La funzione restituisce il seguente codice HTML:


<div id="latest-tweet">
	<div id="tweet"><!--il vostro tweet--></div>
	<div id="tweet-time"><!--il tempo trascorso dall'ultimo tweet--></div>
</div>

Potete usare i CSS per definirne la presentazione:


#latest-tweet {
	float: right;
	width: 30%;
	padding: 1em 1em 1em 90px;
	background: url(twitter.png) no-repeat 0 50%;
}

#tweet {
	line-height: 1.4;
	font-size: 90%;
}

#tweet a {
	color: #f96;
}

#tweet-time {
	font-style: italic;
	font-size: 85%;
	padding-top: 5px;
}

Potete visionare l'esempio finale in questa pagina.

Torna su