- Statut
- Résolu
- Signalé pour
- WPML Multilingual & Multicurrency for WooCommerce 4.0.1
- Résolu dans
- WooCommerce Multilingual 4.0.2
Aperçu de l’anomalie
Le problème concerne un produit avec variations qui n’affiche pas les variations dans la langue d’origine. Les traductions de ce produit affichent toutes les variations sans problème.
Veuillez noter que ce problème se produit uniquement lorsque la taxonomie product_type est traduite. Cette taxonomie ne doit pas être traduite du tout.
La langue d’origine est la langue dans laquelle vous avez initialement créé le produit, pour ensuite le traduire de cette langue vers d’autres langues sur votre site.
Solution de contournement
Pour corriger cela, vous devez suivre les étapes suivantes :
- Ajoutez le code ci-dessous au fichier functions.php de votre thème.
- Visitez votre site sur le front-end et vérifiez que le produit s’affiche désormais correctement.
- Retirez le code du fichier functions.php – ne pas le faire peut entraîner des problèmes de performances.
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' );