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 / Multicurrency / Shipping / FrontEndHooks.php
woocommerce-multilingual / classes / Multicurrency / Shipping Last commit date
AdminHooks.php 1 month ago DefaultConversion.php 1 month ago FlatRateShipping.php 5 years ago FreeShipping.php 1 month ago FrontEndHooks.php 1 month ago LocalPickup.php 5 years ago ShippingClasses.php 1 month ago ShippingClassesMode.php 1 month ago ShippingHooksFactory.php 1 month ago ShippingMode.php 1 month ago ShippingModeBase.php 1 month ago ShippingModeProvider.php 1 month ago UnsupportedShipping.php 1 month ago VariableCost.php 1 month ago
FrontEndHooks.php
74 lines
1 <?php
2
3 namespace WCML\Multicurrency\Shipping;
4
5 use IWPML_Action;
6 use WCML\StandAlone\IStandAloneAction;
7
8 class FrontEndHooks implements IWPML_Action, IStandAloneAction {
9
10 private $multiCurrency;
11
12 public function __construct( $multiCurrency ) {
13 $this->multiCurrency = $multiCurrency;
14 }
15
16 public function add_hooks() {
17 ShippingModeProvider::getAll()->each( function( ShippingMode $shippingMode ) {
18 add_filter(
19 'woocommerce_shipping_' . $shippingMode->getMethodId() . '_instance_option',
20 $this->getShippingCost( $shippingMode ),
21 10,
22 3
23 );
24 }
25 );
26 }
27
28 public function getShippingCost( ShippingMode $shippingMode ) {
29 return function( $rate, $key, $wcShippingMethod ) use ( $shippingMode ) {
30 if ( $shippingMode->isManualPricingEnabled( $wcShippingMethod ) ) {
31 if ( 'cost' === $key ) {
32 $rate = $shippingMode->getShippingCostValue( $wcShippingMethod, $this->getClientCurrency() );
33 do_action( 'wcml_shipping_cost_in_mc', $wcShippingMethod );
34 } elseif ( $shippingMode instanceof ShippingClassesMode ) {
35 if ( $this->isShippingClass( $key ) ) {
36 $rate = $shippingMode->getShippingClassCostValue( $wcShippingMethod, $this->getClientCurrency(), $key );
37 } elseif ( $this->isNoShippingClass( $key ) ) {
38 $rate = $shippingMode->getNoShippingClassCostValue( $wcShippingMethod, $this->getClientCurrency() );
39 }
40 }
41 }
42 return $rate;
43 };
44 }
45
46 private function isShippingClass( $key ) {
47 return 'class_cost_' === substr( $key, 0, 11 );
48 }
49
50 private function isNoShippingClass( $key ) {
51 return 'no_class_cost' === substr( $key, 0, 13 );
52 }
53
54 private function getClientCurrency() {
55 return $this->adjustCurrencyOnWidgetChange( $this->multiCurrency->get_client_currency() );
56 }
57
58 private function adjustCurrencyOnWidgetChange( $currencyCode ) {
59 $postData = wpml_collect( $_POST );
60 $currencyCodeInRequest = $postData->get( 'currency' );
61 if ( 'wcml_switch_currency' === $postData->get( 'action' )
62 && $currencyCodeInRequest
63 && $this->validateCurrencyCode( $currencyCodeInRequest ) ) {
64 return $currencyCodeInRequest;
65 }
66 return $currencyCode;
67 }
68
69 private function validateCurrencyCode( $currencyCode ) {
70 return in_array( $currencyCode, $this->multiCurrency->get_currency_codes() );
71 }
72
73 }
74