PluginProbe
Polylang / 3.7.2
Polylang v3.7.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 / rest-request.php

rest-request.php in Polylang 3.7.2, at include/rest-request.php

134 lines 3.2 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 * Main Polylang class for REST API requests, accessible from @see PLL().
8 *
9 * @since 2.6
10 */
11 class PLL_REST_Request extends PLL_Base {
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;
17
18 /**
19 * @var PLL_Default_Term|null
20 */
21 public $default_term;
22
23 /**
24 * @var PLL_Filters|null
25 */
26 public $filters;
27
28 /**
29 * @var PLL_Filters_Links|null
30 */
31 public $filters_links;
32
33 /**
34 * @var PLL_Admin_Links|null
35 */
36 public $links;
37
38 /**
39 * @var PLL_Nav_Menu|null
40 */
41 public $nav_menu;
42
43 /**
44 * @var PLL_Static_Pages|null
45 */
46 public $static_pages;
47
48 /**
49 * @var PLL_Filters_Widgets_Options|null
50 */
51 public $filters_widgets_options;
52
53 /**
54 * Constructor.
55 *
56 * @since 3.4
57 *
58 * @param PLL_Links_Model $links_model Reference to the links model.
59 */
60 public function __construct( &$links_model ) {
61 parent::__construct( $links_model );
62
63 // Static front page and page for posts.
64 // Early instantiated to be able to correctly initialize language properties.
65 if ( 'page' === get_option( 'show_on_front' ) ) {
66 $this->static_pages = new PLL_Static_Pages( $this );
67 }
68
69 $this->model->set_languages_ready();
70 }
71
72 /**
73 * Setup filters.
74 *
75 * @since 2.6
76 *
77 * @return void
78 */
79 public function init() {
80 parent::init();
81
82 $this->default_term = new PLL_Default_Term( $this );
83 $this->default_term->add_hooks();
84
85 if ( ! $this->model->has_languages() ) {
86 return;
87 }
88
89 add_filter( 'rest_pre_dispatch', array( $this, 'set_language' ), 10, 3 );
90
91 $this->filters_links = new PLL_Filters_Links( $this );
92 $this->filters = new PLL_Filters( $this );
93 $this->filters_widgets_options = new PLL_Filters_Widgets_Options( $this );
94
95 $this->links = new PLL_Admin_Links( $this );
96 $this->nav_menu = new PLL_Frontend_Nav_Menu( $this ); // For auto added pages to menu.
97 }
98
99 /**
100 * Sets the current language during a REST request if sent.
101 *
102 * @since 3.3
103 *
104 * @param mixed $result Response to replace the requested version with. Remains untouched.
105 * @param WP_REST_Server $server Server instance.
106 * @param WP_REST_Request $request Request used to generate the response.
107 * @return mixed Untouched $result.
108 *
109 * @phpstan-param WP_REST_Request<array{lang?: string}> $request
110 */
111 public function set_language( $result, $server, $request ) {
112 $lang = $request->get_param( 'lang' );
113
114 if ( ! empty( $lang ) && is_string( $lang ) ) {
115 $this->curlang = $this->model->get_language( sanitize_key( $lang ) );
116
117 if ( empty( $this->curlang ) && ! empty( $this->options['default_lang'] ) ) {
118 // A lang has been requested but it is invalid, let's fall back to the default one.
119 $this->curlang = $this->model->get_language( sanitize_key( $this->options['default_lang'] ) );
120 }
121 }
122
123 if ( ! empty( $this->curlang ) ) {
124 /** This action is documented in frontend/choose-lang.php */
125 do_action( 'pll_language_defined', $this->curlang->slug, $this->curlang );
126 } else {
127 /** This action is documented in include/class-polylang.php */
128 do_action( 'pll_no_language_defined' ); // To load overridden textdomains.
129 }
130
131 return $result;
132 }
133 }
134