| @@ -58,12 +58,12 @@ | ||
| 58 | 58 | public function add_language_to_link( $url, $lang ) { |
| 59 | 59 | if ( ! empty( $lang ) ) { |
| 60 | 60 | $base = $this->options['rewrite'] ? '' : 'language/'; |
| 61 | 61 | $slug = $this->options['default_lang'] == $lang->slug && $this->options['hide_default'] ? '' : $base . $lang->slug . '/'; |
| 62 | - $root = ( false === strpos( $url, '://' ) ) ? $this->home_relative . $this->root : preg_replace( '#^https?://#', '://', $this->home . '/' . $this->root ); | |
| 62 | + $root = ( false === strpos( $url, '://' ) ) ? $this->home_relative . $this->root : $this->home . '/' . $this->root; | |
| 63 | 63 | |
| 64 | 64 | if ( false === strpos( $url, $new = $root . $slug ) ) { |
| 65 | - $pattern = preg_quote( $root, '#' ); | |
| 65 | + $pattern = str_replace( '/', '\/', $root ); | |
| 66 | 66 | $pattern = '#' . $pattern . '#'; |
| 67 | 67 | return preg_replace( $pattern, $new, $url, 1 ); // Only once |
| 68 | 68 | } |
| 69 | 69 | } |
| @@ -79,10 +79,8 @@ | ||
| 79 | 79 | * @param string $url url to modify |
| 80 | 80 | * @return string modified url |
| 81 | 81 | */ |
| 82 | 82 | public function remove_language_from_link( $url ) { |
| 83 | - $languages = array(); | |
| 84 | - | |
| 85 | 83 | foreach ( $this->model->get_languages_list() as $language ) { |
| 86 | 84 | if ( ! $this->options['hide_default'] || $this->options['default_lang'] != $language->slug ) { |
| 87 | 85 | $languages[] = $language->slug; |
| 88 | 86 | } |
| @@ -88,12 +86,12 @@ | ||
| 88 | 86 | } |
| 89 | 87 | } |
| 90 | 88 | |
| 91 | 89 | if ( ! empty( $languages ) ) { |
| 92 | - $root = ( false === strpos( $url, '://' ) ) ? $this->home_relative . $this->root : preg_replace( '#^https?://#', '://', $this->home . '/' . $this->root ); | |
| 90 | + $root = ( false === strpos( $url, '://' ) ) ? $this->home_relative . $this->root : $this->home . '/' . $this->root; | |
| 93 | 91 | |
| 94 | - $pattern = preg_quote( $root, '#' ); | |
| 95 | - $pattern = '#' . $pattern . ( $this->options['rewrite'] ? '' : 'language/' ) . '(' . implode( '|', $languages ) . ')(/|$)#'; | |
| 92 | + $pattern = str_replace( '/', '\/', $root ); | |
| 93 | + $pattern = '#' . $pattern . ( $this->options['rewrite'] ? '' : 'language\/' ) . '(' . implode( '|', $languages ) . ')(\/|$)#'; | |
| 96 | 94 | $url = preg_replace( $pattern, $root, $url ); |
| 97 | 95 | } |
| 98 | 96 | return $url; |
| 99 | 97 | } |
| @@ -109,17 +107,18 @@ | ||
| 109 | 107 | * @return string language slug |
| 110 | 108 | */ |
| 111 | 109 | public function get_language_from_url( $url = '' ) { |
| 112 | 110 | if ( empty( $url ) ) { |
| 113 | - $url = pll_get_requested_url(); | |
| 111 | + $path = $_SERVER['REQUEST_URI']; | |
| 112 | + } else { | |
| 113 | + $path = parse_url( $url, PHP_URL_PATH ); | |
| 114 | 114 | } |
| 115 | 115 | |
| 116 | - $path = wp_parse_url( $url, PHP_URL_PATH ); | |
| 117 | 116 | $root = ( false === strpos( $url, '://' ) ) ? $this->home_relative . $this->root : $this->home . '/' . $this->root; |
| 118 | 117 | |
| 119 | - $pattern = wp_parse_url( $root . ( $this->options['rewrite'] ? '' : 'language/' ), PHP_URL_PATH ); | |
| 120 | - $pattern = preg_quote( $pattern, '#' ); | |
| 121 | - $pattern = '#^' . $pattern . '(' . implode( '|', $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) . ')(/|$)#'; | |
| 118 | + $pattern = parse_url( $root . ( $this->options['rewrite'] ? '' : 'language/' ), PHP_URL_PATH ); | |
| 119 | + $pattern = str_replace( '/', '\/', $pattern ); | |
| 120 | + $pattern = '#' . $pattern . '(' . implode( '|', $this->model->get_languages_list( array( 'fields' => 'slug' ) ) ) . ')(\/|$)#'; | |
| 122 | 121 | return preg_match( $pattern, trailingslashit( $path ), $matches ) ? $matches[1] : ''; // $matches[1] is the slug of the requested language |
| 123 | 122 | } |
| 124 | 123 | |
| 125 | 124 | /** |