PluginProbe
Elementor Website Builder – more than just a page builder / 3.3.1
Elementor Website Builder – more than just a page builder v3.3.1
4.3.0-beta2 4.3.0-beta1 4.2.4 4.2.3 4.2.2 4.2.1 4.2.0 4.1.5 4.2.0-beta2 4.2.0-dev2 4.2.0-beta1 4.1.4 4.1.3 4.1.2 4.1.1 4.1.0 4.1.0-beta3 4.1.0-dev3 4.0.9 4.1.0-beta2 4.1.0-dev2 4.0.8 4.1.0-beta1 4.1.0-dev1 4.0.7 All 451 releases
← All changes | includes/settings/settings.php +367 -199 4.2.03.3.1 View file →
@@ -1,13 +1,8 @@
1 1 <?php
2 2 namespace Elementor;
3 3
4 -use Elementor\Core\Files\Fonts\Google_Font;
5 -use Elementor\Modules\Promotions\Module as Promotions_Module;
6 4 use Elementor\TemplateLibrary\Source_Local;
7 -use Elementor\Modules\EditorOne\Classes\Menu_Data_Provider;
8 -use Elementor\Includes\Settings\AdminMenuItems\Editor_One_Home_Menu;
9 -use Elementor\Includes\Settings\AdminMenuItems\Editor_One_Settings_Menu;
10 5
11 6 if ( ! defined( 'ABSPATH' ) ) {
12 7 exit; // Exit if accessed directly.
13 8 }
@@ -27,9 +22,9 @@
27 22 */
28 23 const PAGE_ID = 'elementor';
29 24
30 25 /**
31 - * Upgrade menu priority.
26 + * Go Pro menu priority.
32 27 */
33 28 const MENU_PRIORITY_GO_PRO = 502;
34 29
35 30 /**
@@ -42,8 +37,13 @@
42 37 */
43 38 const TAB_GENERAL = 'general';
44 39
45 40 /**
41 + * Settings page style tab slug.
42 + */
43 + const TAB_STYLE = 'style';
44 +
45 + /**
46 46 * Settings page integrations tab slug.
47 47 */
48 48 const TAB_INTEGRATIONS = 'integrations';
49 49
@@ -52,17 +52,8 @@
52 52 */
53 53 const TAB_ADVANCED = 'advanced';
54 54
55 55 /**
56 - * Settings page performance tab slug.
57 - */
58 - const TAB_PERFORMANCE = 'performance';
59 -
60 - const ADMIN_MENU_PRIORITY = 10;
61 -
62 - const MENU_CAPABILITY_EDIT_POSTS = 'edit_posts';
63 -
64 - /**
65 56 * Register admin menu.
66 57 *
67 58 * Add new Elementor Settings admin menu.
68 59 *
@@ -71,36 +62,312 @@
71 62 * @since 1.0.0
72 63 * @access public
73 64 */
74 65 public function register_admin_menu() {
75 - if ( ! current_user_can( self::MENU_CAPABILITY_EDIT_POSTS ) ) {
66 + global $menu;
67 +
68 + $menu[] = [ '', 'read', 'separator-elementor', '', 'wp-menu-separator elementor' ]; // phpcs:ignore WordPress.WP.GlobalVariablesOverride.Prohibited
69 +
70 + if ( ! current_user_can( 'manage_options' ) ) {
76 71 return;
77 72 }
78 73
79 74 add_menu_page(
80 - esc_html__( 'Elementor', 'elementor' ),
81 - esc_html__( 'Elementor', 'elementor' ),
82 - self::MENU_CAPABILITY_EDIT_POSTS,
75 + __( 'Elementor', 'elementor' ),
76 + __( 'Elementor', 'elementor' ),
77 + 'manage_options',
83 78 self::PAGE_ID,
84 - [ $this, 'display_home_screen' ],
79 + [ $this, 'display_settings_page' ],
85 80 '',
86 81 '58.5'
87 82 );
88 83 }
89 84
90 - public function display_home_screen() {
91 - echo '<div id="e-home-screen"></div>';
85 + /**
86 + * Reorder the Elementor menu items in admin.
87 + * Based on WC.
88 + *
89 + * @since 2.4.0
90 + *
91 + * @param array $menu_order Menu order.
92 + * @return array
93 + */
94 + public function menu_order( $menu_order ) {
95 + // Initialize our custom order array.
96 + $elementor_menu_order = [];
97 +
98 + // Get the index of our custom separator.
99 + $elementor_separator = array_search( 'separator-elementor', $menu_order, true );
100 +
101 + // Get index of library menu.
102 + $elementor_library = array_search( Source_Local::ADMIN_MENU_SLUG, $menu_order, true );
103 +
104 + // Loop through menu order and do some rearranging.
105 + foreach ( $menu_order as $index => $item ) {
106 + if ( 'elementor' === $item ) {
107 + $elementor_menu_order[] = 'separator-elementor';
108 + $elementor_menu_order[] = $item;
109 + $elementor_menu_order[] = Source_Local::ADMIN_MENU_SLUG;
110 +
111 + unset( $menu_order[ $elementor_separator ] );
112 + unset( $menu_order[ $elementor_library ] );
113 + } elseif ( ! in_array( $item, [ 'separator-elementor' ], true ) ) {
114 + $elementor_menu_order[] = $item;
115 + }
116 + }
117 +
118 + // Return order.
119 + return $elementor_menu_order;
92 120 }
93 121
94 - private function register_editor_one_settings_menu( Menu_Data_Provider $menu_data_provider ) {
95 - $menu_data_provider->register_menu( new Editor_One_Settings_Menu() );
122 + /**
123 + * Register Elementor Pro sub-menu.
124 + *
125 + * Add new Elementor Pro sub-menu under the main Elementor menu.
126 + *
127 + * Fired by `admin_menu` action.
128 + *
129 + * @since 1.0.0
130 + * @access public
131 + */
132 + public function register_pro_menu() {
133 + add_submenu_page(
134 + self::PAGE_ID,
135 + __( 'Submissions', 'elementor' ),
136 + __( 'Submissions', 'elementor' ),
137 + 'manage_options',
138 + 'e-form-submissions',
139 + function() {
140 + $this->elementor_form_submissions();
141 + }
142 + );
143 +
144 + add_submenu_page(
145 + self::PAGE_ID,
146 + __( 'Custom Fonts', 'elementor' ),
147 + __( 'Custom Fonts', 'elementor' ),
148 + 'manage_options',
149 + 'elementor_custom_fonts',
150 + [ $this, 'elementor_custom_fonts' ]
151 + );
152 +
153 + add_submenu_page(
154 + self::PAGE_ID,
155 + __( 'Custom Icons', 'elementor' ),
156 + __( 'Custom Icons', 'elementor' ),
157 + 'manage_options',
158 + 'elementor_custom_icons',
159 + [ $this, 'elementor_custom_icons' ]
160 + );
161 +
162 + add_submenu_page(
163 + self::PAGE_ID,
164 + '',
165 + '<span class="dashicons dashicons-star-filled" style="font-size: 17px"></span> ' . __( 'Go Pro', 'elementor' ),
166 + 'manage_options',
167 + 'go_elementor_pro',
168 + [ $this, 'handle_external_redirects' ]
169 + );
170 +
171 + add_submenu_page( Source_Local::ADMIN_MENU_SLUG, __( 'Popups', 'elementor' ), __( 'Popups', 'elementor' ), 'manage_options', 'popup_templates', [ $this, 'elementor_popups' ] );
96 172 }
97 173
98 - private function register_editor_one_home_menu( Menu_Data_Provider $menu_data_provider ) {
99 - $menu_data_provider->register_menu( new Editor_One_Home_Menu() );
174 + /**
175 + * Register Elementor knowledge base sub-menu.
176 + *
177 + * Add new Elementor knowledge base sub-menu under the main Elementor menu.
178 + *
179 + * Fired by `admin_menu` action.
180 + *
181 + * @since 2.0.3
182 + * @access public
183 + */
184 + public function register_knowledge_base_menu() {
185 + add_submenu_page(
186 + self::PAGE_ID,
187 + '',
188 + __( 'Getting Started', 'elementor' ),
189 + 'manage_options',
190 + 'elementor-getting-started',
191 + [ $this, 'elementor_getting_started' ]
192 + );
193 +
194 + add_submenu_page(
195 + self::PAGE_ID,
196 + '',
197 + __( 'Get Help', 'elementor' ),
198 + 'manage_options',
199 + 'go_knowledge_base_site',
200 + [ $this, 'handle_external_redirects' ]
201 + );
100 202 }
101 203
102 204 /**
205 + * Go Elementor Pro.
206 + *
207 + * Redirect the Elementor Pro page the clicking the Elementor Pro menu link.
208 + *
209 + * Fired by `admin_init` action.
210 + *
211 + * @since 2.0.3
212 + * @access public
213 + */
214 + public function handle_external_redirects() {
215 + if ( empty( $_GET['page'] ) ) {
216 + return;
217 + }
218 +
219 + if ( 'go_elementor_pro' === $_GET['page'] ) {
220 + wp_redirect( Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-menu&utm_campaign=gopro&utm_medium=wp-dash' ) );
221 + die;
222 + }
223 +
224 + if ( 'go_knowledge_base_site' === $_GET['page'] ) {
225 + wp_redirect( 'https://go.elementor.com/docs-admin-menu/' );
226 + die;
227 + }
228 + }
229 +
230 + /**
231 + * Display settings page.
232 + *
233 + * Output the content for the getting started page.
234 + *
235 + * @since 2.2.0
236 + * @access public
237 + */
238 + public function elementor_getting_started() {
239 + if ( User::is_current_user_can_edit_post_type( 'page' ) ) {
240 + $create_new_label = __( 'Create Your First Page', 'elementor' );
241 + $create_new_cpt = 'page';
242 + } elseif ( User::is_current_user_can_edit_post_type( 'post' ) ) {
243 + $create_new_label = __( 'Create Your First Post', 'elementor' );
244 + $create_new_cpt = 'post';
245 + }
246 +
247 + ?>
248 + <div class="wrap">
249 + <div class="e-getting-started">
250 + <div class="e-getting-started__box postbox">
251 + <div class="e-getting-started__header">
252 + <div class="e-getting-started__title">
253 + <div class="e-logo-wrapper">
254 + <i class="eicon-elementor"></i>
255 + </div>
256 + <?php echo __( 'Getting Started', 'elementor' ); ?>
257 + </div>
258 + <a class="e-getting-started__skip" href="<?php echo esc_url( admin_url() ); ?>">
259 + <i class="eicon-close" aria-hidden="true" title="<?php esc_attr_e( 'Skip', 'elementor' ); ?>"></i>
260 + <span class="elementor-screen-only"><?php echo __( 'Skip', 'elementor' ); ?></span>
261 + </a>
262 + </div>
263 + <div class="e-getting-started__content">
264 + <div class="e-getting-started__content--narrow">
265 + <h2><?php echo __( 'Welcome to Elementor', 'elementor' ); ?></h2>
266 + <p><?php echo __( 'Get introduced to Elementor by watching our "Getting Started" video series. It will guide you through the steps needed to create your website. Then click to create your first page.', 'elementor' ); ?></p>
267 + </div>
268 +
269 + <div class="e-getting-started__video">
270 + <iframe width="620" height="350" src="https://www.youtube-nocookie.com/embed/videoseries?list=PLZyp9H25CboH8b_wsNyOmstckiOE8aUBg&amp;controls=1&amp;modestbranding=1" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
271 + </div>
272 +
273 + <div class="e-getting-started__actions e-getting-started__content--narrow">
274 + <?php if ( ! empty( $create_new_cpt ) ) : ?>
275 + <a href="<?php echo esc_url( Plugin::$instance->documents->get_create_new_post_url( $create_new_cpt ) ); ?>" class="button button-primary button-hero"><?php echo esc_html( $create_new_label ); ?></a>
276 + <?php endif; ?>
277 +
278 + <a href="https://go.elementor.com/getting-started/" target="_blank" class="button button-secondary button-hero"><?php echo __( 'Watch the Full Guide', 'elementor' ); ?></a>
279 + </div>
280 + </div>
281 + </div>
282 + </div>
283 + </div><!-- /.wrap -->
284 + <?php
285 + }
286 +
287 + /**
288 + * Display settings page.
289 + *
290 + * Output the content for the custom fonts page.
291 + *
292 + * @since 2.0.0
293 + * @access public
294 + */
295 + public function elementor_custom_fonts() {
296 + ?>
297 + <div class="wrap">
298 + <div class="elementor-blank_state">
299 + <img src="<?php echo ELEMENTOR_ASSETS_URL . 'images/go-pro-wp-dashboard.svg'; ?>" />
300 + <h2><?php echo __( 'Add Your Custom Fonts', 'elementor' ); ?></h2>
301 + <p><?php echo __( 'Custom Fonts allows you to add your self-hosted fonts and use them on your Elementor projects to create a unique brand language.', 'elementor' ); ?></p>
302 + <a class="elementor-button elementor-button-default elementor-button-go-pro" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-custom-fonts&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
303 + </div>
304 + </div><!-- /.wrap -->
305 + <?php
306 + }
307 +
308 + /**
309 + * Display settings page.
310 + *
311 + * Output the content for the custom icons page.
312 + *
313 + * @since 2.8.0
314 + * @access public
315 + */
316 + public function elementor_custom_icons() {
317 + ?>
318 + <div class="wrap">
319 + <div class="elementor-blank_state">
320 + <img src="<?php echo ELEMENTOR_ASSETS_URL . 'images/go-pro-wp-dashboard.svg'; ?>" />
321 + <h2><?php echo __( 'Add Your Custom Icons', 'elementor' ); ?></h2>
322 + <p><?php echo __( 'Don\'t rely solely on the FontAwesome icons everyone else is using! Differentiate your website and your style with custom icons you can upload from your favorite icons source.', 'elementor' ); ?></p>
323 + <a class="elementor-button elementor-button-default elementor-button-go-pro" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-custom-icons&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
324 + </div>
325 + </div><!-- /.wrap -->
326 + <?php
327 + }
328 +
329 + /**
330 + * Display settings page.
331 + *
332 + * Output the content for the Popups page.
333 + *
334 + * @since 2.4.0
335 + * @access public
336 + */
337 + public function elementor_popups() {
338 + ?>
339 + <div class="wrap">
340 + <div class="elementor-blank_state">
341 + <img src="<?php echo ELEMENTOR_ASSETS_URL . 'images/go-pro-wp-dashboard.svg'; ?>" />
342 + <h2><?php echo __( 'Get Popup Builder', 'elementor' ); ?></h2>
343 + <p><?php echo __( 'Popup Builder lets you take advantage of all the amazing features in Elementor, so you can build beautiful & highly converting popups. Go pro and start designing your popups today.', 'elementor' ); ?></p>
344 + <a class="elementor-button elementor-button-default elementor-button-go-pro" target="_blank" href="<?php echo Utils::get_pro_link( 'https://elementor.com/popup-builder/?utm_source=popup-templates&utm_campaign=gopro&utm_medium=wp-dash' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
345 + </div>
346 + </div><!-- /.wrap -->
347 + <?php
348 + }
349 +
350 + public function elementor_form_submissions() {
351 + ?>
352 + <div class="wrap">
353 + <div class="elementor-blank_state">
354 + <img src="<?php echo ELEMENTOR_ASSETS_URL . 'images/go-pro-wp-dashboard.svg'; ?>" />
355 + <h2><?php echo __( 'Collect Your Form Submissions', 'elementor' ); ?></h2>
356 + <p>
357 + <?php echo __( 'Save and manage all of your form submissions in one single place.
358 +All within a simple, intuitive place.', 'elementor' ); ?>
359 + <a href="http://go.elementor.com/wp-dash-submissions" target="_blank" rel="nofollow">
360 + <?php echo __( 'Learn More', 'elementor' ); ?>
361 + </a>
362 + </p>
363 + <a class="elementor-button elementor-button-default elementor-button-go-pro" target="_blank" href="<?php echo Utils::get_pro_link( 'https://go.elementor.com/go-pro-submissions' ); ?>"><?php echo __( 'Go Pro', 'elementor' ); ?></a>
364 + </div>
365 + </div><!-- /.wrap -->
366 + <?php
367 + }
368 +
369 + /**
103 370 * On admin init.
104 371 *
105 372 * Preform actions on WordPress admin initialization.
106 373 *
@@ -109,12 +376,28 @@
109 376 * @since 2.0.0
110 377 * @access public
111 378 */
112 379 public function on_admin_init() {
380 + $this->handle_external_redirects();
381 +
113 382 $this->maybe_remove_all_admin_notices();
114 383 }
115 384
116 385 /**
386 + * Change "Settings" menu name.
387 + *
388 + * Update the name of the Settings admin menu from "Elementor" to "Settings".
389 + *
390 + * Fired by `admin_menu` action.
391 + *
392 + * @since 1.0.0
393 + * @access public
394 + */
395 + public function admin_menu_change_name() {
396 + Utils::change_submenu_first_item_label( 'elementor', __( 'Settings', 'elementor' ) );
397 + }
398 +
399 + /**
117 400 * Update CSS print method.
118 401 *
119 402 * Clear post CSS cache.
120 403 *
@@ -122,9 +405,9 @@
122 405 * `update_option_elementor_css_print_method` actions.
123 406 *
124 407 * @since 1.7.5
125 408 * @access public
126 - * @deprecated 3.0.0 Use `Plugin::$instance->files_manager->clear_cache()` method instead.
409 + * @deprecated 3.0.0
127 410 */
128 411 public function update_css_print_method() {
129 412 Plugin::$instance->files_manager->clear_cache();
130 413 }
@@ -143,18 +426,11 @@
143 426 $validations_class_name = __NAMESPACE__ . '\Settings_Validations';
144 427
145 428 return [
146 429 self::TAB_GENERAL => [
147 - 'label' => esc_html__( 'General', 'elementor' ),
430 + 'label' => __( 'General', 'elementor' ),
148 431 'sections' => [
149 432 'general' => [
150 - 'label' => esc_html__( 'General', 'elementor' ),
151 - 'callback' => function() {
152 - printf(
153 - '<p>%s</p><br><hr><br>',
154 - esc_html__( 'Tailor how Elementor enhances your site, from post types to other functions.', 'elementor' )
155 - );
156 - },
157 433 'fields' => [
158 434 self::UPDATE_TIME_FIELD => [
159 435 'full_field_id' => self::UPDATE_TIME_FIELD,
160 436 'field_args' => [
@@ -162,9 +438,9 @@
162 438 ],
163 439 'setting_args' => [ $validations_class_name, 'current_time' ],
164 440 ],
165 441 'cpt_support' => [
166 - 'label' => esc_html__( 'Post Types', 'elementor' ),
442 + 'label' => __( 'Post Types', 'elementor' ),
167 443 'field_args' => [
168 444 'type' => 'checkbox_list_cpt',
169 445 'std' => [ 'page', 'post' ],
170 446 'exclude' => [ 'attachment', 'elementor_library' ],
@@ -171,50 +447,41 @@
171 447 ],
172 448 'setting_args' => [ $validations_class_name, 'checkbox_list' ],
173 449 ],
174 450 'disable_color_schemes' => [
175 - 'label' => esc_html__( 'Disable Default Colors', 'elementor' ),
451 + 'label' => __( 'Disable Default Colors', 'elementor' ),
176 452 'field_args' => [
177 453 'type' => 'checkbox',
178 454 'value' => 'yes',
179 - 'sub_desc' => esc_html__( 'Checking this box will disable Elementor\'s Default Colors, and make Elementor inherit the colors from your theme.', 'elementor' ),
455 + 'sub_desc' => __( 'Checking this box will disable Elementor\'s Default Colors, and make Elementor inherit the colors from your theme.', 'elementor' ),
180 456 ],
181 457 ],
182 458 'disable_typography_schemes' => [
183 - 'label' => esc_html__( 'Disable Default Fonts', 'elementor' ),
459 + 'label' => __( 'Disable Default Fonts', 'elementor' ),
184 460 'field_args' => [
185 461 'type' => 'checkbox',
186 462 'value' => 'yes',
187 - 'sub_desc' => esc_html__( 'Checking this box will disable Elementor\'s Default Fonts, and make Elementor inherit the fonts from your theme.', 'elementor' ),
463 + 'sub_desc' => __( 'Checking this box will disable Elementor\'s Default Fonts, and make Elementor inherit the fonts from your theme.', 'elementor' ),
188 464 ],
189 465 ],
190 466 ],
191 467 ],
192 468 'usage' => [
193 - 'label' => esc_html__( 'Improve Elementor', 'elementor' ),
469 + 'label' => __( 'Improve Elementor', 'elementor' ),
194 470 'fields' => $this->get_usage_fields(),
195 471 ],
196 472 ],
197 473 ],
198 - self::TAB_INTEGRATIONS => [
199 - 'label' => esc_html__( 'Integrations', 'elementor' ),
474 + self::TAB_STYLE => [
475 + 'label' => __( 'Style', 'elementor' ),
200 476 'sections' => [
201 - 'google_maps' => [
202 - 'label' => esc_html__( 'Google Maps Embed API', 'elementor' ),
203 - 'callback' => function() {
204 - printf(
205 - /* translators: 1: Link open tag, 2: Link close tag */
206 - esc_html__( 'Google Maps Embed API is a free service by Google that allows embedding Google Maps in your site. For more details, visit Google Maps\' %1$sUsing API Keys%2$s page.', 'elementor' ),
207 - '<a target="_blank" href="https://developers.google.com/maps/documentation/embed/get-api-key">',
208 - '</a>'
209 - );
210 - },
477 + 'style' => [
211 478 'fields' => [
212 - 'google_maps_api_key' => [
213 - 'label' => esc_html__( 'API Key', 'elementor' ),
479 + 'notice' => [
480 + 'label' => __( 'Looking for the Style settings?', 'elementor' ),
214 481 'field_args' => [
215 - 'class' => 'elementor_google_maps_api_key',
216 - 'type' => 'text',
482 + 'type' => 'raw_html',
483 + 'html' => __( 'The Style settings changed its location and can now be found within Elementor Editor\'s <b>Panel > Hamburger Menu > Site Settings</b>.<br>You can use the Site Settings to make changes and see them live!', 'elementor' ) . sprintf( ' <a target="_blank" href="http://go.elementor.com/panel-layout-settings">%s</a>', __( 'Learn More', 'elementor' ) ),
217 484 ],
218 485 ],
219 486 ],
220 487 ],
@@ -219,162 +486,83 @@
219 486 ],
220 487 ],
221 488 ],
222 489 ],
223 - self::TAB_ADVANCED => [
224 - 'label' => esc_html__( 'Advanced', 'elementor' ),
490 + self::TAB_INTEGRATIONS => [
491 + 'label' => __( 'Integrations', 'elementor' ),
225 492 'sections' => [
226 - 'advanced' => [
227 - 'label' => esc_html__( 'Advanced', 'elementor' ),
493 + 'google_maps' => [
494 + 'label' => __( 'Google Maps Embed API', 'elementor' ),
228 495 'callback' => function() {
229 - printf(
230 - '<p>%s</p><br><hr><br>',
231 - esc_html__( 'Personalize the way Elementor works on your website by choosing the advanced features and how they operate.', 'elementor' )
232 - );
496 + printf( __( 'Google Maps Embed API is a free service by Google that allows embedding Google Maps in your site. For more details, visit Google Maps\' <a href="%s" target="_blank">Using API Keys</a> page.', 'elementor' ), esc_url( 'https://developers.google.com/maps/documentation/embed/get-api-key' ) );
233 497 },
234 498 'fields' => [
235 - 'editor_break_lines' => [
236 - 'label' => esc_html__( 'Switch Editor Loader Method', 'elementor' ),
499 + 'google_maps_api_key' => [
500 + 'label' => __( 'API Key', 'elementor' ),
237 501 'field_args' => [
238 - 'type' => 'select',
239 - 'std' => '',
240 - 'options' => [
241 - '' => esc_html__( 'Disable', 'elementor' ),
242 - '1' => esc_html__( 'Enable', 'elementor' ),
243 - ],
244 - 'desc' => esc_html__( 'For troubleshooting server configuration conflicts.', 'elementor' ),
502 + 'class' => 'elementor_google_maps_api_key',
503 + 'type' => 'text',
245 504 ],
246 505 ],
247 - 'unfiltered_files_upload' => [
248 - 'label' => esc_html__( 'Enable Unfiltered File Uploads', 'elementor' ),
249 - 'field_args' => [
250 - 'type' => 'select',
251 - 'std' => '',
252 - 'options' => [
253 - '' => esc_html__( 'Disable', 'elementor' ),
254 - '1' => esc_html__( 'Enable', 'elementor' ),
255 - ],
256 - 'desc' => esc_html__( 'Please note! Allowing uploads of any files (SVG & JSON included) is a potential security risk.', 'elementor' ) . '<br>' . esc_html__( 'Elementor will try to sanitize the unfiltered files, removing potential malicious code and scripts.', 'elementor' ) . '<br>' . esc_html__( 'We recommend you only enable this feature if you understand the security risks involved.', 'elementor' ),
257 - ],
258 - ],
259 - 'google_font' => [
260 - 'label' => esc_html__( 'Google Fonts', 'elementor' ),
261 - 'field_args' => [
262 - 'type' => 'select',
263 - 'std' => '1',
264 - 'options' => [
265 - '1' => esc_html__( 'Enable', 'elementor' ),
266 - '0' => esc_html__( 'Disable', 'elementor' ),
267 - ],
268 - 'desc' => sprintf(
269 - /* translators: 1: Link opening tag, 2: Link closing tag */
270 - esc_html__( 'Disable this option if you want to prevent Google Fonts from being loaded. This setting is recommended when loading fonts from a different source (plugin, theme or %1$scustom fonts%2$s).', 'elementor' ),
271 - '<a href="' . admin_url( 'admin.php?page=elementor_custom_fonts' ) . '">',
272 - '</a>'
273 - ),
274 - ],
275 - ],
276 - 'font_display' => [
277 - 'label' => esc_html__( 'Google Fonts Load', 'elementor' ),
278 - 'field_args' => [
279 - 'type' => 'select',
280 - 'std' => 'auto',
281 - 'options' => [
282 - 'auto' => esc_html__( 'Default', 'elementor' ),
283 - 'block' => esc_html__( 'Blocking', 'elementor' ),
284 - 'swap' => esc_html__( 'Swap', 'elementor' ),
285 - 'fallback' => esc_html__( 'Fallback', 'elementor' ),
286 - 'optional' => esc_html__( 'Optional', 'elementor' ),
287 - ],
288 - 'desc' => esc_html__( 'Font-display property defines how font files are loaded and displayed by the browser.', 'elementor' ) . '<br>' . esc_html__( 'Set the way Google Fonts are being loaded by selecting the font-display property (Recommended: Swap).', 'elementor' ),
289 - ],
290 - ],
291 506 ],
292 507 ],
293 508 ],
294 509 ],
295 - self::TAB_PERFORMANCE => [
296 - 'label' => esc_html__( 'Performance', 'elementor' ),
510 + self::TAB_ADVANCED => [
511 + 'label' => __( 'Advanced', 'elementor' ),
297 512 'sections' => [
298 - 'performance' => [
299 - 'label' => esc_html__( 'Performance', 'elementor' ),
300 - 'callback' => function() {
301 - printf(
302 - '<p>%s</p><br><hr><br>',
303 - esc_html__( 'Improve loading times on your site by selecting the optimization tools that best fit your requirements.', 'elementor' )
304 - );
305 - },
513 + 'advanced' => [
306 514 'fields' => [
307 515 'css_print_method' => [
308 - 'label' => esc_html__( 'CSS Print Method', 'elementor' ),
516 + 'label' => __( 'CSS Print Method', 'elementor' ),
309 517 'field_args' => [
310 518 'class' => 'elementor_css_print_method',
311 519 'type' => 'select',
312 - 'std' => 'external',
313 520 'options' => [
314 - 'external' => esc_html__( 'External File', 'elementor' ),
315 - 'internal' => esc_html__( 'Internal Embedding', 'elementor' ),
521 + 'external' => __( 'External File', 'elementor' ),
522 + 'internal' => __( 'Internal Embedding', 'elementor' ),
316 523 ],
317 - 'desc' => sprintf(
318 - /* translators: %s: <head> tag. */
319 - esc_html__( 'Internal Embedding places all CSS in the %s which works great for troubleshooting, while External File uses external CSS file for better performance (recommended).', 'elementor' ),
320 - '<code>&lt;head&gt;</code>',
321 - ),
524 + 'desc' => '<div class="elementor-css-print-method-description" data-value="external" style="display: none">' . __( 'Use external CSS files for all generated stylesheets. Choose this setting for better performance (recommended).', 'elementor' ) . '</div><div class="elementor-css-print-method-description" data-value="internal" style="display: none">' . __( 'Use internal CSS that is embedded in the head of the page. For troubleshooting server configuration conflicts and managing development environments.', 'elementor' ) . '</div>',
322 525 ],
323 526 ],
324 - 'optimized_image_loading' => [
325 - 'label' => esc_html__( 'Optimized Image Loading', 'elementor' ),
527 + 'editor_break_lines' => [
528 + 'label' => __( 'Switch Editor Loader Method', 'elementor' ),
326 529 'field_args' => [
327 530 'type' => 'select',
328 - 'std' => '1',
329 531 'options' => [
330 - '1' => esc_html__( 'Enable', 'elementor' ),
331 - '0' => esc_html__( 'Disable', 'elementor' ),
532 + '' => __( 'Disable', 'elementor' ),
533 + 1 => __( 'Enable', 'elementor' ),
332 534 ],
333 - 'desc' => sprintf(
334 - /* translators: 1: fetchpriority attribute, 2: lazy loading attribute. */
335 - esc_html__( 'Improve performance by applying %1$s on LCP image and %2$s on images below the fold.', 'elementor' ),
336 - '<code>fetchpriority="high"</code>',
337 - '<code>loading="lazy"</code>'
338 - ),
535 + 'desc' => __( 'For troubleshooting server configuration conflicts.', 'elementor' ),
339 536 ],
340 537 ],
341 - 'optimized_gutenberg_loading' => [
342 - 'label' => esc_html__( 'Optimized Gutenberg Loading', 'elementor' ),
538 + 'unfiltered_files_upload' => [
539 + 'label' => __( 'Enable Unfiltered File Uploads', 'elementor' ),
343 540 'field_args' => [
344 541 'type' => 'select',
345 - 'std' => '1',
542 + 'std' => '',
346 543 'options' => [
347 - '1' => esc_html__( 'Enable', 'elementor' ),
348 - '0' => esc_html__( 'Disable', 'elementor' ),
544 + '' => __( 'Disable', 'elementor' ),
545 + 1 => __( 'Enable', 'elementor' ),
349 546 ],
350 - 'desc' => esc_html__( 'Reduce unnecessary render-blocking loads by dequeuing unused Gutenberg block editor scripts and styles.', 'elementor' ),
547 + 'desc' => __( 'Please note! Allowing uploads of any files (SVG & JSON included) is a potential security risk.', 'elementor' ) . '<br>' . __( 'Elementor will try to sanitize the unfiltered files, removing potential malicious code and scripts.', 'elementor' ) . '<br>' . __( 'We recommend you only enable this feature if you understand the security risks involved.', 'elementor' ),
351 548 ],
352 549 ],
353 - 'lazy_load_background_images' => [
354 - 'label' => esc_html__( 'Lazy Load Background Images', 'elementor' ),
550 + 'font_display' => [
551 + 'label' => __( 'Google Fonts Load', 'elementor' ),
355 552 'field_args' => [
356 553 'type' => 'select',
357 - 'std' => '1',
554 + 'std' => 'auto',
358 555 'options' => [
359 - '1' => esc_html__( 'Enable', 'elementor' ),
360 - '0' => esc_html__( 'Disable', 'elementor' ),
556 + 'auto' => __( 'Default', 'elementor' ),
557 + 'block' => __( 'Blocking', 'elementor' ),
558 + 'swap' => __( 'Swap', 'elementor' ),
559 + 'fallback' => __( 'Fallback', 'elementor' ),
560 + 'optional' => __( 'Optional', 'elementor' ),
361 561 ],
362 - 'desc' => esc_html__( 'Improve initial page load performance by lazy loading all background images except the first one.', 'elementor' ),
562 + 'desc' => __( 'Font-display property defines how font files are loaded and displayed by the browser.', 'elementor' ) . '<br>' . __( 'Set the way Google Fonts are being loaded by selecting the font-display property (Default: Auto).', 'elementor' ),
363 563 ],
364 564 ],
365 - 'local_google_fonts' => [
366 - 'label' => esc_html__( 'Load Google Fonts Locally', 'elementor' ),
367 - 'field_args' => [
368 - 'type' => 'select',
369 - 'std' => '0',
370 - 'options' => [
371 - '1' => esc_html__( 'Enable', 'elementor' ),
372 - '0' => esc_html__( 'Disable', 'elementor' ),
373 - ],
374 - 'desc' => esc_html__( 'Load Google fonts locally to benefit from faster performance and ensure GDPR compliance. Fonts will be served from your own server instead of Google’s. Only the very first load (in the editor and on the front end) may take slightly longer.', 'elementor' ),
375 - ],
376 - ],
377 565 ],
378 566 ],
379 567 ],
380 568 ],
@@ -391,9 +579,9 @@
391 579 *
392 580 * @return string Settings page title.
393 581 */
394 582 protected function get_page_title() {
395 - return esc_html__( 'Elementor', 'elementor' );
583 + return __( 'Elementor', 'elementor' );
396 584 }
397 585
398 586 /**
399 587 * @since 2.2.0
@@ -400,16 +588,13 @@
400 588 * @access private
401 589 */
402 590 private function maybe_remove_all_admin_notices() {
403 591 $elementor_pages = [
404 - 'elementor-system-info',
405 - 'e-form-submissions',
592 + 'elementor-getting-started',
406 593 'elementor_custom_fonts',
407 594 'elementor_custom_icons',
408 595 'elementor-license',
409 - 'elementor_custom_code',
410 596 'popup_templates',
411 - 'elementor-apps',
412 597 ];
413 598
414 599 if ( empty( $_GET['page'] ) || ! in_array( $_GET['page'], $elementor_pages, true ) ) {
415 600 return;
@@ -417,21 +602,8 @@
417 602
418 603 remove_all_actions( 'admin_notices' );
419 604 }
420 605
421 - public function add_generator_tag_settings( $settings ) {
422 - $css_print_method = get_option( 'elementor_css_print_method', 'external' );
423 - $settings[] = 'css_print_method-' . $css_print_method;
424 -
425 - $google_font = Fonts::is_google_fonts_enabled() ? 'enabled' : 'disabled';
426 - $settings[] = 'google_font-' . $google_font;
427 -
428 - $font_display = Fonts::get_font_display_setting();
429 - $settings[] = 'font_display-' . $font_display;
430 -
431 - return $settings;
432 - }
433 -
434 606 /**
435 607 * Settings page constructor.
436 608 *
437 609 * Initializing Elementor "Settings" page.
@@ -442,17 +614,13 @@
442 614 public function __construct() {
443 615 parent::__construct();
444 616
445 617 add_action( 'admin_init', [ $this, 'on_admin_init' ] );
446 - add_filter( 'elementor/generator_tag/settings', [ $this, 'add_generator_tag_settings' ] );
447 -
448 618 add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 20 );
619 + add_action( 'admin_menu', [ $this, 'admin_menu_change_name' ], 200 );
620 + add_action( 'admin_menu', [ $this, 'register_pro_menu' ], self::MENU_PRIORITY_GO_PRO );
621 + add_action( 'admin_menu', [ $this, 'register_knowledge_base_menu' ], 501 );
449 622
450 - add_action( 'elementor/editor-one/menu/register', function ( Menu_Data_Provider $menu_data_provider ) {
451 - $this->register_editor_one_settings_menu( $menu_data_provider );
452 - $this->register_editor_one_home_menu( $menu_data_provider );
453 - } );
454 -
455 623 $clear_cache_callback = [ Plugin::$instance->files_manager, 'clear_cache' ];
456 624
457 625 // Clear CSS Meta after change css related methods.
458 626 $css_settings = [
@@ -458,9 +626,8 @@
458 626 $css_settings = [
459 627 'elementor_disable_color_schemes',
460 628 'elementor_disable_typography_schemes',
461 629 'elementor_css_print_method',
462 - 'elementor_local_google_fonts',
463 630 ];
464 631
465 632 foreach ( $css_settings as $option_name ) {
466 633 add_action( "add_option_{$option_name}", $clear_cache_callback );
@@ -466,7 +633,8 @@
466 633 add_action( "add_option_{$option_name}", $clear_cache_callback );
467 634 add_action( "update_option_{$option_name}", $clear_cache_callback );
468 635 }
469 636
470 - add_action( 'update_option_elementor_font_display', [ Google_Font::class, 'clear_cache' ] );
637 + add_filter( 'custom_menu_order', '__return_true' );
638 + add_filter( 'menu_order', [ $this, 'menu_order' ] );
471 639 }
472 640 }