- Stato
- Risolto
- Risolto in
- WooCommerce Multilingual & Multicurrency 5.5.2
- Tag dell’argomento
- WCML
Panoramica del problema
Se hai prodotti tradotti in precedenza con l’Editor di traduzione classico (CTE) e poi aggiorni le impostazioni di WPML per usare ATE (solo per le nuove traduzioni), modificare quei prodotti tradotti in precedenza li aprirà erroneamente in ATE invece che in CTE.
(Questo riguarda specificamente i Prodotti e non altri tipi di post.)
Soluzione alternativa
Il problema si verifica perché i dettagli su quale editor è stato utilizzato vengono memorizzati in modo errato per i prodotti.
Parte della soluzione consiste nel correggere questo aspetto, in modo che quando traduci i prodotti tramite CTE venga registrato correttamente l’editor di traduzione, così la volta successiva si apriranno nell’editor corretto.
Ma dobbiamo anche correggere tutti i dati esistenti che registrano l’editor sbagliato per i prodotti che sono già stati modificati con CTE.
Affrontiamo prima questa seconda parte, per la quale dobbiamo eseguire questa query SQL personalizzata:
UPDATE wp_icl_translate_job AS job
JOIN (
SELECT job.job_id
FROM wp_icl_translate_job AS job
LEFT JOIN wp_icl_translation_status AS status ON job.rid = status.rid
LEFT JOIN wp_icl_translations AS translations ON status.translation_id = translations.translation_id
WHERE translations.element_type = 'post_product'
) AS derived
ON job.job_id = derived.job_id
SET job.editor = 'wpml'
WHERE job.editor = 'wp';
Se il tuo database utilizza un prefisso diverso da `wp_` per le tabelle, sarà necessario apportare delle modifiche (ci sono quattro occorrenze di `wp_icl_` qui sopra).
Puoi eseguire questa query utilizzando phpMyAdmin o tramite un plugin Adminer.
Quindi, per assicurarti che i dettagli dell’editor vengano memorizzati correttamente d’ora in poi, devi aggiungere quanto segue (tramite un plugin per frammenti di codice o nel file functions.php del tema):
/**
* WPMLSUPP-12927: Temporary fix to correctly record CTE editor for products
*/
add_filter( 'wpml_translation_editor_save_job_data', function( $data ){
if ( $data['job_post_type'] == "post_product" ) {
add_action( 'wpml_save_job_fields_from_post', function( $job_id ){
wpml_tm_load_old_jobs_editor()->set( $job_id, 'wpml' );
});
}
return $data;
});