Visão geral do problema
O problema é com um produto com variações que não exibe as variações no idioma original. As traduções desse produto exibem todas as variações sem problemas.
Observe que esse problema ocorre apenas quando a taxonomia product_type é traduzida. Essa taxonomia não deve ser traduzida de forma alguma.
O idioma original é o idioma no qual você criou o produto originalmente e, em seguida, o traduziu desse idioma para outros idiomas no seu site.
Solução alternativa
Este problema foi corrigido em WooCommerce Multilingual 4.0.2. Atualizar resolve isso no seu site, então você só precisa desta solução alternativa se ainda não puder atualizar.
Para corrigir isso, você precisa seguir as seguintes etapas:
- Adicione o código encontrado abaixo ao arquivo functions.php do seu tema.
- Acesse o seu site no front-end e verifique se o produto agora é exibido corretamente.
- Remova o código do arquivo functions.php – não fazer isso pode resultar em problemas de desempenho.
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' );