- Trạng thái
- Đã giải quyết
- Được báo cáo cho
- WPML Multilingual & Multicurrency for WooCommerce 5.5.2
- Đã giải quyết trong
- WPML Multilingual & Multicurrency for WooCommerce 5.5.3
- Thẻ chủ đề
- Bug
Tổng quan về lỗi
Bạn có thể gặp sự cố khi cập nhật một bài viết hoặc một bản dịch có chứa GTIN, UPC, EAN hoặc ISBN được điền trong sản phẩm WooCommerce và sẽ có một thông báo:
GTIN, UPC, EAN hoặc ISBN không hợp lệ hoặc bị trùng lặp.
Giải pháp tạm thời
Các nhà phát triển của chúng tôi đang xử lý vấn đề này và các bản sửa lỗi sẽ sớm được phát hành.
Tuy nhiên, nếu bạn không thể chờ lỗi này được khắc phục, hãy đảm bảo rằng bạn có bản sao lưu.
Truy cập: /wp-content/plugins/woocommerce-multilingual/inc/class-wcml-products.php
thêm vào bên dưới:
add_filter( 'wc_product_has_unique_sku', [ $this, 'check_product_sku' ], 10, 3 );
đoạn mã này:
add_filter( 'wc_product_has_global_unique_id', [ $this, 'check_product_gtin' ], 10, 3 );
Ở cuối tệp, thêm:
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;
}