%PDF-
%PDF-
Mini Shell
Mini Shell
<?php
namespace Elementor;
use Elementor\Core\Responsive\Responsive;
use Elementor\Core\Settings\General\Manager as General_Settings_Manager;
use Elementor\Core\Settings\Manager;
if ( ! defined( 'ABSPATH' ) ) {
exit; // Exit if accessed directly.
}
/**
* Elementor "Settings" page in WordPress Dashboard.
*
* Elementor settings page handler class responsible for creating and displaying
* Elementor "Settings" page in WordPress dashboard.
*
* @since 1.0.0
*/
class Settings extends Settings_Page {
/**
* Settings page ID for Elementor settings.
*/
const PAGE_ID = 'elementor';
/**
* Go Pro menu priority.
*/
const MENU_PRIORITY_GO_PRO = 502;
/**
* Settings page field for update time.
*/
const UPDATE_TIME_FIELD = '_elementor_settings_update_time';
/**
* Settings page general tab slug.
*/
const TAB_GENERAL = 'general';
/**
* Settings page style tab slug.
*/
const TAB_STYLE = 'style';
/**
* Settings page integrations tab slug.
*/
const TAB_INTEGRATIONS = 'integrations';
/**
* Settings page advanced tab slug.
*/
const TAB_ADVANCED = 'advanced';
/**
* Register admin menu.
*
* Add new Elementor Settings admin menu.
*
* Fired by `admin_menu` action.
*
* @since 1.0.0
* @access public
*/
public function register_admin_menu() {
add_menu_page(
__( 'Elementor', 'elementor' ),
__( 'Elementor', 'elementor' ),
'manage_options',
self::PAGE_ID,
[ $this, 'display_settings_page' ],
'',
99
);
}
/**
* Register Elementor Pro sub-menu.
*
* Add new Elementor Pro sub-menu under the main Elementor menu.
*
* Fired by `admin_menu` action.
*
* @since 1.0.0
* @access public
*/
public function register_pro_menu() {
add_submenu_page(
self::PAGE_ID,
__( 'Custom Fonts', 'elementor' ),
__( 'Custom Fonts', 'elementor' ),
'manage_options',
'elementor_custom_fonts',
[ $this, 'elementor_custom_fonts' ]
);
add_submenu_page(
self::PAGE_ID,
'',
'<span class="dashicons dashicons-star-filled" style="font-size: 17px"></span> ' . __( 'Go Pro', 'elementor' ),
'manage_options',
'go_elementor_pro',
[ $this, 'handle_external_redirects' ]
);
}
/**
* Register Elementor knowledge base sub-menu.
*
* Add new Elementor knowledge base sub-menu under the main Elementor menu.
*
* Fired by `admin_menu` action.
*
* @since 2.0.3
* @access public
*/
public function register_knowledge_base_menu() {
add_submenu_page(
self::PAGE_ID,
'',
__( 'Knowledge Base', 'elementor' ),
'manage_options',
'go_knowledge_base_site',
[ $this, 'handle_external_redirects' ]
);
}
/**
* Go Elementor Pro.
*
* Redirect the Elementor Pro page the clicking the Elementor Pro menu link.
*
* Fired by `admin_init` action.
*
* @since 2.0.3
* @access public
*/
public function handle_external_redirects() {
if ( empty( $_GET['page'] ) ) {
return;
}
if ( 'go_elementor_pro' === $_GET['page'] ) {
wp_redirect( Utils::get_pro_link( 'https://elementor.com/pro/?utm_source=wp-menu&utm_campaign=gopro&utm_medium=wp-dash' ) );
die;
}
if ( 'go_knowledge_base_site' === $_GET['page'] ) {
wp_redirect( 'https://go.elementor.com/docs-admin-menu/' );
die;
}
}
/**
* Display settings page.
*
* Output the content for the custom fonts page.
*
* @since 2.0.0
* @access public
*/
public function elementor_custom_fonts() {
?>
<div class="wrap">
<div class="elementor-blank_state">
<i class="eicon-nerd-chuckle"></i>
<h2><?php echo __( 'Add Your Custom Fonts', 'elementor' ); ?></h2>
<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>
<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>
</div>
</div><!-- /.wrap -->
<?php
}
/**
* On admin init.
*
* Preform actions on WordPress admin initialization.
*
* Fired by `admin_init` action.
*
* @since 2.0.0
* @access public
*/
public function on_admin_init() {
$this->handle_external_redirects();
// Save general settings in one list for a future usage
$this->handle_general_settings_update();
}
/**
* Change "Settings" menu name.
*
* Update the name of the Settings admin menu from "Elementor" to "Settings".
*
* Fired by `admin_menu` action.
*
* @since 1.0.0
* @access public
*/
public function admin_menu_change_name() {
global $submenu;
if ( isset( $submenu['elementor'] ) ) {
// @codingStandardsIgnoreStart
$submenu['elementor'][0][0] = __( 'Settings', 'elementor' );
$hold_menu_data = $submenu['elementor'][0];
$submenu['elementor'][0] = $submenu['elementor'][1];
$submenu['elementor'][1] = $hold_menu_data;
// @codingStandardsIgnoreEnd
}
}
/**
* Update CSS print method.
*
* Clear post CSS cache.
*
* Fired by `add_option_elementor_css_print_method` and
* `update_option_elementor_css_print_method` actions.
*
* @since 1.7.5
* @access public
*/
public function update_css_print_method() {
Plugin::$instance->files_manager->clear_cache();
}
/**
* Create tabs.
*
* Return the settings page tabs, sections and fields.
*
* @since 1.5.0
* @access protected
*
* @return array An array with the settings page tabs, sections and fields.
*/
protected function create_tabs() {
$validations_class_name = __NAMESPACE__ . '\Settings_Validations';
$default_breakpoints = Responsive::get_default_breakpoints();
return [
self::TAB_GENERAL => [
'label' => __( 'General', 'elementor' ),
'sections' => [
'general' => [
'fields' => [
self::UPDATE_TIME_FIELD => [
'full_field_id' => self::UPDATE_TIME_FIELD,
'field_args' => [
'type' => 'hidden',
],
'setting_args' => [
'sanitize_callback' => 'time',
],
],
'cpt_support' => [
'label' => __( 'Post Types', 'elementor' ),
'field_args' => [
'type' => 'checkbox_list_cpt',
'std' => [ 'page', 'post' ],
'exclude' => [ 'attachment', 'elementor_library' ],
],
'setting_args' => [ $validations_class_name, 'checkbox_list' ],
],
'disable_color_schemes' => [
'label' => __( 'Disable Default Colors', 'elementor' ),
'field_args' => [
'type' => 'checkbox',
'value' => 'yes',
'sub_desc' => __( 'Checking this box will disable Elementor\'s Default Colors, and make Elementor inherit the colors from your theme.', 'elementor' ),
],
],
'disable_typography_schemes' => [
'label' => __( 'Disable Default Fonts', 'elementor' ),
'field_args' => [
'type' => 'checkbox',
'value' => 'yes',
'sub_desc' => __( 'Checking this box will disable Elementor\'s Default Fonts, and make Elementor inherit the fonts from your theme.', 'elementor' ),
],
],
],
],
'usage' => [
'label' => __( 'Improve Elementor', 'elementor' ),
'fields' => [
'allow_tracking' => [
'label' => __( 'Usage Data Tracking', 'elementor' ),
'field_args' => [
'type' => 'checkbox',
'value' => 'yes',
'default' => '',
'sub_desc' => __( 'Opt-in to our anonymous plugin data collection and to updates. We guarantee no sensitive data is collected.', 'elementor' ) . sprintf( ' <a href="%1$s" target="_blank">%2$s</a>', 'https://go.elementor.com/usage-data-tracking/', __( 'Learn more.', 'elementor' ) ),
],
'setting_args' => [ __NAMESPACE__ . '\Tracker', 'check_for_settings_optin' ],
],
],
],
],
],
self::TAB_STYLE => [
'label' => __( 'Style', 'elementor' ),
'sections' => [
'style' => [
'fields' => [
'default_generic_fonts' => [
'label' => __( 'Default Generic Fonts', 'elementor' ),
'field_args' => [
'type' => 'text',
'std' => 'Sans-serif',
'class' => 'medium-text',
'desc' => __( 'The list of fonts used if the chosen font is not available.', 'elementor' ),
],
],
'container_width' => [
'label' => __( 'Content Width', 'elementor' ),
'field_args' => [
'type' => 'number',
'attributes' => [
'placeholder' => '1140',
'class' => 'medium-text',
],
'sub_desc' => 'px',
'desc' => __( 'Sets the default width of the content area (Default: 1140)', 'elementor' ),
],
],
'space_between_widgets' => [
'label' => __( 'Space Between Widgets', 'elementor' ),
'field_args' => [
'type' => 'number',
'attributes' => [
'placeholder' => '20',
'class' => 'medium-text',
],
'sub_desc' => 'px',
'desc' => __( 'Sets the default space between widgets (Default: 20)', 'elementor' ),
],
],
'stretched_section_container' => [
'label' => __( 'Stretched Section Fit To', 'elementor' ),
'field_args' => [
'type' => 'text',
'attributes' => [
'placeholder' => 'body',
'class' => 'medium-text',
],
'desc' => __( 'Enter parent element selector to which stretched sections will fit to (e.g. #primary / .wrapper / main etc). Leave blank to fit to page width.', 'elementor' ),
],
],
'page_title_selector' => [
'label' => __( 'Page Title Selector', 'elementor' ),
'field_args' => [
'type' => 'text',
'attributes' => [
'placeholder' => 'h1.entry-title',
'class' => 'medium-text',
],
'desc' => __( 'Elementor lets you hide the page title. This works for themes that have "h1.entry-title" selector. If your theme\'s selector is different, please enter it above.', 'elementor' ),
],
],
'viewport_lg' => [
'label' => __( 'Tablet Breakpoint', 'elementor' ),
'field_args' => [
'type' => 'number',
'attributes' => [
'placeholder' => $default_breakpoints['lg'],
'min' => $default_breakpoints['md'] + 1,
'max' => $default_breakpoints['xl'] - 1,
'class' => 'medium-text',
],
'sub_desc' => 'px',
'desc' => __( 'Sets the breakpoint between desktop and tablet devices. Below this breakpoint tablet layout will appear (Default: ' . $default_breakpoints['lg'] . ').', 'elementor' ),
],
],
'viewport_md' => [
'label' => __( 'Mobile Breakpoint', 'elementor' ),
'field_args' => [
'type' => 'number',
'attributes' => [
'placeholder' => $default_breakpoints['md'],
'min' => $default_breakpoints['sm'] + 1,
'max' => $default_breakpoints['lg'] - 1,
'class' => 'medium-text',
],
'sub_desc' => 'px',
'desc' => __( 'Sets the breakpoint between tablet and mobile devices. Below this breakpoint mobile layout will appear (Default: ' . $default_breakpoints['md'] . ').', 'elementor' ),
],
],
'global_image_lightbox' => [
'label' => __( 'Image Lightbox', 'elementor' ),
'field_args' => [
'type' => 'checkbox',
'value' => 'yes',
'std' => 'yes',
'sub_desc' => __( 'Open all image links in a lightbox popup window. The lightbox will automatically work on any link that leads to an image file.', 'elementor' ),
'desc' => __( 'You can customize the lightbox design by going to: Top-left hamburger icon > Global Settings > Lightbox.', 'elementor' ),
],
],
],
],
],
],
self::TAB_INTEGRATIONS => [
'label' => __( 'Integrations', 'elementor' ),
'sections' => [],
],
self::TAB_ADVANCED => [
'label' => __( 'Advanced', 'elementor' ),
'sections' => [
'advanced' => [
'fields' => [
'css_print_method' => [
'label' => __( 'CSS Print Method', 'elementor' ),
'field_args' => [
'class' => 'elementor_css_print_method',
'type' => 'select',
'options' => [
'external' => __( 'External File', 'elementor' ),
'internal' => __( 'Internal Embedding', 'elementor' ),
],
'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>',
],
],
'editor_break_lines' => [
'label' => __( 'Switch Editor Loader Method', 'elementor' ),
'field_args' => [
'type' => 'select',
'options' => [
'' => __( 'Disable', 'elementor' ),
1 => __( 'Enable', 'elementor' ),
],
'desc' => __( 'For troubleshooting server configuration conflicts.', 'elementor' ),
],
],
],
],
],
],
];
}
/**
* Get settings page title.
*
* Retrieve the title for the settings page.
*
* @since 1.5.0
* @access protected
*
* @return string Settings page title.
*/
protected function get_page_title() {
return __( 'Elementor', 'elementor' );
}
/**
* Handle general settings update.
*
* Save general settings in one list for a future usage.
*
* @since 2.0.0
* @access private
*/
private function handle_general_settings_update() {
if ( ! empty( $_POST['option_page'] ) && self::PAGE_ID === $_POST['option_page'] && ! empty( $_POST['action'] ) && 'update' === $_POST['action'] ) {
check_admin_referer( 'elementor-options' );
$saved_general_settings = get_option( General_Settings_Manager::META_KEY );
if ( ! $saved_general_settings ) {
$saved_general_settings = [];
}
$general_settings = Manager::get_settings_managers( 'general' )->get_model()->get_settings();
foreach ( $general_settings as $setting_key => $setting ) {
if ( ! empty( $_POST[ $setting_key ] ) ) {
$pure_setting_key = str_replace( 'elementor_', '', $setting_key );
$saved_general_settings[ $pure_setting_key ] = $_POST[ $setting_key ];
}
}
update_option( General_Settings_Manager::META_KEY, $saved_general_settings );
}
}
/**
* Settings page constructor.
*
* Initializing Elementor "Settings" page.
*
* @since 1.0.0
* @access public
*/
public function __construct() {
parent::__construct();
add_action( 'admin_init', [ $this, 'on_admin_init' ] );
add_action( 'admin_menu', [ $this, 'register_admin_menu' ], 20 );
add_action( 'admin_menu', [ $this, 'admin_menu_change_name' ], 200 );
add_action( 'admin_menu', [ $this, 'register_pro_menu' ], self::MENU_PRIORITY_GO_PRO );
add_action( 'admin_menu', [ $this, 'register_knowledge_base_menu' ], 501 );
// Clear CSS Meta after change print method.
add_action( 'add_option_elementor_css_print_method', [ $this, 'update_css_print_method' ] );
add_action( 'update_option_elementor_css_print_method', [ $this, 'update_css_print_method' ] );
foreach ( Responsive::get_editable_breakpoints() as $breakpoint_key => $breakpoint ) {
foreach ( [ 'add', 'update' ] as $action ) {
add_action( "{$action}_option_elementor_viewport_{$breakpoint_key}", [ 'Elementor\Responsive', 'compile_stylesheet_templates' ] );
}
}
}
}
Zerion Mini Shell 1.0