WPML
Estado
Resuelto
Notificado para
WPML Multilingual & Multicurrency for WooCommerce 4.0.1
Resuelto en
WooCommerce Multilingual 4.0.2

Resumen del problema

El problema es que un producto con variaciones no muestra las variaciones en el idioma original. Las traducciones de ese producto muestran todas las variaciones sin problema.

Tenga en cuenta que este problema ocurre solo cuando se traduce la taxonomía product_type. Esta taxonomía no se debe traducir en absoluto.

El idioma original es el idioma en el que creó el producto originalmente y luego lo tradujo de ese idioma a otros idiomas en su sitio.

Solución alternativa

Para solucionar esto, siga estos pasos:


  1. Añada el código que se encuentra a continuación al archivo functions.php de su tema.

  2. Visite su sitio en el front-end y verifique que el producto ahora se muestra correctamente.

  3. Elimine el código del archivo functions.php; no hacerlo puede causar problemas de rendimiento.
    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' );

Todos los problemas conocidos →