WordPress visite 2293

Un sito multilingua in WordPress senza utilizzare plugin

6 min

Come vi abbiamo spesso detto, quando si gestisce un sito in WordPress è bene limitare il più possibile l’utilizzo dei plugin. Il seguente metodo vi permetterà di creare un sito WordPress multilingua senza plugin, in maniera assolutamente free. Ciò comporta anche un controllo maggiore sulle traduzioni che, se realizzate da un professionista, saranno sicuramente più fedeli al testo originale e quindi più attendibili. Del resto se vogliamo scalare posizioni nei motori di ricerca, un buon testo, ma soprattutto un testo con frasi di senso compiuto, ha sicuramente il suo valore in termini di SEO.

Come è possibile creare un sito multilingua in WordPress manualmente?
Attraverso i campi personalizzati e l’utilizzo delle condizioni “if/else”.

Probabilmente ci sono diversi modi per gestire le diverse lingue di un sito o di un blog multilingua, ma questo mi sembra un metodo abbastanza immediato e logico/intuitivo.

Contenuto bloccato: accettare utilizzo dei cookie e ricaricare la pagina per visualizzarlo
Contenuto bloccato: accettare utilizzo dei cookie e ricaricare la pagina per visualizzarlo

Come utilizzare i campi personalizzati

Nel pannello di WordPress creiamo una nuova pagina. Per le lingue differenti da quella principale (l’italiano nel nostro caso) andiamo ad aggiungere un campo personalizzato.

Se il pannello dei campi personalizzati non viene visualizzato clicchiamo in alto a destra su Impostazioni schermata e mettiamo una spunta su “Campi personalizzati”

Clicchiamo su “Aggiungi nuovo” e scriviamo il Nome del campo, ad esempio “lingua” (ovviamente senza virgolette) e indichiamo come Valore la lingua desiderata, ad esempio en (inglese), fr (francese), de (tedesco), o quant’altro.

Un’unica accortezza, utilizziamo un Valore differente per le diverse homepage, ad esempio scriviamo en-home, fr-home, de-home e via dicendo.

Ripetiamo l’operazione per tutte le pagine in lingua straniera. Fatelo subito quando create un nuovo contenuto in modo da non dimenticarvene. Non dobbiamo fare altro all’interno di WordPress.

Come utilizzare le condizioni if/else

L’utilizzo delle condizioni if/else ci permetterà di “smistare il traffico” nelle varie lingue:

  1. il file page.php ridirezionerà alle homepage e alle pagine delle diverse lingue
  2. il file category.php ridirezionerà alle categorie delle diverse lingue
  3. il file single.php ridirezionerà agli articoli delle diverse lingue

Questo piccolo schema vi sarà molto più chiaro nel proseguimento dell’articolo.

1. Le operazioni nel file page.php

Apriamo il file page.php e analizziamo come procedere.
Per prima cosa avvertiamo WordPress del nostro utilizzo dei campi personalizzati (nel nostro caso il nome del Campo è “lingua”) attraverso questa stringa di codice:

<php $lingua = get_post_meta($post->ID, 'lingua', TRUE);>

Procediamo adesso con la seconda parte del codice, utilizzando appunto le condizioni if/else.

<?php
if ($lingua == "en-home") {
include 'en-index.php';
} elseif ($lingua == "en") {
include 'en-page.php';

} elseif ($lingua == "fr-home") {
include 'fr-index.php';
} elseif ($lingua == "fr") {
include 'fr-page.php';

} elseif ($lingua == "de-home") {
include 'de-index.php';
} elseif ($lingua == "de") {
include 'de-page.php';

} elseif ($lingua == "ne-home") {
include 'ne-index.php';
} elseif ($lingua == "ne") {
include 'ne-page.php';

} else  {
include 'it-page.php';
}
?>

Se conoscete come utilizzare if/else vi sarà facile leggere questo codice, abbastanza immediato anche per chi mastica semplicemente un pò di inglese. Con questo codice diciamo quanto segue:

