- Stato
- Risolto
- Segnalato per
- WPML Multilingual & Multicurrency for WooCommerce 4.0.1
- Risolto in
- WooCommerce Multilingual 4.0.2
Panoramica del problema
Il problema riguarda un prodotto con variazioni che non visualizza le variazioni nella lingua originale. Le traduzioni di quel prodotto visualizzano tutte le variazioni senza problemi.
Nota che questo problema si verifica solo quando la tassonomia product_type viene tradotta. Questa tassonomia non dovrebbe essere tradotta affatto.
La lingua originale è la lingua in cui hai originariamente creato il prodotto, per poi tradurlo da quella lingua nelle altre lingue del tuo sito.
Soluzione alternativa
Per risolvere il problema, segui questi passaggi:
- Aggiungi il codice riportato di seguito al file functions.php del tuo tema.
- Visita il tuo sito sul front-end e verifica che il prodotto sia ora visualizzato correttamente.
- Rimuovi il codice dal file functions.php – non farlo potrebbe causare problemi di prestazioni.
function fix_product_type_terms(){
global $wpdb;
//check if terms were translated
$translations = $wpdb->get_results( "SELECT * FROM {$wpdb->prefix}icl_translations WHERE element_type = 'tax_product_type'" );
if( $translations ){
foreach( $translations as $translation ){
if( !is_null( $translation->source_language_code ) ){
//check relationships
$term_relationships = $wpdb->get_results( $wpdb->prepare( "SELECT * FROM {$wpdb->term_relationships} WHERE term_taxonomy_id = %d", $translation->element_id ) );
if( $term_relationships ){
$orig_term = $wpdb->get_var( $wpdb->prepare( "SELECT element_id FROM {$wpdb->prefix}icl_translations WHERE element_type = 'tax_product_type' AND trid = %d AND source_language_code IS NULL", $translation->trid ) );
if( $orig_term ){
foreach( $term_relationships as $term_relationship ){
$wpdb->update(
$wpdb->term_relationships,
array(
'term_taxonomy_id' => $orig_term
),
array(
'object_id' => $term_relationship->object_id,
'term_taxonomy_id' => $translation->element_id
)
);
}
}
}
$term_id = $wpdb->get_var( $wpdb->prepare( "SELECT term_id FROM {$wpdb->term_taxonomy} WHERE term_taxonomy_id = %d", $translation->element_id ) );
if( $term_id ){
$wpdb->delete(
$wpdb->terms,
array(
'term_id' => $term_id
)
);
$wpdb->delete(
$wpdb->term_taxonomy,
array(
'term_taxonomy_id' => $translation->element_id
)
);
}
}
}
foreach( $translations as $translation ){
$wpdb->delete(
$wpdb->prefix . 'icl_translations',
array(
'translation_id' => $translation->translation_id
)
);
}
}
}
add_action( 'init' , 'fix_product_type_terms' );