PluginProbe
Polylang / 3.7.1
Polylang v3.7.1
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-model.php +101 -62 3.03.7.1 View file →
@@ -35,8 +35,15 @@
35 35 */
36 36 public $home;
37 37
38 38 /**
39 + * Whether rewrite rules can be filtered or not. Default to `false`.
40 + *
41 + * @var boolean
42 + */
43 + protected static $can_filter_rewrite_rules = false;
44 +
45 + /**
39 46 * Constructor.
40 47 *
41 48 * @since 1.5
42 49 *
@@ -47,23 +54,44 @@
47 54 $this->options = &$model->options;
48 55
49 56 $this->home = home_url();
50 57
51 - add_filter( 'pll_languages_list', array( $this, 'pll_languages_list' ), 4 ); // After PLL_Static_Pages.
52 - add_filter( 'pll_after_languages_cache', array( $this, 'pll_after_languages_cache' ) );
58 + // Hooked with normal priority because it needs to be run after static pages is set in language data. Must be done early (before languages objects are created).
59 + add_filter( 'pll_additional_language_data', array( $this, 'set_language_home_urls' ), 10, 2 );
53 60
54 61 // Adds our domains or subdomains to allowed hosts for safe redirection.
55 62 add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
63 +
64 + // Allows secondary domains for home and search URLs in `PLL_Language`.
65 + add_filter( 'pll_language_home_url', array( $this, 'set_language_home_url' ), 10, 2 );
66 + add_filter( 'pll_language_search_url', array( $this, 'set_language_search_url' ), 10, 2 );
67 +
68 + if ( did_action( 'pll_init' ) ) {
69 + $this->init();
70 + } else {
71 + add_action( 'pll_init', array( $this, 'init' ) );
72 + }
56 73 }
57 74
58 75 /**
76 + * Initializes the links model.
77 + * Does nothing by default.
78 + *
79 + * @since 3.5
80 + *
81 + * @return void
82 + */
83 + public function init() {}
84 +
85 + /**
59 86 * Adds the language code in url.
60 87 *
61 88 * @since 1.2
89 + * @since 3.4 Accepts now a language slug.
62 90 *
63 - * @param string $url The url to modify.
64 - * @param PLL_Language $lang The language object.
65 - * @return string Modified url.
91 + * @param string $url The url to modify.
92 + * @param PLL_Language|string|false $lang Language object or slug.
93 + * @return string The modified url.
66 94 */
67 95 abstract public function add_language_to_link( $url, $lang );
68 96
69 97 /**
@@ -71,9 +99,9 @@
71 99 *
72 100 * @since 1.2
73 101 *
74 102 * @param string $url The url to modify.
75 - * @return string Modified url.
103 + * @return string The modified url.
76 104 */
77 105 abstract public function remove_language_from_link( $url );
78 106
79 107 /**
@@ -81,9 +109,9 @@
81 109 *
82 110 * @since 1.2
83 111 *
84 112 * @param string $url The url to modify.
85 - * @return string Modified url.
113 + * @return string The modified url.
86 114 */
87 115 abstract public function remove_paged_from_link( $url );
88 116
89 117 /**
@@ -92,32 +120,33 @@
92 120 * @since 1.5
93 121 *
94 122 * @param string $url The url to modify.
95 123 * @param int $page The page number.
96 - * @return string Modified url.
124 + * @return string The modified url.
97 125 */
98 126 abstract public function add_paged_to_link( $url, $page );
99 127
100 128 /**
101 - * Returns the language based on language code in url.
129 + * Returns the language based on the language code in the url.
102 130 *
103 131 * @since 1.2
104 - * @since 2.0 add $url argument.
132 + * @since 2.0 Add the $url argument.
105 133 *
106 - * @param string $url Optional, defaults to thej current url.
107 - * @return string Language slug.
134 + * @param string $url Optional, defaults to the current url.
135 + * @return string The language slug.
108 136 */
109 137 abstract public function get_language_from_url( $url = '' );
110 138
111 139 /**
112 - * Returns the static front page url.
140 + * Returns the static front page url in a given language.
113 141 *
114 142 * @since 1.8
143 + * @since 3.4 Accepts now an array of language properties.
115 144 *
116 - * @param PLL_Language $lang The language object.
145 + * @param PLL_Language|array $language Language object or array of language properties.
117 146 * @return string The static front page url.
118 147 */
119 - abstract public function front_page_url( $lang );
148 + abstract public function front_page_url( $language );
120 149
121 150 /**
122 151 * Changes the language code in url.
123 152 *
@@ -124,9 +153,9 @@
124 153 * @since 1.5
125 154 *
126 155 * @param string $url The url to modify.
127 156 * @param PLL_Language $lang The language object.
128 - * @return string Modified url.
157 + * @return string The modified url.
129 158 */
130 159 public function switch_language_in_link( $url, $lang ) {
131 160 $url = $this->remove_language_from_link( $url );
132 161 return $this->add_language_to_link( $url, $lang );
@@ -132,9 +161,9 @@
132 161 return $this->add_language_to_link( $url, $lang );
133 162 }
134 163
135 164 /**
136 - * Get hosts managed on the website.
165 + * Get the hosts managed on the website.
137 166 *
138 167 * @since 1.5
139 168 *
140 169 * @return string[] The list of hosts.
@@ -146,80 +175,90 @@
146 175 /**
147 176 * Returns the home url in a given language.
148 177 *
149 178 * @since 1.3.1
179 + * @since 3.4 Accepts now a language slug.
150 180 *
151 - * @param PLL_Language $lang PLL_Language object.
181 + * @param PLL_Language|string $language Language object or slug.
152 182 * @return string
153 183 */
154 - public function home_url( $lang ) {
184 + public function home_url( $language ) {
185 + if ( $language instanceof PLL_Language ) {
186 + $language = $language->slug;
187 + }
188 +
155 189 $url = trailingslashit( $this->home );
156 - return $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ? $url : $this->add_language_to_link( $url, $lang );
190 +
191 + return $this->options['hide_default'] && $language === $this->options['default_lang'] ? $url : $this->add_language_to_link( $url, $language );
157 192 }
158 193
159 194 /**
160 - * Sets the home urls in PLL_Language.
195 + * Adds home and search URLs to language data before the object is created.
161 196 *
162 - * @since 1.8
197 + * @since 3.4
163 198 *
164 - * @param PLL_Language $language PLL_Language object.
165 - * @return void
199 + * @param array $additional_data Array of language additional data.
200 + * @param array $language Language data.
201 + * @return array Language data with home and search URLs added.
166 202 */
167 - protected function set_home_url( $language ) {
168 - // We should always have a default language here, except, temporarily, in PHPUnit tests. The test here protects against PHP notices.
169 - if ( isset( $this->options['default_lang'] ) ) {
170 - $search_url = $this->home_url( $language );
171 - $home_url = empty( $language->page_on_front ) || $this->options['redirect_lang'] ? $search_url : $this->front_page_url( $language );
172 - $language->set_home_url( $search_url, $home_url );
173 - }
203 + public function set_language_home_urls( $additional_data, $language ) {
204 + $language = array_merge( $language, $additional_data );
205 + $additional_data['search_url'] = $this->set_language_search_url( '', $language );
206 + $additional_data['home_url'] = $this->set_language_home_url( '', $language );
207 +
208 + return $additional_data;
174 209 }
175 210
176 211 /**
177 - * Sets the home urls and flags before the languages are persistently cached.
212 + * Adds our domains or subdomains to allowed hosts for safe redirect.
178 213 *
179 - * @since 1.8
214 + * @since 1.4.3
180 215 *
181 - * @param PLL_Language[] $languages Array of PLL_Language objects.
182 - * @return PLL_Language[] Array of PLL_Language objects with home url and flag.
216 + * @param string[] $hosts Allowed hosts.
217 + * @return string[] Modified list of allowed hosts.
183 218 */
184 - public function pll_languages_list( $languages ) {
185 - foreach ( $languages as $language ) {
186 - $this->set_home_url( $language );
187 - $language->set_flag();
219 + public function allowed_redirect_hosts( $hosts ) {
220 + return array_unique( array_merge( $hosts, array_values( $this->get_hosts() ) ) );
221 + }
222 +
223 + /**
224 + * Returns language home URL property according to the current domain.
225 + *
226 + * @since 3.4.4
227 + *
228 + * @param string $url Home URL.
229 + * @param array $language Array of language props.
230 + * @return string Filtered home URL.
231 + */
232 + public function set_language_home_url( $url, $language ) {
233 + if ( empty( $language['page_on_front'] ) || $this->options['redirect_lang'] ) {
234 + return $this->home_url( $language['slug'] );
188 235 }
189 - return $languages;
236 +
237 + return $this->front_page_url( $language );
190 238 }
191 239
192 240 /**
193 - * Sets the home urls when not cached.
194 - * Sets the home urls scheme.
241 + * Returns language search URL property according to the current domain.
195 242 *
196 - * @since 1.8
243 + * @since 3.4.4
197 244 *
198 - * @param PLL_Language[] $languages Array of PLL_Language objects.
199 - * @return PLL_Language[] Array of PLL_Language objects.
245 + * @param string $url Search URL.
246 + * @param array $language Array of language props.
247 + * @return string Filtered search URL.
200 248 */
201 - public function pll_after_languages_cache( $languages ) {
202 - foreach ( $languages as $language ) {
203 - // Get the home urls when not cached.
204 - if ( ( defined( 'PLL_CACHE_LANGUAGES' ) && ! PLL_CACHE_LANGUAGES ) || ( defined( 'PLL_CACHE_HOME_URL' ) && ! PLL_CACHE_HOME_URL ) ) {
205 - $this->set_home_url( $language );
206 - }
207 -
208 - // Ensures that the ( possibly cached ) home and flag urls use the right scheme http or https.
209 - $language->set_url_scheme();
210 - }
211 - return $languages;
249 + public function set_language_search_url( $url, $language ) {
250 + return $this->home_url( $language['slug'] );
212 251 }
213 252
214 253 /**
215 - * Adds our domains or subdomains to allowed hosts for safe redirect.
254 + * Used to remove hooks in child classes, called when switching blog @see {PLL_Base::switch_blog()}.
255 + * Does nothing by default.
216 256 *
217 - * @since 1.4.3
257 + * @since 3.5
218 258 *
219 - * @param string[] $hosts Allowed hosts.
220 - * @return string[] Modified list of allowed hosts.
259 + * @return void
221 260 */
222 - public function allowed_redirect_hosts( $hosts ) {
223 - return array_unique( array_merge( $hosts, array_values( $this->get_hosts() ) ) );
261 + public function remove_filters() {
262 + self::$can_filter_rewrite_rules = false;
224 263 }
225 264 }