PluginProbe
Polylang / 2.5.2
Polylang v2.5.2
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 -15 2.82.5.2 View file →
@@ -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 /**