( english version)

WordPress 3.0 Multilingue

Dopo alcune settimane di rodaggio della nuova versione di WordPress, ecco un nuovo post col resoconto di quanto ho fatto per customizzarlo, per quale motivo e qual’è il grado di soddisfazione finale.

Col mio precedente blog mi proponevo, come caso di studio, l’implementazione di un blog multilingue facile da mantenere. Per ottenere questo risultato, dopo svariate ricerche, ho fatto ricorso al plugin xLanguage. Inizialmente la scelta mi è sembrata azzeccata, ma – anche in seguito all’abbinamento ad altri plugin, in particolare a WP Super Cache – alla lunga l’operazione si è rivelata complessa da mantenere (ad esempio, se la cache veniva rigenerata dalla visita di un crawler, il risultato era un sito con le localizzazioni mixate tra loro, di conseguenza andava cancellata e rigenerata la cache a mano) e difficile da fare funzionare con i vari plugin, se non andandoli a modificare in modo tale da supportare i tag di xLanguage (modifiche che andavano rieffettuate ad ogni aggiornamento dei plugin). Frustrante e poco efficace.

Con l’uscita di WordPress 3.0 e con la possibilità di abilitarne la modalità multisite, ho voluto provare a gestire le differenti lingue come sottositi distinti, accomunati dallo stesso tema e dagli stessi plugin, ma correlando tra loro sia i blog che le singole pagine/articoli facendo ricorso a dei campi personalizzati da gestire tramite delle minime customizzazioni al tema.

Ecco qui di seguito le modifiche che ho apportato, con in grassetto il path dei file contenenti le modifiche.

wp-content/themes/MY_THEME/functions.php:

if ( ! function_exists( 'alternative_language_link' ) ) :
/**
 * Prints HTML link to english or italian version of page or post.
 * @author Ivan Iraci
 *
 */
function alternative_language_link($id) {
  if (get_post_meta($id, 'english-version', true) != "") {
    ?>
    <a href="<?php echo get_post_meta($id, 'english-version', true); ?>">
    (<span>&nbsp</span>english version)
    </a>
    <?php
  } else if (get_post_meta($id, 'italian-version', true) != "") {
    ?>
    <a href="<?php echo get_post_meta($id, 'italian-version', true); ?>">
    (<span>&nbsp</span>versione italiana)</a>
    <?php
  }
}
endif;

if ( ! function_exists( 'alternative_language_site' ) ) :
/**
 * Prints HTML link to english or italian version of the site.
 * @author Ivan Iraci
 *
 */
function alternative_language_site() {
  if (get_locale() == "it_IT") {
    $style = "english-version";
    $other_language = "english version";
    $other_link = get_blogaddress_by_id(2);
  } else if (get_locale() == "en_US") {
    $style = "italian-version";
    $other_language = "versione italiana";
    $other_link = get_blogaddress_by_id(1);
  }
  print '<a href="'.$other_link.'"><span>&nbsp;</span>'.$other_language.'</a>';
}
endif;

Avendo a disposizione queste due semplici funzioni, avendo presente qual’è l’id del sito in inglese piuttosto che quello in italiano e avendo aggiunto il campo personalizzato italian_version (nell’articolo/pagina inglese, contenente l’url della versione italiana) o english_version (nell’articolo/pagina italiana, contenente l’url della versione inglese), il tutto si riduce ad aggiungere i link alle versioni alternative.

Ad esempio, per visualizzare il link alla versione del sito nella lingua alternativa, basta modificare minimamente l’header.php.

wp-content/themes/MY_THEME/header.php:

<?php echo alternative_language_site(); ?>

Oppure, per visualizzare il link alla versione dell’articolo o pagina nella lingua alternativa, basta modificare i file che renderizzano il title dei post e delle pagine.

wp-content/themes/MY_THEME/loop.php,
wp-content/themes/MY_THEME/onecolumn-page.php,
wp-content/themes/MY_THEME/page.php,
wp-content/themes/MY_THEME/single.php:

<?php alternative_language_link(get_the_ID()); ?>

Estremamente facile ed efficace.

Se le lingue fossero più di due, bisognerebbe complicare leggermente il codice, ma non più di tanto.

Questa soluzione permette anche di effettuare delle operazioni di SEO e di analytics mirate per le specifiche lingue, cosa che non mi era possibile fare con xLanguage nella versione precedente di WordPress e, inoltre, mi permetterebbe di suddividere la gestione dei siti tra team diversi, con politiche di permessi differenziate per ogni singola lingua.

In sintesi, un notevole progresso a fronte di un intervento davvero irrisorio sul codice.

Buon hacking!

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *