PluginProbe
Polylang / 2.5
Polylang v2.5
3.8.9 3.8.8 3.8.7 3.8.6 3.8.5 3.8.4 3.8.3 2.7 2.7.0.1 2.7.1 2.7.2 2.7.3 2.7.4 2.8 2.8.1 2.8.2 2.8.3 2.8.4 2.9 2.9.1 2.9.2 3.0 3.0.1 3.0.2 3.0.3 All 233 releases
← All changes | include/links-directory.php +11 -12 2.7.42.5 View file →
@@ -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 /**