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 / MO / Hooks.php
woocommerce-multilingual / classes / MO Last commit date
Hooks.php 1 week ago
Hooks.php
65 lines
1 <?php
2
3 namespace WCML\MO;
4
5 use WPML\LIB\WP\WordPress;
6 use function WPML\Container\make;
7
8 class Hooks implements \IWPML_Backend_Action, \IWPML_Frontend_Action {
9
10 const WC_DOMAIN = 'woocommerce';
11
12 private $isLoading = false;
13
14 public function add_hooks() {
15 add_action( 'wpml_language_has_switched', [ $this, 'forceRemoveUnloadedDomain' ], 0 );
16
17 if ( WordPress::versionCompare( '>', '6.4.999' ) ) {
18 add_filter( 'override_unload_textdomain', [ $this, 'forceUnloadWCTextdomainWithReloadableArg' ], 10, 3 );
19 add_filter( 'pre_load_textdomain', [ $this, 'preLoadTextDomainFilter' ], 10, 4 );
20 }
21 }
22
23 public function forceRemoveUnloadedDomain() {
24 if ( isset( $GLOBALS['l10n_unloaded'][ self::WC_DOMAIN ] ) ) {
25 unset( $GLOBALS['l10n_unloaded'][ self::WC_DOMAIN ] );
26 }
27 }
28
29 public function forceUnloadWCTextdomainWithReloadableArg( $override, $domain, $reloadable ) {
30 if ( self::WC_DOMAIN === $domain && ! $reloadable ) {
31 unload_textdomain( self::WC_DOMAIN, true );
32 \WP_Translation_Controller::get_instance()->unload_textdomain( self::WC_DOMAIN );
33 return true;
34 }
35
36 return $override;
37 }
38
39 public function preLoadTextDomainFilter( $loaded, $domain, $mofile, $locale ) {
40 if ( self::WC_DOMAIN === $domain && ! $this->isLoading ) {
41 $this->forceRemoveUnloadedDomain();
42
43 if ( ! $locale ) {
44 $this->maybeFixDiscrepancyBetweenFileLocaleAndControllerLocale( $loaded, $domain, $mofile );
45 }
46
47 }
48
49 return $loaded;
50 }
51
52 private function maybeFixDiscrepancyBetweenFileLocaleAndControllerLocale( $loaded, $domain, $mofile ) {
53 $fileLocale = make( \WPML_ST_Translations_File_Locale::class );
54 $localeFromFile = $fileLocale ? $fileLocale->get( $mofile, $domain ) : null;
55
56 if ( $localeFromFile && $localeFromFile !== \WP_Translation_Controller::get_instance()->get_locale() ) {
57 $this->isLoading = true;
58 $loaded = load_textdomain( $domain, $mofile, $localeFromFile );
59 $this->isLoading = false;
60 }
61
62 return $loaded;
63 }
64 }
65