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 / inc / wcml-switch-lang-request.php
woocommerce-multilingual / inc Last commit date
admin-menus 1 week ago currencies 1 week ago template-classes 1 week ago translation-editor 1 week ago class-wcml-ajax-setup.php 1 week ago class-wcml-attributes.php 1 week ago class-wcml-capabilities.php 1 week ago class-wcml-cart-removed-items-widget.php 1 year ago class-wcml-cart-switch-lang-functions.php 1 week ago class-wcml-cart-sync-warnings.php 1 week ago class-wcml-cart.php 1 week ago class-wcml-comments.php 1 week ago class-wcml-compatibility.php 1 week ago class-wcml-coupons.php 1 week ago class-wcml-dependencies.php 1 week ago class-wcml-emails.php 1 week ago class-wcml-endpoints.php 1 week ago class-wcml-install.php 1 week ago class-wcml-languages-upgrader.php 1 week ago class-wcml-locale.php 1 week ago class-wcml-orders.php 1 week ago class-wcml-products-screen-options.php 1 week ago class-wcml-products.php 1 week ago class-wcml-reports.php 1 week ago class-wcml-requests.php 1 week ago class-wcml-resources.php 1 week ago class-wcml-store-pages.php 1 week ago class-wcml-terms.php 1 week ago class-wcml-tp-support.php 1 week ago class-wcml-troubleshooting.php 1 week ago class-wcml-upgrade.php 1 week ago class-wcml-url-translation.php 1 week ago class-wcml-wc-gateways.php 1 week ago class-wcml-wc-shipping.php 1 week ago class-wcml-wc-strings.php 1 week ago class-wcml-widgets.php 1 week ago constants.php 1 week ago functions-pure.php 1 week ago functions.php 1 week ago installer-loader.php 1 week ago missing-php-functions.php 1 week ago wcml-core-functions.php 1 week ago wcml-switch-lang-request.php 1 week ago
wcml-switch-lang-request.php
94 lines
1 <?php
2
3 class WCML_Switch_Lang_Request implements \IWPML_Frontend_Action, \IWPML_Backend_Action, \IWPML_DIC_Action {
4
5 const COOKIE_NAME = 'wp-wpml_current_language';
6
7 protected $default_language;
8 protected $wp_api;
9 private $cookie;
10 private $sitepress;
11
12 public function __construct( WPML_Cookie $cookie, WPML_WP_API $wp_api, SitePress $sitepress ) {
13
14 if ( ! is_admin() ) {
15 $this->cookie = $cookie;
16 $this->wp_api = $wp_api;
17 $this->sitepress = $sitepress;
18 $this->default_language = $this->sitepress->get_default_language();
19 }
20 }
21
22 public function add_hooks() {
23
24 if ( ! is_admin() && $this->sitepress->get_setting( $this->wp_api->constant( 'WPML_Cookie_Setting::COOKIE_SETTING_FIELD' ) ) ) {
25 add_action( 'wpml_before_init', [ $this, 'detect_user_switch_language' ] );
26 }
27 }
28
29 public function detect_user_switch_language() {
30
31 if ( ! $this->wp_api->constant( 'DOING_AJAX' ) ) {
32
33 $lang_from = $this->get_cookie_lang();
34 $lang_to = $this->get_requested_lang();
35
36 if ( $lang_from && $lang_from !== $lang_to ) {
37 do_action( 'wcml_user_switch_language', $lang_from, $lang_to );
38 }
39 }
40
41 }
42
43 public function get_cookie_lang() {
44 global $wpml_language_resolution;
45
46 $cookie_name = $this->get_cookie_name();
47 $cookie_value = $this->cookie->get_cookie( $cookie_name );
48 $lang = $cookie_value ? substr( $cookie_value, 0, 10 ) : null;
49 $lang = $wpml_language_resolution->is_language_active( $lang ) ? $lang : $this->default_language;
50
51 return $lang;
52 }
53
54 public function get_cookie_name() {
55 return self::COOKIE_NAME;
56 }
57
58 public function get_cookie_domain() {
59
60 return defined( 'COOKIE_DOMAIN' ) ? COOKIE_DOMAIN : $this->get_server_host_name();
61 }
62
63 public function get_server_host_name() {
64 $host = $_SERVER['HTTP_HOST'] ?? null;
65 if ( ! $host ) {
66 $host = $_SERVER['SERVER_NAME'] ?? null;
67 $server_port = $_SERVER['SERVER_PORT'] ?? null;
68 if ( $host && $server_port && ! in_array( $server_port, [ 80, 443 ], false ) ) {
69 $host = $host . ':' . $server_port;
70 }
71 }
72 return preg_replace( '@:[443]+([/]?)@', '$1', $host );
73 }
74
75 public function get_requested_lang() {
76 return $this->is_comments_post_page() ? $this->get_cookie_lang() : $this->get_request_uri_lang();
77 }
78
79 public function is_comments_post_page() {
80 global $pagenow;
81
82 return 'wp-comments-post.php' === $pagenow;
83 }
84
85 public function get_request_uri_lang() {
86 global $wpml_url_converter;
87
88 $req_url = isset( $_SERVER['HTTP_HOST'] ) ? untrailingslashit( $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ) : '';
89
90 return $wpml_url_converter->get_language_from_url( $req_url );
91 }
92
93 }
94