se il Campo lingua è “en-home” includi il file “en-index.php”, altrimenti se il Campo lingua è “en” includi il file “en-page.php”, altrimenti se……. altrimenti carica il file “it-page.php”

Il file “page.php” diventerà quindi un semplice switch attraverso il codice appena scritto.
Ma dove allora finisce il contenuto del nostro page in italiano? Se state seguendo con attenzione questo procedimento avrete capito che si trasforma in “it-page.php”.

2. Le operazioni nel file category.php

Vi starete chiedendo adesso come procedere con le categorie che non dispongono dei campi personalizzati.
Dovremo creare categorie differenti per le varie lingue e inserire il seguente codice nel file category.php:

<?php
if (is_category( 'nome categoria inglese' )) {
include 'en-category.php';

} elseif (is_category( 'nome categoria francese' )) {
include 'fr-category.php';

} elseif (is_category( 'nome categoria tedesco' )) {
include 'de-category.php';

} else  {
include 'it-category.php';
}
?>

Il significato di questo codice mi sembra abbastanza chiaro, carica un differente file category in base al nome della categoria. La funzione php “is_category” serve proprio a questo scopo, ad identificare la categoria.

3. Le operazioni nel file single.php

Per il file single.php abbiamo due modi differenti con cui potremmo procedere. Potremmo comportarci come abbiamo fatto per il file page.php, ossia inserire il campo personalizzato in ogni articolo che inseriamo, ma c’è una strada molto più semplice, che automatizzerà il tutto. Analizziamo il codice:

<?php
if ( in_category( 'nome categoria inglese' )) {
include 'en-single.php';
} elseif ( in_category( 'nome categoria francese' )) {
include 'fr-single.php';
} elseif ( in_category( 'nome categoria tedesco' )) {
include 'de-single.php';
} else  {
include 'it-single.php';
}
?>

In questo caso utilizziamo la funzione php “in_category” che determina in quale categoria abbiamo inserito il nostro articolo. Basterà quindi selezionare la categoria giusta quando inseriamo un nuovo articolo e in automatico il nostro sito si visualizzerà nella lingua giusta.

Ultime operazioni

I più svegli avranno già capito che dovrete creare una serie di file per ogni lingua straniera, in modo da gestirli in maniera separata e quindi più comoda. Conviene copiarsi tutti i file in lingua italiana e rinominarli come segue:

  • en-home.php
  • en-page.php
  • en-single.php
  • en-category.php
  • en-header.php
  • en-sidebar.php
  • en-footer.php

A questo punto apriamo en-home, en-page, en-category, en-single ed al posto del “get” utilizziamo “include”, quindi ad esempio trasformiamo:

<?php get_header(); ?>
...
<?php get_sidebar(); ?>
...
<?php get_footer(); ?>

in

<?php include 'en-header.php'; ?>
...
<?php include 'en-sidebar.php'; ?>
...
<?php include 'en-footer.php'; ?>

Ripetiamo la procedura per le varie lingue. A prima occhiata la procedura può sembrare complessa, in realtà è molto semplice, bisogna solo entrare nel meccanismo.

Il tag hreflang nei siti multilingua

Ultima precisazione, gli standard dei siti multilingua prevede l’utilizzo del tag hreflang che, posizionato all’interno dell’header, mette in correlazione ciascuna pagina con le diverse lingue. Serve quindi a dare indicazioni ai motori di ricerca. Un esempio vale più di mille parole:

<link rel="alternate" hreflang="it" href="https://www.robadagrafici.com" />
<link rel="alternate" hreflang="en" href="https://www.robadagrafici.com/en/" />

Cosa abbiamo fatto? Abbiamo indicato ai motori di ricerca che alla versione italiana della homepage di www.robadagrafici.com corrisponde la versione inglese all’indirizzo www.robadagrafici.com/en/

Attenzione: si tratta solo di un esempio, la versione inglese di questo sito non esiste.

Volendo fare un esempio relativo ad una pagina interna avremo invece quanto segue:

<link rel="alternate" hreflang="it" href="https://www.robadagrafici.com/chi-sono/" />
<link rel="alternate" hreflang="en" href="https://www.robadagrafici.com/en/about/" />

