Ciao e grazie per la bella accoglienza!
Sono contento che abbiamo la stessa opinione. Riguardo il plugin no, io ne sviluppo ad hoc per i clienti e le varie esigenze però, a parte qualche funzione pubblicata sul mio erriko.it, non ho mai pubblicato plugin pubblici (dovrei iniziare in effetti...).
Allora vado direttamente al punto del "come si fa un sito wordpress multilingua" secondo il mio modesto parere.
Approccio A, plugin
Questo è abbastanza semplice: si acquista WPML su wpml.org e si installa (la licenza sviluppatore consente di utilizzarlo su più siti, per cui se se ne fa un uso professionale magari conviene). Se si utilizza wp-types (è gratis) per la creazione dei custom post types questo sarà perfettamente integrato con il multilingua creato da WPML (sono gli stessi sviluppatori).
Il plugin è molto semplice da usare e consente di aggiungere quante lingue si voglia, crea il widget per cambiare lingua, consente di tenere traccia dei contenuti tradotti e da tradurre, decidere se si vuole che l'url esca, per esempio, /en oppure ?lang=en etcetera etcetera.
Si può anche mettere mano al codice stesso di WPML o sovrascriverlo nel tema per cui è anche abbastanza personalizzabile. Per esempio il selettore della lingua di default è composta da bandiera e nome della lingua. Con la seguente funzione in functions.php (e richiamata dove si vuole nel tema) si può mostrare soltanto la bandiera
Codice:
function language_selector_flags(){
$languages = icl_get_languages('skip_missing=0&orderby=code');
if(!empty($languages)){
foreach($languages as $l){
if(!$l['active']) echo '<a href="'.$l['url'].'">';
echo '<img src="'.$l['country_flag_url'].'" height="24" alt="'.$l['language_code'].'" width="24" />';
if(!$l['active']) echo '</a>';
}
}
}
In ogni caso il tutto è abbastanza guidato e ben documentato sul loro sito.
Approccio B, multisite
Questo è quello che ho usato fin ora per la maggiore, lungo da spiegare ma non complessissimo da fare se si è programmato tutto prima.
Lo descrivo a mo' di ricetta, so che non è il massimo, ma penso sia più semplice per me da descrivere.
Installo wp ed abilito il multilingua.
Creo un sotto-sito per ogni lingua. Il sito principale funge da pagina di gateway, oppure contiente direttamente il sito della lingua originale (è solo una questione dai gusti/esigenze tecnicamente non cambia nulla).
In questo caso ciascuna lingua avrà il suo sito per cui non ci sono problemi nella gestione di categorie, contenuti diversi (magari un contenuto che va bene per l'italiano non va bene per il francese, o si usano immagini diverse ecc ecc).
Per evitare però di dover fare lavoro in più, o meglio temi diversi per ciascuna lingua basta creare un solo tema che utilizzi però la funzione di localizzazione. Questo è molto semplice da fare. In genere per abilitare la localizzazione si chiama in function.php questa funzione
Codice:
load_theme_textdomain('dominio', get_template_directory() . '/lingue');
dove gli argomenti indicano: il primo il riferimento per la traduzione (di seguito dirò anche come si usa nel tema), il secondo la cartella nella quale saranno contenute le traduzioni.
Nel nostro caso però la localizzazione dovrà cambiare in base al "sottosito" che si apre e non rispetto alla lingua impostata in wordpress (che come sappiamo è una sola definita nel file wp-config.php della root). Per questo è sufficiente aggiungere una funzione come questa
Codice:
add_filter( 'locale', 'my_theme_localized' );
function my_theme_localized($locale) {
if (isset($_GET['lang'])) {
return $_GET['lang'];
}
return $locale;
}
In questo caso diremo al tema di wp di caricare come valore del locale quello che passiamo come parametro get dell'url (es sito.com/?lang=it_IT).
Per renderelo "più elegante" si può modificare questa funzione e passare il locale con POST anzicchè GET oppure ancora recuperarlo dai cookies e dunque abbinare un'altra funzione che al click sulla lingua desiderata salva nel cookie la preferenza. O combinazioni tra queste.
Fatto ciò posso creare il tema in maniera del tutto tradizionale certo che quello che realizzo sarà utilizzato per tutte le lingue. L'unica accortezza sarà quella di non sparare il testo direttamente nel codice ma farlo passare per la localizzazione, specificando il dominio che abbiamo scelto quando abbiamo inserito il load_theme_textdomain
esempio
Codice:
<?php _e("Customer Care", "dominio"); ?> //se voglio un echo
<?php __("Customer Care", "dominio"); ?> //se voglio un return
Tutto qui. Posso creare a mano i file .po e .mo se voglio con Poedit oppure, cosa ancora pià comoda usare un plugin come Codestyling Localization (
https://wordpress.org/extend/plugins/cod...alization/) che mi fa fare tutto dalla dashboard di wp.
Ah, per evitare di dover ripetere la creazione di custom types, tassonomie e custom fields è consigliabile esportare tutto quello che si crea con wp-types in php (il plugin genera tutto il codice necessario automaticamente) e incollarlo in un file che mettiamo nella cartella mu-plugins oppure nel file functions.php del tema così da accertarci che i custom types e il resto siano creati in tutti i sottositi.
Esempio live:
https://medhermes.net/
Scrivendo questo post mi sono accorto che sono usciti recentemente due plugin che sfruttano questo approccio. Non li ho ancora provati ma magari scopriamo che rendono inutile tutto questo discorso e mi eviteranno di fare questo procedimento la prossima volta (anche se è divertente

) li posto qui ma qualcuno dovrebbe darci feedback sulla loro bontà:
https://wordpress.org/extend/plugins/mul...ual-press/
https://wordpress.org/extend/plugins/mul...-switcher/
Il secondo addirittura è già dichiarato con la compatibilità per wp 3.6
Spero di essere stato utile a qualcuno se non sono stato chiaro su alcuni punti sono qui