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 / inc / wcml-switch-lang-request.php
woocommerce-multilingual / inc Last commit date
admin-menus 1 month ago currencies 1 month ago template-classes 1 month ago translation-editor 1 month ago class-wcml-ajax-setup.php 1 month ago class-wcml-attributes.php 1 month ago class-wcml-capabilities.php 1 month ago class-wcml-cart-removed-items-widget.php 1 year ago class-wcml-cart-switch-lang-functions.php 1 month ago class-wcml-cart-sync-warnings.php 1 month ago class-wcml-cart.php 1 month ago class-wcml-comments.php 1 month ago class-wcml-compatibility.php 1 month ago class-wcml-coupons.php 1 month ago class-wcml-dependencies.php 1 month ago class-wcml-emails.php 1 month ago class-wcml-endpoints.php 1 month ago class-wcml-install.php 1 month ago class-wcml-languages-upgrader.php 1 month ago class-wcml-locale.php 1 month ago class-wcml-orders.php 1 month ago class-wcml-products-screen-options.php 1 month ago class-wcml-products.php 1 month ago class-wcml-reports.php 1 month ago class-wcml-requests.php 1 month ago class-wcml-resources.php 1 month ago class-wcml-store-pages.php 1 month ago class-wcml-terms.php 1 month ago class-wcml-tp-support.php 1 month ago class-wcml-troubleshooting.php 1 month ago class-wcml-upgrade.php 1 month ago class-wcml-url-translation.php 1 month ago class-wcml-wc-gateways.php 1 month ago class-wcml-wc-shipping.php 1 month ago class-wcml-wc-strings.php 1 month ago class-wcml-widgets.php 1 month ago constants.php 1 month ago functions-pure.php 1 month ago functions.php 1 month ago installer-loader.php 1 month ago missing-php-functions.php 1 month ago wcml-core-functions.php 1 month ago wcml-switch-lang-request.php 1 month 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