PluginProbe
Polylang / 3.0.2
Polylang v3.0.2
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 / api.php

api.php in Polylang 3.0.2, at include/api.php

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