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
← All changes | include/rest-request.php +84 -26 2.83.3 View file →
@@ -3,50 +3,108 @@
3 3 * @package Polylang
4 4 */
5 5
6 6 /**
7 - * REST API controller
8 - * accessible as $polylang global object
7 + * Main Polylang class for REST API requrests, accessible from @see PLL().
9 8 *
10 - * Properties:
11 - * options => inherited, reference to Polylang options array
12 - * model => inherited, reference to PLL_Model object
13 - * links_model => inherited, reference to PLL_Links_Model object
14 - * links => reference to PLL_Admin_Links object
15 - * static_pages => reference to PLL_Static_Pages object
16 - * filters => reference to PLL_Frontend_Filters object
17 - * filters_links => reference to PLL_Filters_Links object
18 - * posts => reference to PLL_CRUD_Posts object
19 - * terms => reference to PLL_CRUD_Terms object
20 - *
21 9 * @since 2.6
22 10 */
23 11 class PLL_REST_Request extends PLL_Base {
24 - public $links, $static_pages, $posts, $terms, $filters, $filters_links;
12 + /**
13 + * @var PLL_Language|false|null A `PLL_Language` when defined, `false` otherwise. `null` until the language
14 + * definition process runs.
15 + */
16 + public $curlang;
25 17
26 18 /**
27 - * Setup filters
19 + * @var PLL_Filters|null
20 + */
21 + public $filters;
22 +
23 + /**
24 + * @var PLL_Filters_Links|null
25 + */
26 + public $filters_links;
27 +
28 + /**
29 + * @var PLL_Admin_Links|null
30 + */
31 + public $links;
32 +
33 + /**
34 + * @var PLL_Nav_Menu|null
35 + */
36 + public $nav_menu;
37 +
38 + /**
39 + * @var PLL_Static_Pages|null
40 + */
41 + public $static_pages;
42 +
43 + /**
44 + * @var PLL_Filters_Widgets_Options|null
45 + */
46 + public $filters_widgets_options;
47 +
48 + /**
49 + * Setup filters.
28 50 *
29 51 * @since 2.6
52 + *
53 + * @return void
30 54 */
31 55 public function init() {
32 56 parent::init();
33 57
34 - if ( $this->model->get_languages_list() ) {
58 + if ( ! $this->model->get_languages_list() ) {
59 + return;
60 + }
35 61
36 - /** This action is documented in include/class-polylang.php */
37 - do_action( 'pll_no_language_defined' ); // To load overridden textdomains.
62 + add_filter( 'rest_pre_dispatch', array( $this, 'set_language' ), 10, 3 );
38 63
39 - $this->filters_links = new PLL_Filters_Links( $this );
40 - $this->filters = new PLL_Filters( $this );
64 + $this->filters_links = new PLL_Filters_Links( $this );
65 + $this->filters = new PLL_Filters( $this );
66 + $this->filters_widgets_options = new PLL_Filters_Widgets_Options( $this );
41 67
42 - // Static front page and page for posts
43 - if ( 'page' === get_option( 'show_on_front' ) ) {
44 - $this->static_pages = new PLL_Static_Pages( $this );
68 + // Static front page and page for posts.
69 + if ( 'page' === get_option( 'show_on_front' ) ) {
70 + $this->static_pages = new PLL_Static_Pages( $this );
71 + }
72 +
73 + $this->links = new PLL_Admin_Links( $this );
74 + $this->nav_menu = new PLL_Frontend_Nav_Menu( $this ); // For auto added pages to menu.
75 + }
76 +
77 + /**
78 + * Sets the current language during a REST request if sent.
79 + *
80 + * @since 3.3
81 + *
82 + * @param mixed $result Response to replace the requested version with. Remains untouched.
83 + * @param WP_REST_Server $server Server instance.
84 + * @param WP_REST_Request $request Request used to generate the response.
85 + *
86 + * @return mixed Untouched $result.
87 + */
88 + public function set_language( $result, $server, $request ) {
89 + $lang = $request->get_param( 'lang' );
90 +
91 + if ( ! empty( $lang ) && is_string( $lang ) ) {
92 + $this->curlang = $this->model->get_language( sanitize_key( $lang ) );
93 +
94 + if ( empty( $this->curlang ) && ! empty( $this->options['default_lang'] ) && is_string( $this->options['default_lang'] ) ) {
95 + // A lang has been requested but it is invalid, let's fall back to the default one.
96 + $this->curlang = $this->model->get_language( sanitize_key( $this->options['default_lang'] ) );
45 97 }
98 + }
46 99
47 - $this->links = new PLL_Admin_Links( $this );
100 + if ( ! empty( $this->curlang ) ) {
101 + /** This action is documented in frontend/choose-lang.php */
102 + do_action( 'pll_language_defined', $this->curlang->slug, $this->curlang );
103 + } else {
104 + /** This action is documented in include/class-polylang.php */
105 + do_action( 'pll_no_language_defined' ); // To load overridden textdomains.
106 + }
48 107
49 - $this->nav_menu = new PLL_Nav_Menu( $this ); // For auto added pages to menu
50 - }
108 + return $result;
51 109 }
52 110 }