Molti avranno letto l’articolo sui requisiti di sistema di WordPress 3.2 e, spero, si saranno posti il problema «Posso aggiornare?».

Log in to your hosting account, and check to make sure you have at least  PHP 5.2.4 and MySQL 5.0.

Se non sapete come verificare la versione in uso di PHP e MySQL, installate il plugin health check come suggerito nell’articolo. Se state utilizzando una versione troppo vecchia di PHP vedrete solo un avviso di questo tipo:

Warning: Your server is running PHP version 4.4.9. WordPress 3.2 will require PHP version 5.2.4.

Once your host has upgraded your server you can re-activate the plugin to check again.

Se siete su hosting Aruba, dovete verificare in particolare la versione di PHP: su tutti i domini che ho verificato la versione installata era inferiore a quella minima richiesta.

Per modificare la versione di PHP dovete accedere al pannello di controllo del vostro dominio:

  • aprire la sezione Pannello gestione Hosting Linux;
  • nella nuova finestra selezionare (in alto) Strumenti e Impostazioni;
  • aprire la sezione Scelta della versione di PHP e selezionare la versione 5.3.x.

Il pannello di controllo non è particolarmente informativo – non si capisce neppure se la richiesta di cambio sia stata accettata – ma il cambio di versione avviene immediatamente. Personalmente trovo abbastanza assurdo che questa procedura non sia descritta nella Knowledge Base (o quantomeno io non sono stato in grado di trovarla).


WordPress e oEmbed

25 Aprile 2011

Direttamente dal sito oembed.com

oEmbed is a format for allowing an embedded representation of a URL on third party sites. The simple API allows a website to display embedded content (such as photos or videos) when a user posts a link to that resource, without having to parse the resource directly.

WordPress supporta oEmbed dalla versione 2.9: inserendo l’indirizzo di un contenuto multimediale all’interno di un post, ad es. un video YouTube, l’URL viene convertito e viene incorporato (“embedded”) direttamente il contenuto presente nella pagina. È possibile disattivare questa funzione nella sezione Impostazioni -> Media, dove si può anche definire una dimensione massima per i contenuti incorporati.

Piccolo problema: come modificare la presentazione di questi contenuti? Semplice: basta scaricare il plugin oEmbed styling e poi lavorare un po’ sui css. Esempio banale: assegnare un margine verticale e centrare tutti i contenuti incorporati1.

div.oembed {
	margin: 10px 0;
	text-align: center;
}

Il plugin è fatto molto bene nella sua semplicità in quanto crea classi generiche (oembed, oembed-video) ma anche classi specifiche per URL (oembed-youtube-com, oembed-video-youtube-com).

Sempre a proposito di WordPress, non dimenticate che è possibile segnalare direttamente eventuali errori di traduzione.

P.S. il video è una banale prova di registrazione con lo Zoom Q3HD. Alla fine il volume dell’audio su YouTube è risultato molto più basso di quanto non mi aspettassi dopo averlo elaborato in locale.

1. Non è possibile utilizzare “margin: 10px auto;” a meno di non assegnare una larghezza al div. Dal basso della mia ignoranza non escludo che esistano metodi più corretti per ottenere lo stesso risultato 😉


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;
}

A proposito di backup

17 Marzo 2011

Come direbbe Barney Stinson, la prima regola del buon backup è “Prova il tuo backup!”. In altre parole, non saprai mai quanto è buono il tuo backup se non provi a farci un ripristino.

Qualche tempo fa ho iniziato a installare sui siti basati su WordPress il plugin wp-dbmanager: rispetto ai classici plugin che si occupano del backup di mySql, questo offriva una serie di optional interessanti (ad esempio l’ottimizzazione programmata del database e la possibilità di eseguire query). Cosa potrà mai andare storto nel fare un banale dump di un database?

Oggi dovevo provare delle modifiche sul tema di un sito, per cui ho recuperato dalla mail l’ultimo backup e ho cercato di ripristinarlo in locale:

  • Tentativo #1: ripristina da phpMyAdmin, lettere accentate a ramengo.
  • Tentativo #2: prova ad aprire il file .sql in TextMate, il programma si addormenta sistematicamente dopo poche righe (e TextMate non rientra certo nella categoria dei software instabili). Con “nano” o “tail” si riesce ad aprire il file, a quanto pare crea delle righe interminabili di testo.
  • Tentativo #3: prova l’importazione da riga di comando forzando il charset UTF-8, lettere accentate sempre a ramengo.
  • Tentativo #4: cerca sul forum di supporto del plugin o su Google, apparentemente nessuno ha questo problema. Il fatto che questo si verifichi con backup provenienti da Aruba, DreamHost e da un server dedicato mi fa pensare che il problema non sia dalla mia parte.
  • Tentativo #5: butta via il plugin e installa wp-db-backup, tutto liscio al primo colpo (e nessun problema aprendo il file con TextMate).

Morale della favola: verificate sempre i vostri backup.

Visto che negli ultimi due mesi ho perso svariate ore su queste cose, qualche appunto in ordine sparso (che l’età avanza).

Se siete su DreamHost, il sistema di backup di database e siti funziona molto bene (ancora una volta, parlo per esperienza diretta). Questo non vuol dire che non dobbiate garantire l’incolumità dei vostri dati con soluzioni di backup alternative. Ad esempio potete crearvi dei batch shell ed eseguirli tramite il pannello di controllo (sezione Goodies) o crontab. La sintassi per fare il backup di un database è

