PluginProbe ʕ •ᴥ•ʔ
WPML Multilingual & Multicurrency for WooCommerce / trunk
WPML Multilingual & Multicurrency for WooCommerce vtrunk
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 month ago Product.php 1 month ago Variation.php 1 month 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