WPML
Statut
Résolu
Signalé pour
WPML Multilingual & Multicurrency for WooCommerce 5.5.2
Résolu dans
WPML Multilingual & Multicurrency for WooCommerce 5.5.3
Étiquettes de sujet
Bug

Aperçu de l’anomalie

Vous pouvez rencontrer un problème lors de la mise à jour d’un article ou d’une traduction qui contient un GTIN, UPC, EAN ou ISBN renseigné dans le produit WooCommerce et le message suivant s’affichera :

GTIN, UPC, EAN ou ISBN non valide ou dupliqué.

Solution de contournement

Nos développeurs travaillent sur le problème et des correctifs seront bientôt publiés.

Toutefois, si vous ne pouvez pas attendre que cela soit résolu, assurez-vous de disposer d’une sauvegarde.

Accédez à : /wp-content/plugins/woocommerce-multilingual/inc/class-wcml-products.php
ajoutez en dessous de :

add_filter( 'wc_product_has_unique_sku', [ $this, 'check_product_sku' ], 10, 3 );

ce code :
add_filter( 'wc_product_has_global_unique_id', [ $this, 'check_product_gtin' ], 10, 3 );

Au bas du fichier, ajoutez :
    public function check_product_gtin( $sku_found, $product_id, $sku ) {
        if ( null === $this->post_translations ) {
            $sku_found;
        }

        if ( $sku_found ) {

            $product_trid = $this->post_translations->get_element_trid( $product_id );

            $products = $this->wpdb->get_results(
                    $this->wpdb->prepare(
                            "
                SELECT p.ID
                FROM {$this->wpdb->posts} as p
                LEFT JOIN {$this->wpdb->postmeta} as pm ON ( p.ID = pm.post_id )
                WHERE p.post_type IN ( 'product', 'product_variation' )
                AND p.post_status = 'publish'
                AND pm.meta_key = '_global_unique_id' AND pm.meta_value = '%s'
             ",
                            wp_slash( $sku )
                    )
            );

            $sku_found = null;

            foreach ( (array) $products as $product ) {
                $trid = $this->post_translations->get_element_trid( $product->ID );
                if ( $product_trid !== $trid ) {
                    $sku_found = true;
                    break;
                }
            }
        }

        return $sku_found;
    }

Toutes les anomalies connues →