WPML
Status
Gelöst
Gemeldet für
WPML Multilingual & Multicurrency for WooCommerce 4.0.1
Gelöst in
WooCommerce Multilingual 4.0.2

Übersicht über das Problem

Das Problem betrifft ein Produkt mit Variationen, das die Variationen in der Originalsprache nicht anzeigt. Die Übersetzungen dieses Produkts zeigen alle Variationen problemlos an.

Bitte beachten Sie, dass dieses Problem nur auftritt, wenn die Taxonomie product_type übersetzt wird. Diese Taxonomie sollte überhaupt nicht übersetzt werden.

Die Originalsprache ist die Sprache, in der Sie das Produkt ursprünglich erstellt und aus der Sie es dann in andere Sprachen auf Ihrer Website übersetzt haben.

Problemumgehung

Um dies zu beheben, führen Sie die folgenden Schritte aus:


  1. Fügen Sie den unten stehenden Code in die Datei functions.php Ihres Themes ein.

  2. Besuchen Sie Ihre Website im Frontend und überprüfen Sie, ob das Produkt nun korrekt angezeigt wird.

  3. Entfernen Sie den Code aus der Datei functions.phpwenn Sie dies nicht tun, kann dies zu Performance-Problemen führen.
    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' );

Alle bekannten Probleme →