WPML

WPML 3.9 ha introdotto la possibilità di visualizzare i contenuti provenienti dalla lingua originale quando si guardano le pagine in altre lingue. Se il tuo sito si basava sulla duplicazione dei contenuti prima della versione 3.9, potresti voler eliminare tutti i contenuti duplicati dal tuo sito prima di utilizzare questa nuova modalità di traduzione.

Come utilizzare questo tutorial

I passaggi forniti in questa pagina rimuovono le impostazioni e i contenuti dal database. Procedi solo se sai cosa stai facendo e inizia assolutamente creando un backup completo del database del tuo sito.

Per utilizzare le query SQL fornite devi modificarle:
  • Sostituisci XXXX con il tipo di post per cui desideri eliminare i contenuti duplicati (ad esempio “post”, “product” o “page”).
  • Sostituisci YYYY con il codice della lingua predefinita del sito (ad esempio “en”).
  • Sostituisci wp_ con il prefisso della tabella configurato utilizzando la variabile $table_prefix nel file wp-config.php (l’impostazione predefinita è wp_).

Infine, devi eseguire queste query utilizzando uno degli strumenti per lavorare con i database SQL, ad esempio phpMyAdmin.

1. Rimuovere i contenuti duplicati

Elimina i contenuti duplicati da wp_posts
DELETE FROM wp_posts
WHERE post_type = 'XXXX' AND ID IN (
  SELECT pm.post_id
  FROM wp_postmeta pm
    JOIN wp_icl_translations t ON t.element_id = pm.meta_value
  WHERE pm.meta_key = '_icl_lang_duplicate_of' AND pm.meta_value > 0 AND
    t.element_type LIKE 'post_%' AND t.language_code = 'YYYY'
)

2. Rimuovere le impostazioni di traduzione

Elimina le impostazioni di traduzione da wp_icl_translations
DELETE FROM wp_icl_translations
WHERE element_type = 'post_XXXX' AND element_id IN (
  SELECT pm.post_id
  FROM wp_postmeta pm
    JOIN wp_icl_translations t ON t.element_id = pm.meta_value
  WHERE meta_key = '_icl_lang_duplicate_of' AND meta_value > 0 AND t.language_code = 'YYYY'
)

3. Rimuovere i post meta orfani


Tieni presente che l’esecuzione di questa query è lenta e potrebbe andare in timeout, a seconda delle impostazioni del tuo server. Inoltre, non è obbligatorio eseguire questa query poiché serve solo a ripulire il database da eventuali post meta orfani.
Eliminare gli orfani da wp_postmeta
DELETE pm
FROM wp_postmeta pm
  LEFT JOIN wp_posts wp ON wp.ID = pm.post_id
WHERE wp.ID IS NULL

Scritto da Amir · Ultimo aggiornamento 23 maggio 2022