PluginProbe
Polylang / 1.1
Polylang v1.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/api.php +62 -386 2.81.1 View file →
@@ -1,421 +1,97 @@
1 1 <?php
2 -/**
3 - * @package Polylang
4 - */
5 2
6 -/**
7 - * Template tag: displays the language switcher
8 - *
9 - * List of parameters accepted in $args:
10 - *
11 - * dropdown => displays a dropdown if set to 1, defaults to 0
12 - * echo => echoes the switcher if set to 1 ( default )
13 - * hide_if_empty => hides languages with no posts ( or pages ) if set to 1 ( default )
14 - * show_flags => shows flags if set to 1, defaults to 0
15 - * show_names => shows languages names if set to 1 ( default )
16 - * display_names_as => whether to display the language name or its slug, valid options are 'slug' and 'name', defaults to name
17 - * force_home => forces linking to the home page is set to 1, defaults to 0
18 - * hide_if_no_translation => hides the link if there is no translation if set to 1, defaults to 0
19 - * hide_current => hides the current language if set to 1, defaults to 0
20 - * post_id => if not null, link to translations of post defined by post_id, defaults to null
21 - * raw => set this to true to build your own custom language switcher, defaults to 0
22 - * item_spacing => whether to preserve or discard whitespace between list items, valid options are 'preserve' and 'discard', defaults to preserve
23 - *
24 - * @api
25 - * @since 0.5
26 - *
27 - * @param array $args optional
28 - * @return null|string|array null if displaying, array if raw is requested, string otherwise
3 +/*
4 + * template tag: displays the language switcher
29 5 */
30 -function pll_the_languages( $args = '' ) {
31 - if ( PLL() instanceof PLL_Frontend ) {
32 - $switcher = new PLL_Switcher();
33 - return $switcher->the_languages( PLL()->links, $args );
34 - }
35 - return '';
6 +function pll_the_languages($args = '') {
7 + global $polylang;
8 + return class_exists('Polylang_Core') && $polylang instanceof Polylang_Core ? $polylang->the_languages($args) : '';
36 9 }
37 10
38 -/**
39 - * Returns the current language on frontend
40 - * Returns the language set in admin language filter on backend ( false if set to all languages )
41 - *
42 - * @api
43 - * @since 0.8.1
44 - *
45 - * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug', pass OBJECT constant to get the language object.
46 - * @return string|PLL_Language|bool The requested field for the current language
11 +/*
12 + * returns the current language
47 13 */
48 -function pll_current_language( $field = 'slug' ) {
49 - if ( OBJECT === $field ) {
50 - return PLL()->curlang;
51 - }
52 - return isset( PLL()->curlang->$field ) ? PLL()->curlang->$field : false;
14 +function pll_current_language($args = 'slug') {
15 + global $polylang;
16 + return !(class_exists('Polylang_Core') && $polylang instanceof Polylang_Core && isset($polylang->curlang)) ? false :
17 + ($args == 'name' ? $polylang->curlang->name :
18 + ($args == 'locale' ? $polylang->curlang->description :
19 + $polylang->curlang->slug));
53 20 }
54 21
55 -/**
56 - * Returns the default language
57 - *
58 - * @api
59 - * @since 1.0
60 - *
61 - * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug', pass OBJECT constant to get the language object.
62 - * @return string|PLL_Language|bool The requested field for the default language
22 +/*
23 + * returns the default language
63 24 */
64 -function pll_default_language( $field = 'slug' ) {
65 - if ( isset( PLL()->options['default_lang'] ) ) {
66 - $lang = PLL()->model->get_language( PLL()->options['default_lang'] );
67 - if ( $lang ) {
68 - if ( OBJECT === $field ) {
69 - return $lang;
70 - }
71 - return isset( $lang->$field ) ? $lang->$field : false;
72 - }
73 - }
74 - return false;
25 +function pll_default_language($args = 'slug') {
26 + global $polylang;
27 + return !(isset($polylang) && ($options = get_option('polylang')) && isset($options['default_lang']) && $lang = $polylang->get_language($options['default_lang'])) ? false :
28 + ($args == 'name' ? $lang->name :
29 + ($args == 'locale' ? $lang->description :
30 + $lang->slug));
75 31 }
76 32
77 -/**
78 - * Among the post and its translations, returns the id of the post which is in the language represented by $slug
79 - *
80 - * @api
81 - * @since 0.5
82 - *
83 - * @param int $post_id post id
84 - * @param string $slug optional language code, defaults to current language
85 - * @return int|false|null post id of the translation if exists, false otherwise, null if the current language is not defined yet
33 +/*
34 + * among the post and its translations, returns the id of the post which is in the language represented by $slug
86 35 */
87 -function pll_get_post( $post_id, $slug = '' ) {
88 - return ( $slug = $slug ? $slug : pll_current_language() ) ? PLL()->model->post->get( $post_id, $slug ) : null;
36 +function pll_get_post($post_id, $slug = false) {
37 + global $polylang;
38 + return isset($polylang) && ($slug = $slug ? $slug : pll_current_language()) ? $polylang->get_post($post_id, $slug) : null;
89 39 }
90 40
91 -/**
92 - * Among the term and its translations, returns the id of the term which is in the language represented by $slug
93 - *
94 - * @api
95 - * @since 0.5
96 - *
97 - * @param int $term_id term id
98 - * @param string $slug optional language code, defaults to current language
99 - * @return int|false|null term id of the translation if exists, false otherwise, null if the current language is not defined yet
41 +/*
42 + * among the term and its translations, returns the id of the term which is in the language represented by $slug
100 43 */
101 -function pll_get_term( $term_id, $slug = '' ) {
102 - return ( $slug = $slug ? $slug : pll_current_language() ) ? PLL()->model->term->get( $term_id, $slug ) : null;
44 +function pll_get_term($term_id, $slug = false) {
45 + global $polylang;
46 + return isset($polylang) && ($slug = $slug ? $slug : pll_current_language()) ? $polylang->get_term($term_id, $slug) : null;
103 47 }
104 48
105 -/**
106 - * Returns the home url in the current language
107 - *
108 - * @api
109 - * @since 0.8
110 - *
111 - * @param string $lang language code ( optional on frontend )
112 - * @return string
49 +/*
50 + * returns the home url in the current language
113 51 */
114 -function pll_home_url( $lang = '' ) {
115 - if ( empty( $lang ) ) {
116 - $lang = pll_current_language();
117 - }
118 -
119 - return empty( $lang ) ? home_url( '/' ) : PLL()->links->get_home_url( $lang );
52 +function pll_home_url() {
53 + global $polylang;
54 + return class_exists('Polylang_Core') && $polylang instanceof Polylang_Core ? $polylang->get_home_url() : home_url('/');
120 55 }
121 56
122 -/**
123 - * Registers a string for translation in the "strings translation" panel
124 - *
125 - * @api
126 - * @since 0.6
127 - *
128 - * @param string $name a unique name for the string
129 - * @param string $string the string to register
130 - * @param string $context optional the group in which the string is registered, defaults to 'polylang'
131 - * @param bool $multiline optional whether the string table should display a multiline textarea or a single line input, defaults to single line
57 +/*
58 + * registers a string for translation in the "strings translation" panel
132 59 */
133 -function pll_register_string( $name, $string, $context = 'polylang', $multiline = false ) {
134 - if ( PLL() instanceof PLL_Admin_Base ) {
135 - PLL_Admin_Strings::register_string( $name, $string, $context, $multiline );
136 - }
60 +function pll_register_string($name, $string, $multiline = false) {
61 + global $polylang;
62 + if (class_exists('Polylang_Admin_Base') && $polylang instanceof Polylang_Admin_Base)
63 + $polylang->register_string($name, $string, $multiline);
137 64 }
138 65
139 -/**
140 - * Translates a string ( previously registered with pll_register_string )
141 - *
142 - * @api
143 - * @since 0.6
144 - *
145 - * @param string $string the string to translate
146 - * @return string the string translation in the current language
66 +/*
67 + * translates a string (previously registered with pll_register_string)
147 68 */
148 -function pll__( $string ) {
149 - return is_scalar( $string ) ? __( $string, 'pll_string' ) : $string; // PHPCS:ignore WordPress.WP.I18n
69 +function pll__($string) {
70 + return __($string, 'pll_string');
150 71 }
151 72
152 -/**
153 - * Translates a string ( previously registered with pll_register_string ) and escapes it for safe use in HTML output.
154 - *
155 - * @api
156 - * @since 2.1
157 - *
158 - * @param string $string the string to translate
159 - * @return string translation in the current language
73 +/*
74 + * echoes a translated string (previously registered with pll_register_string)
160 75 */
161 -function pll_esc_html__( $string ) {
162 - return esc_html( pll__( $string ) );
76 +function pll_e($string) {
77 + _e($string, 'pll_string');
163 78 }
164 79
165 -/**
166 - * Translates a string ( previously registered with pll_register_string ) and escapes it for safe use in HTML attributes.
167 - *
168 - * @api
169 - * @since 2.1
170 - *
171 - * @param string $string The string to translate
172 - * @return string
80 +/*
81 + * returns true if Polylang manages languages and translation for this post type
82 + * won't work before the action 'wp_loaded' has been fired
173 83 */
174 -function pll_esc_attr__( $string ) {
175 - return esc_attr( pll__( $string ) );
84 +function pll_is_translated_post_type($post_type) {
85 + global $polylang;
86 + return isset($polylang) && is_array($polylang->post_types) && in_array($post_type, $polylang->post_types);
176 87 }
177 88
178 -/**
179 - * Echoes a translated string ( previously registered with pll_register_string )
180 - * It is an equivalent of _e() and is not escaped.
181 - *
182 - * @api
183 - * @since 0.6
184 - *
185 - * @param string $string The string to translate
89 +/*
90 + * returns true if Polylang manages languages and translation for this taxonomy
91 + * won't work before the action 'wp_loaded' has been fired
186 92 */
187 -function pll_e( $string ) {
188 - echo pll__( $string ); // phpcs:ignore
93 +function pll_is_translated_taxonomy($tax) {
94 + global $polylang;
95 + return isset($polylang) && is_array($polylang->taxonomies) && in_array($tax, $polylang->taxonomies);
189 96 }
190 97
191 -/**
192 - * Echoes a translated string ( previously registered with pll_register_string ) and escapes it for safe use in HTML output.
193 - *
194 - * @api
195 - * @since 2.1
196 - *
197 - * @param string $string The string to translate
198 - */
199 -function pll_esc_html_e( $string ) {
200 - echo pll_esc_html__( $string ); // phpcs:ignore WordPress.Security.EscapeOutput
201 -}
202 -
203 -/**
204 - * Echoes a translated a string ( previously registered with pll_register_string ) and escapes it for safe use in HTML attributes.
205 - *
206 - * @api
207 - * @since 2.1
208 - *
209 - * @param string $string The string to translate
210 - */
211 -function pll_esc_attr_e( $string ) {
212 - echo pll_esc_attr__( $string ); // phpcs:ignore WordPress.Security.EscapeOutput
213 -}
214 -
215 -/**
216 - * Translates a string ( previously registered with pll_register_string )
217 - *
218 - * @api
219 - * @since 1.5.4
220 - *
221 - * @param string $string the string to translate
222 - * @param string $lang language code
223 - * @return string the string translation in the requested language
224 - */
225 -function pll_translate_string( $string, $lang ) {
226 - if ( PLL() instanceof PLL_Frontend && pll_current_language() == $lang ) {
227 - return pll__( $string );
228 - }
229 -
230 - if ( ! is_scalar( $string ) ) {
231 - return $string;
232 - }
233 -
234 - static $cache; // Cache object to avoid loading the same translations object several times
235 -
236 - if ( empty( $cache ) ) {
237 - $cache = new PLL_Cache();
238 - }
239 -
240 - if ( false === $mo = $cache->get( $lang ) ) {
241 - $mo = new PLL_MO();
242 - $mo->import_from_db( PLL()->model->get_language( $lang ) );
243 - $cache->set( $lang, $mo );
244 - }
245 -
246 - return $mo->translate( $string );
247 -}
248 -
249 -/**
250 - * Returns true if Polylang manages languages and translations for this post type
251 - *
252 - * @api
253 - * @since 1.0.1
254 - *
255 - * @param string $post_type Post type name
256 - * @return bool
257 - */
258 -function pll_is_translated_post_type( $post_type ) {
259 - return PLL()->model->is_translated_post_type( $post_type );
260 -}
261 -
262 -/**
263 - * Returns true if Polylang manages languages and translations for this taxonomy
264 - *
265 - * @api
266 - * @since 1.0.1
267 - *
268 - * @param string $tax Taxonomy name
269 - * @return bool
270 - */
271 -function pll_is_translated_taxonomy( $tax ) {
272 - return PLL()->model->is_translated_taxonomy( $tax );
273 -}
274 -
275 -/**
276 - * Returns the list of available languages
277 - *
278 - * List of parameters accepted in $args:
279 - *
280 - * hide_empty => hides languages with no posts if set to true ( defaults to false )
281 - * fields => return only that field if set ( see PLL_Language for a list of fields )
282 - *
283 - * @api
284 - * @since 1.5
285 - *
286 - * @param array $args list of parameters
287 - * @return array
288 - */
289 -function pll_languages_list( $args = array() ) {
290 - $args = wp_parse_args( $args, array( 'fields' => 'slug' ) );
291 - return PLL()->model->get_languages_list( $args );
292 -}
293 -
294 -/**
295 - * Set the post language
296 - *
297 - * @api
298 - * @since 1.5
299 - *
300 - * @param int $id post id
301 - * @param string $lang language code
302 - */
303 -function pll_set_post_language( $id, $lang ) {
304 - PLL()->model->post->set_language( $id, $lang );
305 -}
306 -
307 -/**
308 - * Set the term language
309 - *
310 - * @api
311 - * @since 1.5
312 - *
313 - * @param int $id term id
314 - * @param string $lang language code
315 - */
316 -function pll_set_term_language( $id, $lang ) {
317 - PLL()->model->term->set_language( $id, $lang );
318 -}
319 -
320 -/**
321 - * Save posts translations
322 - *
323 - * @api
324 - * @since 1.5
325 - *
326 - * @param array $arr an associative array of translations with language code as key and post id as value
327 - */
328 -function pll_save_post_translations( $arr ) {
329 - PLL()->model->post->save_translations( reset( $arr ), $arr );
330 -}
331 -
332 -/**
333 - * Save terms translations
334 - *
335 - * @api
336 - * @since 1.5
337 - *
338 - * @param array $arr an associative array of translations with language code as key and term id as value
339 - */
340 -function pll_save_term_translations( $arr ) {
341 - PLL()->model->term->save_translations( reset( $arr ), $arr );
342 -}
343 -
344 -/**
345 - * Returns the post language
346 - *
347 - * @api
348 - * @since 1.5.4
349 - *
350 - * @param int $post_id
351 - * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug'
352 - * @return bool|string The requested field for the post language, false if no language is associated to that post
353 - */
354 -function pll_get_post_language( $post_id, $field = 'slug' ) {
355 - return ( $lang = PLL()->model->post->get_language( $post_id ) ) ? $lang->$field : false;
356 -}
357 -
358 -/**
359 - * Returns the term language
360 - *
361 - * @api
362 - * @since 1.5.4
363 - *
364 - * @param int $term_id
365 - * @param string $field Optional, the language field to return ( see PLL_Language ), defaults to 'slug'
366 - * @return bool|string The requested field for the term language, false if no language is associated to that term
367 - */
368 -function pll_get_term_language( $term_id, $field = 'slug' ) {
369 - return ( $lang = PLL()->model->term->get_language( $term_id ) ) ? $lang->$field : false;
370 -}
371 -
372 -/**
373 - * Returns an array of translations of a post
374 - *
375 - * @api
376 - * @since 1.8
377 - *
378 - * @param int $post_id
379 - * @return array an associative array of translations with language code as key and translation post_id as value
380 - */
381 -function pll_get_post_translations( $post_id ) {
382 - return PLL()->model->post->get_translations( $post_id );
383 -}
384 -
385 -/**
386 - * Returns an array of translations of a term
387 - *
388 - * @api
389 - * @since 1.8
390 - *
391 - * @param int $term_id
392 - * @return array an associative array of translations with language code as key and translation term_id as value
393 - */
394 -function pll_get_term_translations( $term_id ) {
395 - return PLL()->model->term->get_translations( $term_id );
396 -}
397 -
398 -/**
399 - * Count posts in a language
400 - *
401 - * @api
402 - * @since 1.5
403 - *
404 - * @param string $lang Language code.
405 - * @param array $args WP_Query arguments ( accepted keys: post_type, m, year, monthnum, day, author, author_name, post_format, post_status ).
406 - * @return int Posts count.
407 - */
408 -function pll_count_posts( $lang, $args = array() ) {
409 - return PLL()->model->count_posts( PLL()->model->get_language( $lang ), $args );
410 -}
411 -
412 -/**
413 - * Allows to access the Polylang instance
414 - * It is always preferable to use API functions
415 - * Internal methods may be changed without prior notice
416 - *
417 - * @since 1.8
418 - */
419 -function PLL() { // PHPCS:ignore WordPress.NamingConventions.ValidFunctionName
420 - return $GLOBALS['polylang'];
421 -}