Questo risultato è ottenibile ad esempio con dei campi personalizzati, dove andiamo ad indicare le pagine tradotte nelle varie lingue, “stampandole” nell’header del nostro sito.

Conclusioni

Creare un sito multilingua in WordPress senza utilizzare plugin è possibile, certo richiede parecchio sforzo, ma si può sempre decidere di non essere schiavo dei plugin multilingua e fare tutto a mano, specialmente se i siti sono di piccole dimensioni.

Grazie a questo tutorial possiamo modificare i testi in lingua straniera a nostro piacimento con le nostre traduzioni professionali.
p.s.: non dimenticate di modificare le immagini 😉

Riproduzione riservata © La riproduzione è concessa solo citando la fonte con link all'articolo.
Articolo a cura di: Del Re Valerio
Dott. in Comunicazione e Pubblicità per le Organizzazioni. Sono l'ideatore del blog Robadagrafici.com e mi occupo di comunicazione visiva, grafica e web, per le aziende.
Condividi l'articolo
Se questo articolo ti è piaciuto, ti chiedo solo di condividerlo sui social.

5 commenti su “Un sito multilingua in WordPress senza utilizzare plugin

  1. flavia ha scritto:

    Buongiorno e grazie per l’interessante articolo. Dopo aver spuntato “campo personalizzato” da impostazioni schermata non ho la possibilità di andar avanti inserendo “aggiungi nome” con i relativi nomi. Grazie tante e buona giornata

  2. Alessio ha scritto:

    Buondì. Mi sarebbe piaciuto mettere in pratica questo metodo ma aimè non so dove andare a prendere i files page.php (ne ho uno sotto il plugin Wordfence ma sarà quello giusto?) category.php (dentro cartella wp-includes) e single.php (non esiste). Mi mancano quindi le basi sul come procedere… potreste essere un po’ più chiari dando maggiori informazioni? Dovrebbero essere files presenti in WordPress o bisogna crearli? Dove dovrebbero essere altrimenti? Come selezionare la lingua lato utente? Da menù multilingua?
    Grazie

    1. Del Re Valerio ha scritto:

      Buonasera Alessio, questa guida in effetti è indicata per chi ha conoscenze approfondite su WordPress e magari ha costruito il proprio tema da zero. Questo perché i temi non sono costruiti sempre allo stesso modo e file page, category e single potrebbero essere organizzati in maniera diversa e/o annidati nelle cartelle (ma non è quello sotto il plugin Wordfence). Ti consiglio pertanto di utilizzare per le traduzioni un plugin come Polylang (il più semplice) o WPML (più professionale ma più complesso).

  3. Giovanni ha scritto:

    Salve. Che cosa significa di preciso:

    <?php
    if ($lingua == "en-home") {
    include 'en-index.php';
    } elseif ($lingua == "en") {
    include 'en-page.php';

    Che differenza c'è qui tra en-home e en-page?

    Inoltre, come faccio selezionare en-home all'utente?

    Grazie.

    1. Del Re Valerio ha scritto:

      Ciao Giovanni, attraverso l’utilizzo del campo personalizzato “lingua” e dei valori che inseriamo in questo campo, indichiamo a WordPress di che pagina si tratta (se una pagina in italiano o in inglese, se la home o un’altra pagina del sito) e quale codice “includere” (ossia quale codice inserire).

      Nello specifico caso con quel codice dico: se il valore assegnato a “lingua” è “en-home” (nome che ho scelto io a mio piacimento per indicare lingua e tipologia di pagina) caricami il file “en-index.php” (file che imposto col codice che desidero), altrimenti se il valore assegnato a “lingua” è semplicemente “en” (nome che ho scelto io a mio piacimento per indicare la lingua inglese) caricami il file più generico “en-page.php”. Ho fatto questa distinzione perché solitamente la home e le altre pagine interne hanno strutture differenti.

      Ciò che importa comunque è capire come possano essere sfruttate le if, collegate all’utilizzo dei campi personalizzati.

Lascia un commento

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