PluginProbe
Polylang / 3.1.4
Polylang v3.1.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
← All changes | frontend/frontend.php +80 -67 2.73.1.4 View file →
@@ -1,39 +1,75 @@
1 1 <?php
2 +/**
3 + * @package Polylang
4 + */
2 5
3 6 /**
4 - * Frontend controller
5 - * accessible as $polylang global object
7 + * Main Polylang class when on frontend, accessible from @see PLL().
6 8 *
7 - * Properties:
8 - * options => inherited, reference to Polylang options array
9 - * model => inherited, reference to PLL_Model object
10 - * links_model => inherited, reference to PLL_Links_Model object
11 - * links => reference to PLL_Links object
12 - * static_pages => reference to PLL_Frontend_Static_Pages object
13 - * choose_lang => reference to PLL_Choose_Lang object
14 - * curlang => current language
15 - * filters => reference to PLL_Frontend_Filters object
16 - * filters_links => reference to PLL_Frontend_Filters_Links object
17 - * filters_search => reference to PLL_Frontend_Filters_Search object
18 - * posts => reference to PLL_CRUD_Posts object
19 - * terms => reference to PLL_CRUD_Terms object
20 - * nav_menu => reference to PLL_Frontend_Nav_Menu object
21 - * sync => reference to PLL_Sync object
22 - * auto_translate => optional, reference to PLL_Auto_Translate object
23 - *
24 9 * @since 1.2
25 10 */
26 11 class PLL_Frontend extends PLL_Base {
12 + /**
13 + * Current language.
14 + *
15 + * @var PLL_Language
16 + */
27 17 public $curlang;
28 - public $links, $choose_lang, $filters, $filters_search, $nav_menu, $auto_translate;
29 18
30 19 /**
31 - * Constructor
20 + * @var PLL_Frontend_Auto_Translate
21 + */
22 + public $auto_translate;
23 +
24 + /**
25 + * The class selecting the current language.
32 26 *
27 + * @var PLL_Choose_Lang
28 + */
29 + public $choose_lang;
30 +
31 + /**
32 + * @var PLL_Frontend_Filters
33 + */
34 + public $filters;
35 +
36 + /**
37 + * @var PLL_Frontend_Filters_Links
38 + */
39 + public $filters_links;
40 +
41 + /**
42 + * @var PLL_Frontend_Filters_Search
43 + */
44 + public $filters_search;
45 +
46 + /**
47 + * @var PLL_Frontend_Links
48 + */
49 + public $links;
50 +
51 + /**
52 + * @var PLL_Frontend_Nav_Menu
53 + */
54 + public $nav_menu;
55 +
56 + /**
57 + * @var PLL_Frontend_Static_Pages
58 + */
59 + public $static_pages;
60 +
61 + /**
62 + * @var PLL_Frontend_Filters_Widgets
63 + */
64 + public $filters_widgets;
65 +
66 + /**
67 + * Constructor.
68 + *
33 69 * @since 1.2
34 70 *
35 - * @param object $links_model
71 + * @param PLL_Links_Model $links_model Reference to the links model.
36 72 */
37 73 public function __construct( &$links_model ) {
38 74 parent::__construct( $links_model );
39 75
@@ -73,37 +109,8 @@
73 109 $this->choose_lang->init();
74 110
75 111 // Need to load nav menu class early to correctly define the locations in the customizer when the language is set from the content
76 112 $this->nav_menu = new PLL_Frontend_Nav_Menu( $this );
77 -
78 - // Cross domain
79 - if ( PLL_COOKIE ) {
80 - $class = array( 2 => 'PLL_Xdata_Subdomain', 3 => 'PLL_Xdata_Domain' );
81 - if ( isset( $class[ $this->options['force_lang'] ] ) && class_exists( $class[ $this->options['force_lang'] ] ) ) {
82 - $this->xdata = new $class[ $this->options['force_lang'] ]( $this );
83 - }
84 - }
85 -
86 - if ( get_option( 'permalink_structure' ) ) {
87 - // Translate slugs
88 - if ( class_exists( 'PLL_Frontend_Translate_Slugs' ) ) {
89 - $slugs_model = new PLL_Translate_Slugs_Model( $this );
90 - $this->translate_slugs = new PLL_Frontend_Translate_Slugs( $slugs_model, $this->curlang );
91 - }
92 -
93 - // Share term slugs
94 - if ( $this->options['force_lang'] && class_exists( 'PLL_Share_Term_Slug' ) ) {
95 - $this->share_term_slug = new PLL_Share_Term_Slug( $this );
96 - }
97 - }
98 -
99 - if ( class_exists( 'PLL_Sync_Post_Model' ) ) {
100 - $this->sync_post_model = new PLL_Sync_Post_Model( $this );
101 - }
102 -
103 - if ( class_exists( 'PLL_Sync_Post' ) ) {
104 - $this->sync_post = new PLL_Sync_Post( $this );
105 - }
106 113 }
107 114
108 115 /**
109 116 * Setups filters and nav menus once the language has been defined
@@ -108,8 +115,10 @@
108 115 /**
109 116 * Setups filters and nav menus once the language has been defined
110 117 *
111 118 * @since 1.2
119 + *
120 + * @return void
112 121 */
113 122 public function pll_language_defined() {
114 123 // Filters
115 124 $this->filters_links = new PLL_Frontend_Filters_Links( $this );
@@ -114,13 +123,10 @@
114 123 // Filters
115 124 $this->filters_links = new PLL_Frontend_Filters_Links( $this );
116 125 $this->filters = new PLL_Frontend_Filters( $this );
117 126 $this->filters_search = new PLL_Frontend_Filters_Search( $this );
118 - $this->posts = new PLL_CRUD_Posts( $this );
119 - $this->terms = new PLL_CRUD_Terms( $this );
127 + $this->filters_widgets = new PLL_Frontend_Filters_Widgets( $this );
120 128
121 - $this->sync = new PLL_Sync( $this );
122 -
123 129 // Auto translate for Ajax
124 130 if ( ( ! defined( 'PLL_AUTO_TRANSLATE' ) || PLL_AUTO_TRANSLATE ) && wp_doing_ajax() ) {
125 131 $this->auto_translate();
126 132 }
@@ -126,13 +132,14 @@
126 132 }
127 133 }
128 134
129 135 /**
130 - * When querying multiple taxonomies, makes sure that the language is not the queried object
136 + * When querying multiple taxonomies, makes sure that the language is not the queried object.
131 137 *
132 138 * @since 1.8
133 139 *
134 - * @param object $query WP_Query object
140 + * @param WP_Query $query WP_Query object.
141 + * @return void
135 142 */
136 143 public function parse_tax_query( $query ) {
137 144 $pll_query = new PLL_Query( $query, $this->model );
138 145 $queried_taxonomies = $pll_query->get_queried_taxonomies();
@@ -142,13 +149,14 @@
142 149 }
143 150 }
144 151
145 152 /**
146 - * Modifies some query vars to "hide" that the language is a taxonomy and avoid conflicts
153 + * Modifies some query vars to "hide" that the language is a taxonomy and avoid conflicts.
147 154 *
148 155 * @since 1.2
149 156 *
150 - * @param object $query WP_Query object
157 + * @param WP_Query $query WP_Query object.
158 + * @return void
151 159 */
152 160 public function parse_query( $query ) {
153 161 $qv = $query->query_vars;
154 162 $pll_query = new PLL_Query( $query, $this->model );
@@ -187,8 +195,10 @@
187 195 /**
188 196 * Auto translate posts and terms ids
189 197 *
190 198 * @since 1.2
199 + *
200 + * @return void
191 201 */
192 202 public function auto_translate() {
193 203 $this->auto_translate = new PLL_Frontend_Auto_Translate( $this );
194 204 }
@@ -193,22 +203,25 @@
193 203 $this->auto_translate = new PLL_Frontend_Auto_Translate( $this );
194 204 }
195 205
196 206 /**
197 - * Resets some variables when switching blog
198 - * Overrides parent method
207 + * Resets some variables when the blog is switched.
208 + * Overrides the parent method.
199 209 *
200 210 * @since 1.5.1
201 211 *
202 - * @param int $new_blog
203 - * @param int $old_blog
212 + * @param int $new_blog_id New blog ID.
213 + * @param int $prev_blog_id Previous blog ID.
214 + * @return void
204 215 */
205 - public function switch_blog( $new_blog, $old_blog ) {
206 - // Need to check that some languages are defined when user is logged in, has several blogs, some without any languages
207 - if ( parent::switch_blog( $new_blog, $old_blog ) && did_action( 'pll_language_defined' ) && $this->model->get_languages_list() ) {
216 + public function switch_blog( $new_blog_id, $prev_blog_id ) {
217 + parent::switch_blog( $new_blog_id, $prev_blog_id );
218 +
219 + // Need to check that some languages are defined when user is logged in, has several blogs, some without any languages.
220 + if ( $this->is_active_on_new_blog( $new_blog_id, $prev_blog_id ) && did_action( 'pll_language_defined' ) && $this->model->get_languages_list() ) {
208 221 static $restore_curlang;
209 222 if ( empty( $restore_curlang ) ) {
210 - $restore_curlang = $this->curlang->slug; // To always remember the current language through blogs
223 + $restore_curlang = $this->curlang->slug; // To always remember the current language through blogs.
211 224 }
212 225
213 226 $lang = $this->model->get_language( $restore_curlang );
214 227 $this->curlang = $lang ? $lang : $this->model->get_language( $this->options['default_lang'] );