Appunti WordPress

2 Aprile 2011

Altro post per tecnici anziani della serie “se le cose non me le scrivo da qualche parte poi le dimentico e perdo una vita a reinventare la ruota”.

Visualizzare gli ultimi video di un feed YouTube

Ne avevo già parlato in un vecchio post. A inizio anno ho ripreso in mano quel progetto e ho scoperto che la funzione fetch_rss() è obsoleta.
Niente di preoccupante, la nuova funzione si chiama fetch_feed() (pagina relativa sul Codex) e questo è un esempio di codice (oltre al video viene inserito anche il titolo).

< ?php
include_once(ABSPATH . WPINC . '/feed.php');

// $url = indirizzo del canale
$rss = fetch_feed($url);
if (!is_wp_error( $rss ) ) : 
	// Verifica se l'oggetto è stato creato correttamente	
	// Individua il numero di video presenti, al massimo leggine 3. 
	$maxitems = $rss->get_item_quantity(3);
    // Crea un array di tutti gli elementi (il primo elemento ha indice 0).
    $rss_items = $rss->get_items(0, $maxitems);
endif;
?>

<h3>Video</h3>
<ul>
< ?php if ($maxitems == 0) echo '<li>Nessun video disponibile';
else foreach ( $rss_items as $item ) : ?>
<li>
< ?php
$youtubeid = strchr($item->get_permalink(),'='); //elimina la parte finale dell'URL a partire da '='
$youtubeid = substr($youtubeid,1); //rimuovi il segno '=' per ottenere l'ID del video
$youtubetitle = $item->get_title();
//Inserisci il video
?>
<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="240" height="176">
<param name="movie" value="http://www.youtube.com/v/<?php echo $youtubeid ?>&amp;hl=en&amp;fs=1" />
<!--[if !IE]>-->
<object type="application/x-shockwave-flash" data="http://www.youtube.com/v/<?php echo $youtubeid ?>&amp;hl=en&amp;fs=1" width="240" height="176">
<!--<![endif]-->
<p><a href="http://www.youtube.com/v/<?php echo $youtubeid ?>">Visualizza il video&raquo;</a></p>
<!--[if !IE]>-->
</object>
<!--<![endif]-->
</param></object>
<span>< ?php echo $youtubetitle; ?></span>
</li>
< ?php endforeach; ?>
</ul>

Il risultato finale è visibile nella home page di questo sito.

Frequenza di aggiornamento dei feed

WordPress mantiene una cache dei feed e non è particolarmente rapido ad aggiornarla. Per modificare questa impostazione è possibile aggiungere questo codice al file functions.php, impostando il numero di secondi desiderato.


//Cache per aggiornamento feed impostata a 30 minuti
add_filter( 'wp_feed_cache_transient_lifetime', create_function('$a', 'return 1800;') );	

Blog multilingua

In questi giorni sto provando qTranslate per un nuovo sito e mi sembra decisamente ben fatto. È possibile inserire testi nel tema utilizzando questa struttura con _e() (per scrivere il testo) o __() (per passare il testo come argomento di una funzione)

<?php _e("<!--:en-->English Text<!--:--><!--:it-->Testo italiano - 404<!--:-->"); ?>

Ad esempio è possibile usare lo stesso codice per personalizzare le date

<span class="date"><?php the_time(__("<!--:en-->F j, Y<!--:--><!--:it-->j F y<!--:-->")) ?></span>

Se poi non vi piacciono le bandierine del widget, potete modificarle via CSS senza grossi patemi. Esempio:

.qtrans_language_chooser li a {
	display: block;
	height: 32px;
	padding-top: 6px;
}

.qtrans_flag_and_text {
	padding-left: 40px !important;
}

.qtrans_flag_it {
	background: url(images/italiano.png) no-repeat !important;
}

.qtrans_flag_en {
	background: url(images/inglese.png) no-repeat !important;
}

Da almeno un paio d’anni mi sono deciso ad utilizzare sistemi di controllo versione per i miei piccoli progetti (sviluppo software win32 in Delphi e siti web). Lo scopo non è tanto quello di avere un (ulteriore) backup, quanto capire quando e perché ho fatto determinate scelte a distanza di mesi o anni.

Forte dell’esperienza legata ai lavori di traduzione con Mozilla, la mia prima scelta è stata Subversion (SVN): inizialmente ho utilizzato il servizio SVN su DreamHost, poi ho riciclato il vecchio Mac Mini come server locale da affiancare al repository online. Come client la scelta naturale su sistemi Windows è TortoiseSVN. Su Mac, dopo qualche esperimento insoddisfacente con SCPlugin, ho deciso di passare all’ottimo Versions (a pagamento).

Premesso che lo sviluppo web lo seguo esclusivamente su Mac con TextMate e Mamp, nel corso del tempo è nato un problema non indifferente: per una mia forma mentis preferisco non lavorare direttamente sulla copia locale del repository. Periodicamente copio la cartella di lavoro (ad esempio la cartella di un tema WordPress presente nella httpdocs di Apache) all’interno della cartella svn del progetto specifico e gestisco da lì i commit.

Il problema è che, su Mac, sostituire una cartella significa di fatto eliminare l’originale e copiare al suo posto la nuova cartella. Di colpo tutta la cartella diventa “non revisionata” e ingestibile con SVN!

Da qualche tempo Mozilla è passata per la localizzazione dei software a Mercurial (Hg), mantenendo SVN solo per il settore web. Quando ho sostituito l’iMac a dicembre mi sono posto il problema di aggiornare i repository direttamente da OS X (finora avevo sempre usato TortoiseHg su Windows) ed ho scoperto l’ottimo MacHg. A questo punto il dubbio: perché non usare Mercurial anche per le mie esigenze? Presto fatto: ho acquistato la licenza di VMWare Fusion, installato Ubuntu Server e creato un server Mercurial seguendo questa guida (il server è locale, non ho bisogno di autenticazione o sicurezza).

Due vantaggi immediati:

  • Mercurial è un sistema di controllo distribuito, per cui posso fare i commit in locale, avviare periodicamente la macchina virtuale e fare un push per sincronizzare;
  • Mercurial non salva le informazioni in una cartella nascosta in ogni sottocartella ma solo nella root del repository, per cui sostituendo una sottocartella non si hanno problemi analoghi a quelli con SVN.

A proposito di VMWare Fusion: in passato ho sempre usato Parallels, approfittando di un’offerta sono passato a Fusion acquistando la licenza per 19.99$. Non riuscendo a registrare la licenza online, ho scritto una e-mail al supporto: nel giro di poche ore avevo una risposta in grado di risolvere il mio problema nella mail, non contenti il giorno dopo mi hanno anche telefono dagli Stati Uniti per capire se il problema era stato risolto. Piacevolmente stupito 🙂