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 / Hooks.php
woocommerce-multilingual / classes / OrderItems Last commit date
LineItem 1 week ago Shipping 1 week ago Hooks.php 1 week ago Translator.php 1 week ago TranslatorFactory.php 1 week ago
Hooks.php
129 lines
1 <?php
2
3 namespace WCML\OrderItems;
4
5 use IWPML_Backend_Action;
6 use IWPML_DIC_Action;
7 use IWPML_Frontend_Action;
8 use SitePress;
9 use WCML\Rest\Functions;
10 use WCML\StandAlone\NullSitePress;
11 use WCML\Utilities\ActionScheduler;
12 use WPML\Core\ISitePress;
13
14 class Hooks implements IWPML_Backend_Action, IWPML_Frontend_Action, IWPML_DIC_Action {
15
16 private $sitepress;
17
18 private $lineItemFactory;
19
20 private $shippingFactory;
21
22 public function __construct(
23 ISitePress $sitepress,
24 LineItem\Factory $lineItemFactory,
25 Shipping\Factory $shippingFactory
26 ) {
27 $this->sitepress = $sitepress;
28 $this->lineItemFactory = $lineItemFactory;
29 $this->shippingFactory = $shippingFactory;
30 }
31
32 public function add_hooks() {
33 add_filter( 'woocommerce_order_get_items', [ $this, 'getOrderItems' ], 10, 2 );
34 }
35
36 public function getOrderItems( $items, $order ) {
37 if ( ! $items ) {
38 return $items;
39 }
40
41 $shouldTranslateOrderItems = $this->shouldTranslateOrderItems();
42 $shouldTranslateOrderItems = apply_filters( 'wcml_should_translate_order_items', $shouldTranslateOrderItems, $items, $order );
43 if ( ! $shouldTranslateOrderItems ) {
44 return $items;
45 }
46
47 $targetLanguage = $this->getTargetLanguage( $order );
48 if ( ! $targetLanguage ) {
49 return $items;
50 }
51
52 $this->translateOrderItems( $items, $targetLanguage );
53
54 return $items;
55 }
56
57 private function shouldTranslateOrderItems() {
58 if ( ActionScheduler::isWcRunningFromAsyncActionScheduler() ) {
59 return false;
60 }
61
62 if (
63 is_admin() ||
64 is_view_order_page() ||
65 is_order_received_page() ||
66 Functions::isRestApiRequest()
67 ) {
68 return true;
69 }
70
71 return false;
72 }
73
74 private function getTargetLanguage( $order ) {
75 if ( $this->isOrderEditPage() ) {
76 $language = $this->sitepress->get_user_admin_language( get_current_user_id(), true );
77 } elseif ( $this->isOrderActionTriggeredForCustomer() ) {
78 $language = \WCML_Orders::getLanguage( $order->get_id() ) ?: $this->sitepress->get_default_language();
79 } else {
80 $language = $this->sitepress->get_current_language();
81 }
82
83 return apply_filters( 'wcml_get_order_items_language', $language, $order );
84 }
85
86 private function isOrderEditPage() {
87 return ( \WCML\COT\Helper::isOrderEditAdminScreen() && empty( $_POST ) ) || ( isset( $_GET['post'] ) && 'shop_order' === get_post_type( $_GET['post'] ) );
88 }
89
90 private function isOrderActionTriggeredForCustomer() {
91 return isset( $_GET['action'] ) && wpml_collect(
92 [ 'woocommerce_mark_order_complete', 'woocommerce_mark_order_status', 'mark_processing' ]
93 )->contains( $_GET['action'] );
94 }
95
96 private function translateOrderItems( $items, $targetLanguage ) {
97
98 if ( ! $targetLanguage ) {
99 $targetLanguage = $this->sitepress->get_current_language();
100 }
101
102 foreach ( $items as $item ) {
103 if ( $item instanceof \WC_Order_Item_Product ) {
104 $this->translateLineItem( $item, $targetLanguage );
105 } elseif ( $item instanceof \WC_Order_Item_Shipping ) {
106 $this->translateShipping( $item, $targetLanguage );
107 }
108 }
109 }
110
111 private function translateLineItem( $item, $targetLanguage ) {
112 $translator = $this->lineItemFactory->getTranslator( $item );
113 if ( null === $translator ) {
114 return;
115 }
116 $translator->translateItem( $item, $targetLanguage );
117 }
118
119 private function translateShipping( $item, $targetLanguage ) {
120 $translator = $this->shippingFactory->getTranslator( $item );
121 if ( null === $translator ) {
122 return;
123 }
124
125 $translator->translateItem( $item, $targetLanguage );
126 }
127
128 }
129