WPML
Status
Resolvido
Relatado para
WPML Multilingual & Multicurrency for WooCommerce 5.5.2
Resolvido em
WPML Multilingual & Multicurrency for WooCommerce 5.5.3
Tags de tópico
Bug

Visão geral do problema

Você pode encontrar um problema ao atualizar um post ou uma tradução que contém GTIN, UPC, EAN ou ISBN preenchido no produto do WooCommerce e uma mensagem será exibida:

GTIN, UPC, EAN ou ISBN inválido ou duplicado.

Solução alternativa

Nossos desenvolvedores estão trabalhando no caso e as correções serão lançadas em breve.

No entanto, se você não puder esperar que isso seja corrigido, certifique-se de ter um backup.

Vá para: /wp-content/plugins/woocommerce-multilingual/inc/class-wcml-products.php
adicione abaixo de:

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

este código:
add_filter( 'wc_product_has_global_unique_id', [ $this, 'check_product_gtin' ], 10, 3 );

No final do arquivo, adicione:
    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;
    }

Todos os problemas conhecidos →