PluginProbe
Polylang / 2.5.4
Polylang v2.5.4
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 2.5.4, at include/links-model.php

134 lines 3.3 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 <?php
2
3 /**
4 * Links model abstract class
5 *
6 * @since 1.5
7 */
8 abstract class PLL_Links_Model {
9 public $model, $options;
10 public $home; // used to store the home url before it is filtered
11 public $using_permalinks;
12
13 /**
14 * Constructor
15 *
16 * @since 1.5
17 *
18 * @param object $model PLL_Model instance
19 */
20 public function __construct( &$model ) {
21 $this->model = &$model;
22 $this->options = &$model->options;
23
24 $this->home = home_url();
25
26 add_filter( 'pll_languages_list', array( $this, 'pll_languages_list' ), 4 ); // after PLL_Static_Pages
27 add_filter( 'pll_after_languages_cache', array( $this, 'pll_after_languages_cache' ) );
28
29 // adds our domains or subdomains to allowed hosts for safe redirection
30 add_filter( 'allowed_redirect_hosts', array( $this, 'allowed_redirect_hosts' ) );
31 }
32
33 /**
34 * Changes the language code in url
35 *
36 * @since 1.5
37 *
38 * @param string $url url to modify
39 * @param object $lang language
40 * @return string modified url
41 */
42 public function switch_language_in_link( $url, $lang ) {
43 $url = $this->remove_language_from_link( $url );
44 return $this->add_language_to_link( $url, $lang );
45 }
46
47 /**
48 * Get hosts managed on the website
49 *
50 * @since 1.5
51 *
52 * @return array list of hosts
53 */
54 public function get_hosts() {
55 return array( parse_url( $this->home, PHP_URL_HOST ) );
56 }
57
58 /**
59 * Returns the home url
60 *
61 * @since 1.3.1
62 *
63 * @param object $lang PLL_Language object
64 * @return string
65 */
66 public function home_url( $lang ) {
67 $url = trailingslashit( $this->home );
68 return $this->options['hide_default'] && $lang->slug == $this->options['default_lang'] ? $url : $this->add_language_to_link( $url, $lang );
69 }
70
71 /**
72 * Sets the home urls
73 *
74 * @since 1.8
75 *
76 * @param object $language
77 */
78 protected function set_home_url( $language ) {
79 $search_url = $this->home_url( $language );
80 $home_url = empty( $language->page_on_front ) || $this->options['redirect_lang'] ? $search_url : $this->front_page_url( $language );
81 $language->set_home_url( $search_url, $home_url );
82 }
83
84 /**
85 * Sets the home urls and flags before the languages are persistently cached
86 *
87 * @since 1.8
88 *
89 * @param array $languages array of PLL_Language objects
90 * @return array
91 */
92 public function pll_languages_list( $languages ) {
93 foreach ( $languages as $language ) {
94 $this->set_home_url( $language );
95 $language->set_flag();
96 }
97 return $languages;
98 }
99
100 /**
101 * Sets the home urls when not cached
102 * Sets the home urls scheme
103 *
104 * @since 1.8
105 *
106 * @param array $languages array of PLL_Language objects
107 * @return array
108 */
109 public function pll_after_languages_cache( $languages ) {
110 foreach ( $languages as $language ) {
111 // Get the home urls when not cached
112 if ( ( defined( 'PLL_CACHE_LANGUAGES' ) && ! PLL_CACHE_LANGUAGES ) || ( defined( 'PLL_CACHE_HOME_URL' ) && ! PLL_CACHE_HOME_URL ) ) {
113 $this->set_home_url( $language );
114 }
115
116 // Ensures that the ( possibly cached ) home url uses the right scheme http or https
117 $language->set_home_url_scheme();
118 }
119 return $languages;
120 }
121
122 /**
123 * Adds our domains or subdomains to allowed hosts for safe redirection
124 *
125 * @since 1.4.3
126 *
127 * @param array $hosts allowed hosts
128 * @return array
129 */
130 public function allowed_redirect_hosts( $hosts ) {
131 return array_unique( array_merge( $hosts, array_values( $this->get_hosts() ) ) );
132 }
133 }
134