PluginProbe
Polylang / 3.8.5
Polylang v3.8.5
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 / src / Capabilities / Create / Post.php

Post.php in Polylang 3.8.5, at src/Capabilities/Create/Post.php

71 lines 2.3 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 namespace WP_Syntex\Polylang\Capabilities\Create;
7
8 use PLL_Language;
9 use WP_Syntex\Polylang\Capabilities\Capabilities;
10
11 /**
12 * Class to manage the language context for posts creation or update.
13 *
14 * @since 3.8
15 */
16 class Post extends Abstract_Object {
17 /**
18 * Returns the language to set for a post creation or update.
19 *
20 * @since 3.8
21 *
22 * @param int $id The post ID for which to set the language. Default `0`.
23 * @return PLL_Language The language context.
24 */
25 public function get_language( int $id = 0 ): PLL_Language {
26 /** @var PLL_Language $default_language The default language is always defined. */
27 $default_language = $this->model->get_default_language();
28 $user = Capabilities::get_user();
29
30 if ( ! empty( $_GET['new_lang'] ) && $lang = $this->model->get_language( sanitize_key( $_GET['new_lang'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
31 // Defined only on admin.
32 return $lang;
33 }
34 if ( ! isset( $this->pref_lang ) && ! empty( $_REQUEST['lang'] ) && $lang = $this->model->get_language( sanitize_key( $_REQUEST['lang'] ) ) ) { // phpcs:ignore WordPress.Security.NonceVerification
35 // Testing $this->pref_lang makes this test pass only on frontend.
36 return $lang;
37 }
38 if ( $this->request && $lang = $this->request->get_language() ) {
39 // REST request.
40 return $lang;
41 }
42 if ( ( $parent_id = wp_get_post_parent_id( $id ) ) && $parent_lang = $this->model->post->get_language( $parent_id ) ) {
43 // Use parent if exists.
44 return $parent_lang;
45 }
46 if ( isset( $this->pref_lang ) && $user->can_translate( $this->pref_lang ) ) {
47 // Always defined on admin, never defined on frontend.
48 return $this->pref_lang;
49 }
50 if ( ! empty( $this->curlang ) ) {
51 // Only on frontend due to the previous test always true on admin.
52 return $this->curlang;
53 }
54 if ( $user->is_translator() ) {
55 // Use default language if user can translate into it...
56 if ( $user->can_translate( $default_language ) ) {
57 return $default_language;
58 }
59
60 // ... or its preferred one.
61 $preferred_language = $this->model->get_language( $user->get_preferred_language_slug() );
62 if ( $preferred_language ) {
63 return $preferred_language;
64 }
65 }
66
67 // In all other cases use default language because we must have a language to set.
68 return $default_language;
69 }
70 }
71