| @@ -1,8 +1,5 @@ | ||
| 1 | 1 | <?php |
| 2 | -/** | |
| 3 | - * @package Polylang | |
| 4 | - */ | |
| 5 | 2 | |
| 6 | 3 | /** |
| 7 | 4 | * Links model for use when the language code is added in url as a directory |
| 8 | 5 | * for example mysite.com/en/something |
| @@ -61,12 +58,12 @@ | ||
| 61 | 58 | public function add_language_to_link( $url, $lang ) { |
| 62 | 59 | if ( ! empty( $lang ) ) { |
| 63 | 60 | $base = $this->options['rewrite'] ? '' : 'language/'; |
| 64 | 61 | $slug = $this->options['default_lang'] == $lang->slug && $this->options['hide_default'] ? '' : $base . $lang->slug . '/'; |
| 65 | - $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; | |
| 66 | 63 | |
| 67 | 64 | if ( false === strpos( $url, $new = $root . $slug ) ) { |
| 68 | - $pattern = preg_quote( $root, '#' ); | |
| 65 | + $pattern = str_replace( '/', '\/', $root ); | |
| 69 | 66 | $pattern = '#' . $pattern . '#'; |
| 70 | 67 | return preg_replace( $pattern, $new, $url, 1 ); // Only once |
| 71 | 68 | } |
| 72 | 69 | } |
| @@ -82,10 +79,8 @@ | ||
| 82 | 79 | * @param string $url url to modify |
| 83 | 80 | * @return string modified url |
| 84 | 81 | */ |
| 85 | 82 | public function remove_language_from_link( $url ) { |
| 86 | - $languages = array(); | |
| 87 | - | |
| 88 | 83 | foreach ( $this->model->get_languages_list() as $language ) { |
| 89 | 84 | if ( ! $this->options['hide_default'] || $this->options['default_lang'] != $language->slug ) { |
| 90 | 85 | $languages[] = $language->slug; |
| 91 | 86 | } |
| @@ -91,12 +86,12 @@ | ||
| 91 | 86 | } |
| 92 | 87 | } |
| 93 | 88 | |
| 94 | 89 | if ( ! empty( $languages ) ) { |
| 95 | - $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; | |
| 96 | 91 | |
| 97 | - $pattern = preg_quote( $root, '#' ); | |
| 98 | - $pattern = '#' . $pattern . ( $this->options['rewrite'] ? '' : 'language/' ) . '(' . implode( '|', $languages ) . ')(/|$)#'; | |
| 92 | + $pattern = str_replace( '/', '\/', $root ); | |
| 93 | + $pattern = '#' . $pattern . ( $this->options['rewrite'] ? '' : 'language\/' ) . '(' . implode( '|', $languages ) . ')(\/|$)#'; | |
| 99 | 94 | $url = preg_replace( $pattern, $root, $url ); |
| 100 | 95 | } |
| 101 | 96 | return $url; |
| 102 | 97 | } |
| @@ -112,17 +107,18 @@ | ||
| 112 | 107 | * @return string language slug |
| 113 | 108 | */ |
| 114 | 109 | public function get_language_from_url( $url = '' ) { |
| 115 | 110 | if ( empty( $url ) ) { |
| 116 | - $url = pll_get_requested_url(); | |
| 111 | + $path = $_SERVER['REQUEST_URI']; | |
| 112 | + } else { | |
| 113 | + $path = parse_url( $url, PHP_URL_PATH ); | |
| 117 | 114 | } |
| 118 | 115 | |
| 119 | - $path = wp_parse_url( $url, PHP_URL_PATH ); | |
| 120 | 116 | $root = ( false === strpos( $url, '://' ) ) ? $this->home_relative . $this->root : $this->home . '/' . $this->root; |
| 121 | 117 | |
| 122 | - $pattern = wp_parse_url( $root . ( $this->options['rewrite'] ? '' : 'language/' ), PHP_URL_PATH ); | |
| 123 | - $pattern = preg_quote( $pattern, '#' ); | |
| 124 | - $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' ) ) ) . ')(\/|$)#'; | |
| 125 | 121 | return preg_match( $pattern, trailingslashit( $path ), $matches ) ? $matches[1] : ''; // $matches[1] is the slug of the requested language |
| 126 | 122 | } |
| 127 | 123 | |
| 128 | 124 | /** |