PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / 5.5.7
WPML Multilingual & Multicurrency for WooCommerce v5.5.7
5.5.7 5.3.8 5.3.9 5.4.3 5.4.4 5.4.5 5.5.1 5.5.1.1 5.5.2.2 5.5.2.3 5.5.3 5.5.3.1 5.5.4 5.5.5 5.5.6 trunk 0.9 1.0 1.1 1.2 1.3 1.4 1.5 2.0 2.2 2.3 2.3.1 2.3.2 3.0 3.0.1 3.1 3.2 3.2.1 3.2.2 3.3 3.3.1 3.3.2 3.3.3 3.3.4 3.4 3.4.1 3.4.2 3.4.3 3.5 3.5.1 3.5.2 3.5.3 3.5.4 3.5.5 3.6 3.6.1 3.6.10 3.6.11 3.6.2 3.6.3 3.6.4 3.6.5 3.6.5.1 3.6.6 3.6.7 3.6.8 3.6.9 3.7 3.7.1 3.7.10 3.7.11 3.7.12 3.7.13 3.7.14 3.7.15 3.7.16 3.7.2 3.7.3 3.7.4 3.7.5 3.7.6 3.7.7 3.7.8 3.7.9 3.8.0 3.8.1 3.8.2 3.8.3 3.8.4 3.8.5 3.8.6 3.9.0 3.9.1 3.9.1.1 3.9.2 3.9.3 3.9.4 3.9.5 4.0.0 4.0.1 4.0.2 4.0.3 4.0.4 4.1.0 4.1.1 4.1.2 4.1.3 4.1.4 4.10.0 4.10.1 4.10.2 4.10.3 4.10.4 4.11.2 4.11.3.2 4.11.5 4.11.6 4.12.1 4.12.4 4.12.5 4.12.6 4.2.0 4.2.0.1 4.2.1 4.2.1.1 4.2.10 4.2.2 4.2.3 4.2.4 4.2.5 4.2.6 4.2.7 4.2.7.1 4.2.8 4.2.8.1 4.2.9 4.3.0 4.3.1 4.3.2 4.3.2.1 4.3.3 4.3.4 4.3.5 4.3.6 4.3.7 4.4.0 4.4.1 4.4.2 4.4.2.1 4.5.0 4.6.0 4.6.1 4.6.2 4.6.2.1 4.6.3 4.6.5 4.6.6 4.6.7 4.7.0 4.7.1 4.7.2 4.7.3 4.7.4 4.7.5 4.7.6 4.7.7 4.7.8 4.7.9 4.8.0 4.9.0 4.9.1 5.0.1 5.0.2 5.1.1 5.1.2 5.1.3 5.2.0 5.2.1 5.3.2 5.3.3.1 5.3.4 5.3.5 5.3.6 5.3.7
woocommerce-multilingual / classes / OrderItems / LineItem / Variation.php
woocommerce-multilingual / classes / OrderItems / LineItem Last commit date
Factory.php 1 week ago Product.php 1 week ago Variation.php 1 week ago
Variation.php
64 lines
1 <?php
2
3 namespace WCML\OrderItems\LineItem;
4
5 use WCML\OrderItems\Translator;
6
7 class Variation implements Translator {
8
9 public function translateItem( $item, $targetLanguage ) {
10 if ( ! $item instanceof \WC_Order_Item_Product ) {
11 return;
12 }
13
14 $productId = $item->get_product_id();
15 $translatedProductId = apply_filters( 'wpml_object_id', $productId, 'product', true, $targetLanguage );
16 if ( $productId && $productId !== $translatedProductId ) {
17 $item->set_product_id( $translatedProductId );
18 }
19
20 $variationId = $item->get_variation_id();
21 $translatedVariationId = apply_filters( 'wpml_object_id', $variationId, 'product_variation', true, $targetLanguage );
22 if ( $variationId && $variationId !== $translatedVariationId ) {
23 $item->set_variation_id( $translatedVariationId );
24 $item->set_name( wc_get_product( $translatedVariationId )->get_name() );
25 $this->update_attribute_item_meta_value( $item, $translatedVariationId );
26 }
27 }
28
29 private function update_attribute_item_meta_value( $item, $variationId ) {
30 foreach ( $item->get_meta_data() as $meta_data ) {
31 $data = $meta_data->get_data();
32 $attributeExists = metadata_exists( 'post', $variationId, 'attribute_' . $data['key'] );
33 if ( $attributeExists ) {
34 $attributeValue = get_post_meta( $variationId, 'attribute_' . $data['key'], true );
35
36 if ( '' === $attributeValue ) {
37 $productId = $item->get_product_id();
38 $options = $this->get_attribute_options( $productId, $data['key'] );
39
40 $orderLanguage = $item->get_order()->get_meta( \WCML_Orders::KEY_LANGUAGE );
41 $orderProductId = apply_filters( 'wpml_object_id', $productId, 'product', false, $orderLanguage );
42 $orderOptions = $this->get_attribute_options( $orderProductId, $data['key'] );
43
44 $position = array_search( $data['value'], $orderOptions, true );
45 if ( false !== $position ) {
46 $attributeValue = $options[ $position ];
47 }
48 }
49
50 if ( $attributeValue ) {
51 $item->update_meta_data( $data['key'], $attributeValue, $data['id'] ?? 0 );
52 }
53 }
54 }
55 }
56
57 private function get_attribute_options( $productId, $attribute ) {
58 $product = wc_get_product( $productId );
59 $attributes = $product->get_attributes();
60 return $attributes[ $attribute ]->get_options();
61 }
62
63 }
64