Salta la navigazione
Aggiornato
Luglio 3, 2017

Molti temi visualizzano appositamente post speciali, pagine e categorie, di solito basati sugli ID. Ad esempio, una sezione di post “In evidenza” nella pagina iniziale o le categorie evidenziate.

In alcuni casi questi ID hanno un codice complesso nel PHP e in altri linguaggi del tema, l’utente li seleziona sulla schermata delle impostazioni del tema.

Per visualizzarli correttamente, il tema deve selezionare gli ID per lingua. In WPML, gli ID di post, pagine, categorie e tag cambiano al variare della lingua, quindi il tema deve utilizzare gli ID corretti per la lingua attiva.

WPML include due opzioni per farlo.

Potete o attivare la rettifica automatica degli ID o utilizzare manualmente wpml_object_id nel vostro tema.

Quale opzione utilizzare?

La rettifica automatica degli ID non richiede alcuna modifica al vostro codice. Potete utilizzarla con qualsiasi tema e tutto “semplicemente funzionerà”. Il lato negativo del suo impiego è l’accesso al DB e il tempo di elaborazione leggermente superiore, perché WPML aggancerà molte funzioni e controllerà la correttezza dell’output per la lingua attiva.

La rettifica manuale degli ID utilizzando la funzione wpml_object_id darà gli stessi risultati e può essere più efficiente in termini di elaborazione. Tuttavia richiede una quantità significativa di codice nel tema.

Se state creando un tema da zero, dovreste considerare di utilizzare wpml_object_id per farlo manualmente. Se iniziate con un tema esistente, violare il codice e modificare il tema potrebbe non essere realistico e probabilmente la rettifica automatica degli ID è la strada da percorrere.

Ad ogni modo, utilizzando qualsiasi plug-in di memorizzazione nella cache, l’impatto delle prestazioni di questa operazione viene annullato. La memorizzazione nella cache è sempre consigliata per i siti di qualsiasi dimensione. WPML funziona bene con WP Super Cache e W3 Total Cache (che utilizziamo anche noi su diversi siti).

1) Rettifica automatica degli ID

WPML può agganciarsi alle funzioni dell’API di WordPress, rilevare quando vengono caricati gli elementi specifici e rettificare gli ID, così i risultati vengono rettificati per la lingua attiva.

Questa funzionalità viene attivata come impostazione predefinita ed è accessibile tramite WPML->Languages (Lingue):

Rettifica ID per la funzionalità multilingue

Rettificherà automaticamente tutti gli ID e può essere utilizzata in qualsiasi tema di WordPress che utilizza correttamente l’API (quasi tutti i temi in circolazione).

2) Manualmente, utilizzando la funzione wpml_object_id

In alternativa, se la rettifica automatica degli ID è disattivata, potete utilizzare la funzione wpml_object_id per ottenere lo stesso risultato manualmente.

apply_filters( ‘wpml_object_id’, int $element_id, string $element_type, bool $return_original_if_missing, mixed $ulanguage_code )

Nota: per le versioni di WPML >=3.2 utilizzate l’hook del filtro wpml_object_id. A partire da WPML 3.3, la funzione icl_object_id è stata taggata come deprecata e rimossa completamente nella versione 3.3

Esempio d’uso

echo apply_filters( 'wpml_object_id', 4, 'category', TRUE  );

Tornate all’ID di categoria nella lingua attuale per ID di categoria 4. Se manca la traduzione tornerà all’originale (qui: ID di categoria 4).

Controllate la nostra pagina API per vedere altri esempi e trovare informazioni più dettagliate sul suo utilizzo.

Tradurre le matrici degli ID

Molte volte dovete convertire un’intera matrice degli ID dell’oggetto (più comunemente ID di categoria). Per farlo dovete utilizzare la seguente funzione:

function lang_object_ids($object_id, $type) {

    if( is_array( $object_id ) ){

        $translated_object_ids = array();

        foreach ( $object_id as $id ) {

            $translated_object_ids[] = apply_filters( 'wpml_object_id', $id, $type, true, $current_language );

        }

        return $translated_object_ids;

    } else {

  return apply_filters( 'wpml_object_id', $object_id, $type, true, $current_language );

 }

}

Questa funzione accetta anche il tipo di oggetto come argomento.

Ad esempio, per ottenere una matrice degli ID di categoria per le categorie 1,3 e 6 chiameremo:

lang_object_ids(array(1,3,6),'category')

Visualizzare gli elementi della pagina nelle diverse lingue

Il parametro opzionale ulanguage_code consente di mischiare gli elementi della pagina in diverse lingue.

Ad esempio, se avete una galleria di immagini e non volete duplicare le immagini per la lingua, seguite la seguente procedura:

  1. Ottenete l’ID della pagina nella lingua in cui esiste la galleria.
  2. Eseguite il ciclo delle immagini per quella pagina e visualizzatelo.