PluginProbe
Polylang / 2.1
Polylang v2.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 | admin/admin-static-pages.php +40 -130 3.02.1 View file →
@@ -1,22 +1,15 @@
1 1 <?php
2 -/**
3 - * @package Polylang
4 - */
5 2
6 3 /**
7 - * Manages the static front page and the page for posts on admin side
4 + * manages the static front page and the page for posts on admin side
8 5 *
9 6 * @since 1.8
10 7 */
11 8 class PLL_Admin_Static_Pages extends PLL_Static_Pages {
12 - /**
13 - * @var PLL_Admin_Links
14 - */
15 - protected $links;
16 9
17 10 /**
18 - * Constructor: setups filters and actions
11 + * constructor: setups filters and actions
19 12 *
20 13 * @since 1.8
21 14 *
22 15 * @param object $polylang
@@ -23,84 +16,37 @@
23 16 */
24 17 public function __construct( &$polylang ) {
25 18 parent::__construct( $polylang );
26 19
27 - $this->links = &$polylang->links;
28 -
29 - // Removes the editor and the template select dropdown for pages for posts
30 - add_filter( 'use_block_editor_for_post', array( $this, 'use_block_editor_for_post' ), 10, 2 ); // Since WP 5.0
31 - add_action( 'add_meta_boxes', array( $this, 'add_meta_boxes' ), 10, 2 );
32 -
33 - // Add post state for translations of the front page and posts page
20 + // add post state for translations of the front page and posts page
34 21 add_filter( 'display_post_states', array( $this, 'display_post_states' ), 10, 2 );
35 22
36 - // Refresh language cache when a static front page has been translated
23 + // refresh language cache when a static front page has been translated
37 24 add_action( 'pll_save_post', array( $this, 'pll_save_post' ), 10, 3 );
38 25
26 + // checks if chosen page on front is translated
27 + add_filter( 'pre_update_option_page_on_front', array( $this, 'update_page_on_front' ), 10, 2 );
28 +
39 29 // Prevents WP resetting the option
40 30 add_filter( 'pre_update_option_show_on_front', array( $this, 'update_show_on_front' ), 10, 2 );
41 -
42 - add_action( 'admin_notices', array( $this, 'notice_must_translate' ) );
43 31 }
44 32
45 33 /**
46 - * Don't use the block editor for the translations of the pages for posts
34 + * add post state for translations of the front page and posts page
47 35 *
48 - * @since 2.5
49 - *
50 - * @param bool $use_block_editor Whether the post can be edited or not.
51 - * @param WP_Post $post The post being checked.
52 - * @return bool
53 - */
54 - public function use_block_editor_for_post( $use_block_editor, $post ) {
55 - if ( 'page' === $post->post_type ) {
56 - add_filter( 'option_page_for_posts', array( $this, 'translate_page_for_posts' ) );
57 -
58 - if ( ( get_option( 'page_for_posts' ) == $post->ID ) && empty( $post->post_content ) ) {
59 - return false;
60 - }
61 - }
62 -
63 - return $use_block_editor;
64 - }
65 -
66 - /**
67 - * Removes the editor for the translations of the pages for posts.
68 - * Removes the page template select dropdown in page attributes metabox too.
69 - *
70 - * @since 2.2.2
71 - *
72 - * @param string $post_type Current post type.
73 - * @param WP_Post $post Current post.
74 - * @return void
75 - */
76 - public function add_meta_boxes( $post_type, $post ) {
77 - if ( 'page' === $post_type ) {
78 - add_filter( 'option_page_for_posts', array( $this, 'translate_page_for_posts' ) );
79 -
80 - if ( ( get_option( 'page_for_posts' ) == $post->ID ) && empty( $post->post_content ) ) {
81 - add_action( 'edit_form_after_title', '_wp_posts_page_notice' );
82 - remove_post_type_support( $post_type, 'editor' );
83 - }
84 - }
85 - }
86 -
87 - /**
88 - * Adds post state for translations of the front page and posts page.
89 - *
90 36 * @since 1.8
91 37 *
92 - * @param string[] $post_states An array of post display states.
93 - * @param WP_Post $post The current post object.
94 - * @return string[]
38 + * @param array $post_states
39 + * @param object $post
40 + * @return array
95 41 */
96 42 public function display_post_states( $post_states, $post ) {
97 43 if ( in_array( $post->ID, $this->model->get_languages_list( array( 'fields' => 'page_on_front' ) ) ) ) {
98 - $post_states['page_on_front'] = __( 'Front Page', 'polylang' );
44 + $post_states['page_on_front'] = __( 'Front Page' );
99 45 }
100 46
101 47 if ( in_array( $post->ID, $this->model->get_languages_list( array( 'fields' => 'page_for_posts' ) ) ) ) {
102 - $post_states['page_for_posts'] = __( 'Posts Page', 'polylang' );
48 + $post_states['page_for_posts'] = __( 'Posts Page' );
103 49 }
104 50
105 51 return $post_states;
106 52 }
@@ -105,16 +51,15 @@
105 51 return $post_states;
106 52 }
107 53
108 54 /**
109 - * Refreshes the language cache when a static front page has been translated.
55 + * refresh language cache when a static front page has been translated
110 56 *
111 57 * @since 1.8
112 58 *
113 - * @param int $post_id Not used.
114 - * @param WP_Post $post Not used.
115 - * @param int[] $translations Translations of the post being saved.
116 - * @return void
59 + * @param int $post_id not used
60 + * @param object $post not used
61 + * @param array $translations
117 62 */
118 63 public function pll_save_post( $post_id, $post, $translations ) {
119 64 if ( in_array( $this->page_on_front, $translations ) ) {
120 65 $this->model->clean_languages_cache();
@@ -121,78 +66,43 @@
121 66 }
122 67 }
123 68
124 69 /**
125 - * Prevents WP resetting the option if the admin language filter is active for a language with no pages
70 + * prevents choosing an untranslated static front page
71 + * displays an error message
126 72 *
127 - * @since 1.9.3
73 + * @since 1.6
128 74 *
129 - * @param string $value
130 - * @param string $old_value
131 - * @return string
75 + * @param int $page_id new page on front page id
76 + * @param int $old_id old page on front page_id
77 + * @return int
132 78 */
133 - public function update_show_on_front( $value, $old_value ) {
134 - if ( ! empty( $GLOBALS['pagenow'] ) && 'options-reading.php' === $GLOBALS['pagenow'] && 'posts' === $value && ! get_pages() && get_pages( array( 'lang' => '' ) ) ) {
135 - $value = $old_value;
136 - }
137 - return $value;
138 - }
79 + public function update_page_on_front( $page_id, $old_id ) {
80 + if ( $page_id ) {
81 + $translations = count( $this->model->post->get_translations( $page_id ) );
82 + $languages = count( $this->model->get_languages_list() );
139 83
140 - /**
141 - * Add a notice to translate the static front page if it is not translated in all languages
142 - * This is especially useful after a new language is created.
143 - * The notice is not dismissible and displayed on the Languages pages and the list of pages.
144 - *
145 - * @since 2.6
146 - *
147 - * @return void
148 - */
149 - public function notice_must_translate() {
150 - $screen = get_current_screen();
151 -
152 - if ( ! empty( $screen ) && ( 'toplevel_page_mlang' === $screen->id || 'edit-page' === $screen->id ) ) {
153 - $message = $this->get_must_translate_message();
154 -
155 - if ( ! empty( $message ) ) {
156 - printf(
157 - '<div class="error"><p>%s</p></div>',
158 - $message // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
159 - );
84 + if ( $languages > 1 && $translations != $languages ) {
85 + $page_id = $old_id;
86 + add_settings_error( 'reading', 'pll_page_on_front_error', __( 'The chosen static front page must be translated in all languages.', 'polylang' ) );
160 87 }
161 88 }
89 +
90 + return $page_id;
162 91 }
163 92
164 93 /**
165 - * Returns the message asking to translate the static front page in all languages.
94 + * Prevents WP resetting the option if the admin language filter is active for a language with no pages
166 95 *
167 - * @since 2.8
96 + * @since 1.9.3
168 97 *
98 + * @param string $value
99 + * @param string $old_value
169 100 * @return string
170 101 */
171 - public function get_must_translate_message() {
172 - $message = '';
173 -
174 - if ( $this->page_on_front ) {
175 - $untranslated = array();
176 -
177 - foreach ( $this->model->get_languages_list() as $language ) {
178 - if ( ! $this->model->post->get( $this->page_on_front, $language ) ) {
179 - $untranslated[] = sprintf(
180 - '<a href="%s">%s</a>',
181 - esc_url( $this->links->get_new_post_translation_link( $this->page_on_front, $language ) ),
182 - esc_html( $language->name )
183 - );
184 - }
185 - }
186 -
187 - if ( ! empty( $untranslated ) ) {
188 - $message = sprintf(
189 - /* translators: %s is a comma separated list of native language names */
190 - esc_html__( 'You must translate your static front page in %s.', 'polylang' ),
191 - implode( ', ', $untranslated ) // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
192 - );
193 - }
102 + public function update_show_on_front( $value, $old_value ) {
103 + if ( ! empty( $GLOBALS['pagenow'] ) && 'options-reading.php' === $GLOBALS['pagenow'] && 'posts' === $value && ! get_pages() && get_pages( array( 'lang' => '' ) ) ) {
104 + $value = $old_value;
194 105 }
195 -
196 - return $message;
106 + return $value;
197 107 }
198 108 }