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 / compatibility / TableRateShipping / OrderItems / ShippingRate.php
woocommerce-multilingual / compatibility / TableRateShipping / OrderItems Last commit date
ShippingRate.php 1 week ago
ShippingRate.php
109 lines
1 <?php
2
3 namespace WCML\Compatibility\TableRateShipping\OrderItems;
4
5 use WCML\OrderItems\Shipping\StoreInDefaultLanguage;
6 use WCML\OrderItems\Translator;
7 use WCML\Utilities\DB;
8 use woocommerce_wpml;
9 use wpdb;
10
11 class ShippingRate implements Translator {
12
13 use StoreInDefaultLanguage;
14
15 private $woocommerce_wpml;
16
17 private $wpdb;
18
19 public function __construct( woocommerce_wpml $woocommerce_wpml, wpdb $wpdb ) {
20 $this->woocommerce_wpml = $woocommerce_wpml;
21 $this->wpdb = $wpdb;
22 }
23
24 public function translateItem( $item, $targetLanguage ) {
25 if ( ! $item instanceof \WC_Order_Item_Shipping ) {
26 return;
27 }
28
29 $shippingId = $item->get_method_id();
30 if ( ! $shippingId ) {
31 return;
32 }
33
34 if ( \WCML_Table_Rate_Shipping::RATE_SHIPPING_METHOD_ID !== $shippingId ) {
35 return;
36 }
37
38 $canGetStoredTableRates = class_exists( '\WooCommerce\Shipping\Table_Rate\Helpers' );
39 if ( ! $canGetStoredTableRates ) {
40 return;
41 }
42
43 $shippingTitle = $item->get_method_title();
44 $shippingInstanceId = (int) $item->get_instance_id();
45 $ratesPerInstance = \WooCommerce\Shipping\Table_Rate\Helpers::get_shipping_rates( $shippingInstanceId, ARRAY_A );
46 if ( ! is_array( $ratesPerInstance ) || empty( $ratesPerInstance ) ) {
47 return;
48 }
49
50 $ratesLabels = wp_list_pluck( $ratesPerInstance, 'rate_label', 'rate_id' );
51 $rateIdPerValue = array_search( $shippingTitle, $ratesLabels, true );
52 if ( false !== $rateIdPerValue ) {
53 $item->set_method_title(
54 $this->woocommerce_wpml->shipping->translate_shipping_method_title(
55 $shippingTitle,
56 $shippingId . $shippingInstanceId . $rateIdPerValue,
57 $targetLanguage
58 )
59 );
60 return;
61 }
62
63 $ratesIds = wp_list_pluck( $ratesPerInstance, 'rate_id' );
64 $rateIdToName = function( $rateId ) use ( $shippingInstanceId ) {
65 return sprintf( \WCML_Table_Rate_Shipping::RATE_LABEL_NAME_FORMAT, $shippingInstanceId, $rateId );
66 };
67 $ratesStringNames = wpml_collect( $ratesIds )
68 ->map( $rateIdToName )
69 ->toArray();
70
71 $rateData = $this->wpdb->get_row( $this->wpdb->prepare(
72 "SELECT s.value as originalRateTitle, st.language as rateTitleLanguage FROM {$this->wpdb->prefix}icl_strings AS s
73 LEFT JOIN {$this->wpdb->prefix}icl_string_translations AS st
74 ON st.string_id = s.id
75 WHERE s.context = %s
76 AND st.value = %s
77 AND s.name IN (" . DB::prepareIn( $ratesStringNames ) . ")
78 LIMIT 1
79 ",
80 \WCML_WC_Shipping::STRINGS_CONTEXT,
81 $shippingTitle
82 ) );
83
84 if ( ! $rateData ) {
85 return;
86 }
87
88 $foundRateIdPerValue = array_search( $rateData->originalRateTitle, $ratesLabels, true );
89 if ( false === $foundRateIdPerValue ) {
90 return;
91 }
92
93 $this->maybeSaveItem( $item, $rateData->originalRateTitle, $targetLanguage );
94
95 if ( $targetLanguage === $rateData->rateTitleLanguage ) {
96 return;
97 }
98
99 $item->set_method_title(
100 $this->woocommerce_wpml->shipping->translate_shipping_method_title(
101 $rateData->originalRateTitle,
102 $shippingId . $shippingInstanceId . $foundRateIdPerValue,
103 $targetLanguage
104 )
105 );
106 }
107
108 }
109