mysqldump NOME_DATABASE > dumpdatabase.sql -u UTENTE -h HOST -pPASSWORD

La sintassi per il ripristino

mysql -u UTENTE -h HOST -pPASSWORD NOME_DATABASE < dumpdatabase.sql

Se dovete utilizzare in locale il backup del database di un sito, un modo rapido per correggere i riferimenti può essere questo (non è probabilmente la soluzione più sicura o elegante, ma funziona).

cat dumpdatabase.sql | sed 's|www.esempio.it|localhost/esempio|g' > dumpdatabase_locale.sql

Nello specifico tutte le occorrenze di “www.esempio.it” nel file dumpdatabase.sql vengono sostituite con “localhost/esempio” e salvate in dumpdatabase_locale.sql, risolvendo il problema dei parametri in wp_options ma anche di eventuali link all’interno dei post.

 

Tag Technorati: ,

Da qualche ora è disponibile l’aggiornamento, per il momento solo in inglese, a WordPress 3.1. Tra le nuove funzionalità c’è una Admin bar che si posiziona nella parte superiore della finestra, con una serie di collegamenti utili per chi amministra il blog (non visibile ai visitatori normali).

Se, come capitato al sottoscritto in una delle quattro installazioni testate, invece di vedere la simpatica barra con sfondo nero vi ritrovate una fascia bianca e desolatamente vuota, verificate che il vostro tema abbia la chiamata wp_footer() nel piede 😉

L’admin bar è disattivabile nel profilo utente o, nel caso in cui vogliate farlo in un colpo solo per tutti gli utenti, tramite file functions.php a livello di tema

< ?php 
	add_action('show_admin_bar', '__return_false');
?>
Tag Technorati: ,

Appunti personali in ordine sparso e link utili per utilizzare WordPress come CMS (ma non solo). Dubito che questo post possa risultare utile a qualcuno nella sua schematicità, ma non si sa mai (di sicuro mi permette di liberare la scrivania da link vari e note).

Navigazione BreadCrumb

Ottimo il plugin BreadCrumb NavXT, completamente personalizzabile e localizzabile attraverso le opzioni. Se non hai idea di cosa siano ‘ste briciole di pane, dai un’occhiata a Wikipedia.

Template di pagina

In WordPress è possibile definire dei “template di pagina“; questa funzione risulta particolarmente utile per avere uno stile diverso per ogni sezione del sito.

Nel mio caso utilizzo questi modelli per modificare il menu superiore di navigazione in base alla sezione in cui si trova il navigatore, diversificando la sezione attiva nel menu principale e caricando un menu secondario specifico.

Per creare un template è sufficiente copiare il file page.php del tema e inserire all’inizio il seguente codice:

<?php
/*
Template Name: PROVA
*/
?>

In fase di creazione della pagina basterà selezionare il modello dall’elenco nella colonna di destra (nell’esempio risulterà disponibile un template PROVA).

Campi personalizzati e sidebar

Supponiamo di avere la seguente struttura:

  • sito principale che utilizza il template standard di pagina;
  • una sezione del sito (“servizi”) che utilizza un template di pagina ad hoc;
  • a sua volta la sezione “servizi” comprende una ventina di sottosezioni.

Come personalizzare un menu laterale – quindi posizionato nella sidebar – senza creare venti modelli di pagina diversi o senza utilizzare condizioni complesse nel codice? Nel mio caso ho deciso di sfruttare i campi personalizzati, associando alle varie pagine una variabile “menu_laterale” che punta al file .php con il menu personalizzato (dove necessario).

L’unico problema è che la funzione get_post_meta richiede un $post_id, e questo tipo di informazione è disponibile solo all’interno del loop, per cui tocca impostare una variabile globale:

<?php
global $post_id;
$post_id = $wp_query->post->ID;
?>

e poi recuperarla nella sidebar

<?php
global $post_id;
$url_menu = get_post_meta($post_id, "menu_laterale", true);
if ($url_menu) { include (TEMPLATEPATH . $url_menu); }
?>

Sicuramente non è la soluzione più elegante di ‘sto mondo, ma funziona e tanto basta 🙂

Migliorare la gallery di WordPress

Per la prima volta ho deciso di sfruttare il meccanismo di gallerie di immagini integrato in WordPress (introdotto con la versione 2.5, davvero semplice e comodo da usare).

Il primo problema è modificare il CSS utilizzato da WordPress, e per farlo è necessario lavorare sul file wp-includes/media.php (la funzione gallery_shortcode). Personalmente trovo pessima l’idea di inserire del CSS inline (e rendere non valido il codice, tra le altre cose), ma sono troppo pigro per cercare o fare un plugin che faccia esclusivamente l’override di quella funzione (LightBox Gallery, ad esempio, include questa funzione).

Secondo problema: se scelgo di visualizzare la “pagina allegato” ottengo un’immagine troppo piccola, se scelgo di visualizzare l’immagine originale butto praticamente il visitatore fuori dal sito (situazione da evitare).

A questo punto ho cercato dei plugin per integrare Lightbox nella gallery di WordPress, scoprendo che Lightbox non prevede il ridimensionamento automatico del box di anteprima (se cerco di aprire una fotografia larga 3000px, il visitatore alle prime armi va in panico). Per questo motivo ho optato per il plugin FancyBox Gallery, che utilizza FancyBox al posto di LightBox.

Visualizzare gli ultimi video di un feed YouTube

Basta seguire questo ottimo tutorial (in inglese) e aggiungere il relativo codice al tema, niente di più facile 🙂