PluginProbe
Polylang / 3.3
Polylang v3.3
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
polylang / include / links-model.php

links-model.php in Polylang 3.3, at include/links-model.php

223 lines 5.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2 /**
3 * @package Polylang
4 */
5
6 /**
7 * Links model abstract class.
8 *
9 * @since 1.5
10 */
11 abstract class PLL_Links_Model {
12 /**
13 * True if the child class uses pretty permalinks, false otherwise.
14 *
15 * @var bool
16 */
17 public $using_permalinks;
18
19 /**
20 * Stores the plugin options.
21 *
22 * @var array
23 */
24 public $options;
25
26 /**
27 * @var PLL_Model
28 */
29 public $model;
30
31 /**
32 * Stores the home url before it is filtered.
33 *
34 * @var string
35 */
36 public $home;
37
38 /**
39 * Constructor.
40 *
41 * @since 1.5
42 *
43 * @param PLL_Model $model PLL_Model instance.
44 */
45 public function __construct( &$model ) {
46 $this->model = &$model;
47 $this->options = &$model->options;
48
49 $this->home = home_url();
50
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' ) );
53
54 // Adds our domains or subdomains to allowed hosts for safe redirection.
55 add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
56 }
57
58 /**
59 * Adds the language code in url.
60 *
61 * @since 1.2
62 *
63 * @param string $url The url to modify.
64 * @param PLL_Language|false $lang The language object.
65 * @return string The modified url.
66 */
67 abstract public function add_language_to_link( $url, $lang );
68
69 /**
70 * Returns the url without language code.
71 *
72 * @since 1.2
73 *
74 * @param string $url The url to modify.
75 * @return string The modified url.
76 */
77 abstract public function remove_language_from_link( $url );
78
79 /**
80 * Returns the link to the first page.
81 *
82 * @since 1.2
83 *
84 * @param string $url The url to modify.
85 * @return string The modified url.
86 */
87 abstract public function remove_paged_from_link( $url );
88
89 /**
90 * Returns the link to a paged page.
91 *
92 * @since 1.5
93 *
94 * @param string $url The url to modify.
95 * @param int $page The page number.
96 * @return string The modified url.
97 */
98 abstract public function add_paged_to_link( $url, $page );
99
100 /**
101 * Returns the language based on the language code in the url.
102 *
103 * @since 1.2
104 * @since 2.0 Add the $url argument.
105 *
106 * @param string $url Optional, defaults to the current url.
107 * @return string The language slug.
108 */
109 abstract public function get_language_from_url( $url = '' );
110
111 /**
112 * Returns the static front page url in a given language.
113 *
114 * @since 1.8
115 *
116 * @param PLL_Language $lang The language object.
117 * @return string The static front page url.
118 */
119 abstract public function front_page_url( $lang );
120
121 /**
122 * Changes the language code in url.
123 *
124 * @since 1.5
125 *
126 * @param string $url The url to modify.
127 * @param PLL_Language $lang The language object.
128 * @return string The modified url.
129 */
130 public function switch_language_in_link( $url, $lang ) {
131 $url = $this->remove_language_from_link( $url );
132 return $this->add_language_to_link( $url, $lang );
133 }
134
135 /**
136 * Get the hosts managed on the website.
137 *
138 * @since 1.5
139 *
140 * @return string[] The list of hosts.
141 */
142 public function get_hosts() {
143 return array( wp_parse_url( $this->home, PHP_URL_HOST ) );
144 }
145
146 /**
147 * Returns the home url in a given language.
148 *
149 * @since 1.3.1
150 *
151 * @param PLL_Language $lang The language object.
152 * @return string
153 */
154 public function home_url( $lang ) {
155 $url = trailingslashit( $this->home );
156 return $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ? $url : $this->add_language_to_link( $url, $lang );
157 }
158
159 /**
160 * Sets the home urls in PLL_Language.
161 *
162 * @since 1.8
163 *
164 * @param PLL_Language $language The language object.
165 * @return void
166 */
167 protected function set_home_url( $language ) {
168 $search_url = $this->home_url( $language );
169 $home_url = empty( $language->page_on_front ) || $this->options['redirect_lang'] ? $search_url : $this->front_page_url( $language );
170 $language->set_home_url( $search_url, $home_url );
171 }
172
173 /**
174 * Sets the home urls and flags before the languages are persistently cached.
175 *
176 * @since 1.8
177 *
178 * @param PLL_Language[] $languages Array of PLL_Language objects.
179 * @return PLL_Language[] Array of PLL_Language objects with home url and flag.
180 */
181 public function pll_languages_list( $languages ) {
182 foreach ( $languages as $language ) {
183 $this->set_home_url( $language );
184 $language->set_flag();
185 }
186 return $languages;
187 }
188
189 /**
190 * Sets the home urls when not cached.
191 * Sets the home urls scheme.
192 *
193 * @since 1.8
194 *
195 * @param PLL_Language[] $languages Array of PLL_Language objects.
196 * @return PLL_Language[] Array of PLL_Language objects.
197 */
198 public function pll_after_languages_cache( $languages ) {
199 foreach ( $languages as $language ) {
200 // Get the home urls when not cached.
201 if ( ( defined( 'PLL_CACHE_LANGUAGES' ) && ! PLL_CACHE_LANGUAGES ) || ( defined( 'PLL_CACHE_HOME_URL' ) && ! PLL_CACHE_HOME_URL ) ) {
202 $this->set_home_url( $language );
203 }
204
205 // Ensures that the (possibly cached) home and flag urls use the right scheme http or https.
206 $language->set_url_scheme();
207 }
208 return $languages;
209 }
210
211 /**
212 * Adds our domains or subdomains to allowed hosts for safe redirect.
213 *
214 * @since 1.4.3
215 *
216 * @param string[] $hosts Allowed hosts.
217 * @return string[] Modified list of allowed hosts.
218 */
219 public function allowed_redirect_hosts( $hosts ) {
220 return array_unique( array_merge( $hosts, array_values( $this->get_hosts() ) ) );
221 }
222 }
223