/** * Constructor */ public function __construct() { $nav_menus = WPGlobus::_get_nav_menus(); foreach ($nav_menus as $menu) { $this->menus[$menu->slug] = $menu->name; } if (!empty($nav_menus) && count($nav_menus) > 1) { $this->menus['all'] = 'All'; } add_action('init', array($this, 'initSettings')); /** remove redux menu under the tools **/ add_action('admin_menu', array($this, 'remove_redux_menu'), 12); }
/** * Callback for customize_register * * @param WP_Customize_Manager $wp_customize */ public static function action__customize_register(WP_Customize_Manager $wp_customize) { /** * WPGlobus panel */ $wp_customize->add_panel('wpglobus_settings_panel', array('priority' => 1010, 'capability' => 'edit_theme_options', 'theme_supports' => '', 'title' => __('WPGlobus Settings', 'wpglobus'), 'description' => '<div style="background-color:#eee;padding:10px 5px;">' . self::get_content('welcome_message') . '</div>' . self::get_content('deactivate_message'))); if (!self::is_theme_enabled()) { self::sorry_section($wp_customize, self::$theme); return; } /** wpglobus_customize_language_selector_mode <=> wpglobus_option[show_flag_name] */ update_option('wpglobus_customize_language_selector_mode', WPGlobus::Config()->show_flag_name); /** */ if (empty(WPGlobus::Config()->nav_menu)) { delete_option('wpglobus_customize_language_selector_menu'); } else { update_option('wpglobus_customize_language_selector_menu', WPGlobus::Config()->nav_menu); } /** wpglobus_customize_selector_wp_list_pages <=> wpglobus_option[selector_wp_list_pages][show_selector] */ update_option('wpglobus_customize_selector_wp_list_pages', WPGlobus::Config()->selector_wp_list_pages); /** wpglobus_customize_css_editor <=> wpglobus_option[css_editor] */ update_option('wpglobus_customize_css_editor', WPGlobus::Config()->css_editor); /** * SECTION: Language */ if (1) { $wp_customize->add_section('wpglobus_languages_section', array('title' => __('Languages', 'wpglobus'), 'priority' => 10, 'panel' => 'wpglobus_settings_panel')); self::$sections['wpglobus_languages_section'] = 'wpglobus_languages_section'; /** Enabled languages */ $wp_customize->add_setting('wpglobus_customize_enabled_languages', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $wp_customize->add_control(new WPGlobusCheckBoxSet($wp_customize, 'wpglobus_customize_enabled_languages', array('section' => 'wpglobus_languages_section', 'settings' => 'wpglobus_customize_enabled_languages', 'priority' => 0, 'items' => WPGlobus::Config()->enabled_languages, 'label' => __('Enabled Languages', 'wpglobus'), 'checkbox_class' => 'wpglobus-listen-change wpglobus-language-item', 'description' => __('These languages are currently enabled on your site.', 'wpglobus')))); self::$settings['wpglobus_languages_section']['wpglobus_customize_enabled_languages']['type'] = 'checkbox_set'; /** @see option wpglobus_option['enabled_languages'] */ self::$settings['wpglobus_languages_section']['wpglobus_customize_enabled_languages']['option'] = 'enabled_languages'; /** Add languages */ /** Generate array $more_languages */ /** @var array $more_languages */ $more_languages = array(); $more_languages['select'] = '---- select ----'; foreach (WPGlobus::Config()->flag as $code => $file) { if (!in_array($code, WPGlobus::Config()->enabled_languages)) { $lang_in_en = ''; if (!empty(WPGlobus::Config()->en_language_name[$code])) { $lang_in_en = ' (' . WPGlobus::Config()->en_language_name[$code] . ')'; } // '<img src="' . WPGlobus::Config()->flags_url . $file . '" />' $more_languages[$code] = WPGlobus::Config()->language_name[$code] . $lang_in_en; } } $desc_add_languages = __('Choose a language you would like to enable. <br>Press the [Save & Publish] button to confirm.', 'wpglobus') . '<br />'; // translators: %1$s and %2$s - placeholders to insert HTML link around 'here' $desc_add_languages .= sprintf(__('or Add new Language %1$s here %2$s', 'wpglobus'), '<a style="text-decoration:underline;" href="' . admin_url() . 'admin.php?page=' . WPGlobus::LANGUAGE_EDIT_PAGE . '&action=add" target="_blank">', '</a>'); $wp_customize->add_setting('wpglobus_customize_add_language', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $wp_customize->add_control('wpglobus_add_languages_select_box', array('settings' => 'wpglobus_customize_add_language', 'label' => __('Add Languages', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'select', 'priority' => 10, 'choices' => $more_languages, 'description' => $desc_add_languages)); //self::$settings[ 'wpglobus_languages_section' ][ 'wpglobus_customize_add_language' ] = 'select'; /** Language Selector Mode */ $wp_customize->add_setting('wpglobus_customize_language_selector_mode', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'refresh')); $wp_customize->add_control('wpglobus_customize_language_selector_mode', array('settings' => 'wpglobus_customize_language_selector_mode', 'label' => __('Language Selector Mode', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'select', 'priority' => 20, 'choices' => array('code' => __('Two-letter Code with flag (en, ru, it, etc.)', 'wpglobus'), 'full_name' => __('Full Name (English, Russian, Italian, etc.)', 'wpglobus'), 'name' => __('Full Name with flag (English, Russian, Italian, etc.)', 'wpglobus'), 'empty' => __('Flags only', 'wpglobus')), 'description' => __('Choose the way language name and country flag are shown in the drop-down menu', 'wpglobus'))); self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_mode']['type'] = 'select'; /** @see option wpglobus_option['show_flag_name'] */ self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_mode']['option'] = 'show_flag_name'; /** * @see https://make.wordpress.org/core/2016/03/22/implementing-selective-refresh-support-for-widgets/ * @see https://make.wordpress.org/core/2016/03/10/customizer-improvements-in-4-5/ * * $wp_customize->selective_refresh->add_partial( 'wpglobus_customize_language_selector_mode', array( * 'selector' => '#site-navigation', * 'render_callback' => function() { * wp_nav_menu(); * }, * ) ); * // */ /** Language Selector Menu */ /** @var array $nav_menus */ $nav_menus = WPGlobus::_get_nav_menus(); $menus = array(); foreach ($nav_menus as $menu) { $menus[$menu->slug] = $menu->name; } if (!empty($nav_menus) && count($nav_menus) > 1) { $menus['all'] = 'All'; } if (empty($menus)) { $wp_customize->add_control(new WPGlobusLink($wp_customize, 'wpglobus_customize_language_selector_menu', array('section' => 'wpglobus_languages_section', 'title' => esc_html__('Language Selector Menu', 'wpglobus'), 'settings' => array(), 'priority' => 30, 'type' => 'wpglobus_link', 'href' => esc_attr('javascript: wp.customize.panel( "nav_menus" ).focus();'), 'text' => esc_html__('No menus have been created yet. Create some.', 'wpglobus'), 'description' => esc_html__('Choose the navigation menu where the language selector will be shown', 'wpglobus')))); self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['type'] = 'wpglobus_link'; self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['option'] = array(); } else { $wp_customize->add_setting('wpglobus_customize_language_selector_menu', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $wp_customize->add_control('wpglobus_customize_language_selector_menu', array('settings' => 'wpglobus_customize_language_selector_menu', 'label' => esc_html__('Language Selector Menu', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'select', 'priority' => 30, 'choices' => $menus, 'description' => esc_html__('Choose the navigation menu where the language selector will be shown', 'wpglobus'))); self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['type'] = 'select'; /** @see option wpglobus_option['use_nav_menu'] */ self::$settings['wpglobus_languages_section']['wpglobus_customize_language_selector_menu']['option'] = 'use_nav_menu'; } /** "All Pages" menus Language selector */ $wp_customize->add_setting('wpglobus_customize_selector_wp_list_pages', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $wp_customize->add_control(new WPGlobusCheckBox($wp_customize, 'wpglobus_customize_selector_wp_list_pages', array('settings' => 'wpglobus_customize_selector_wp_list_pages', 'title' => __('"All Pages" menus Language selector', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'priority' => 40, 'label' => __('Adds language selector to the menus that automatically list all existing pages (using `wp_list_pages`)', 'wpglobus')))); self::$settings['wpglobus_languages_section']['wpglobus_customize_selector_wp_list_pages']['type'] = 'wpglobus_checkbox'; /** @see option wpglobus_option['selector_wp_list_pages']['show_selector'] */ self::$settings['wpglobus_languages_section']['wpglobus_customize_selector_wp_list_pages']['option'] = 'show_selector'; /** Custom CSS */ $wp_customize->add_setting('wpglobus_customize_css_editor', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $wp_customize->add_control('wpglobus_customize_css_editor', array('settings' => 'wpglobus_customize_css_editor', 'label' => __('Custom CSS', 'wpglobus'), 'section' => 'wpglobus_languages_section', 'type' => 'textarea', 'priority' => 50, 'description' => __('Here you can enter the CSS rules to adjust the language selector menu for your theme. Look at the examples in the `style-samples.css` file.', 'wpglobus'))); self::$settings['wpglobus_languages_section']['wpglobus_customize_css_editor']['type'] = 'textarea'; /** @see option wpglobus_option['css_editor'] */ self::$settings['wpglobus_languages_section']['wpglobus_customize_css_editor']['option'] = 'css_editor'; } /** end SECTION: Language */ /** * SECTION: Post types */ if (1) { $section = 'wpglobus_post_types_section'; $wp_customize->add_section($section, array('title' => __('Post types', 'wpglobus'), 'priority' => 40, 'panel' => 'wpglobus_settings_panel')); self::$sections[$section] = $section; if (false === ($enabled_post_types = get_transient(self::$enabled_post_types_key))) { $post_types = get_post_types(); $enabled_post_types = array(); foreach ($post_types as $post_type) { if (!in_array($post_type, array('attachment', 'revision', 'nav_menu_item'), true)) { if (in_array($post_type, array('post', 'page'))) { $enabled_post_types[$post_type] = $post_type; continue; } foreach (WPGlobus::O()->vendors_scripts as $script => $status) { if (empty($status)) { continue; } if ($script == 'ACF' || $script == 'ACFPRO') { /** * get list @see class-wpglobus.php:145 */ if (in_array($post_type, array('acf-field-group', 'acf-field', 'acf'))) { continue 2; } } if ($script == 'WOOCOMMERCE') { /** * get list @see class-wpglobus.php:171 */ if (in_array($post_type, array('product', 'product_tag', 'product_cat', 'shop_order', 'shop_coupon', 'product_variation', 'shop_order_refund', 'shop_webhook'))) { continue 2; } } if ($script == 'WPCF7') { /** * get list @see class-wpglobus.php:195 */ if (in_array($post_type, array('wpcf7_contact_form'))) { continue 2; } } } $enabled_post_types[$post_type] = $post_type; } } set_transient(self::$enabled_post_types_key, $enabled_post_types, 60); } foreach ($enabled_post_types as $post_type) { $status = ''; if (isset(WPGlobus::Config()->extended_options['post_type'][$post_type])) { if (WPGlobus::Config()->extended_options['post_type'][$post_type] == 1) { $status = '1'; } } else { $status = '1'; } update_option('wpglobus_customize_post_type_' . $post_type, $status); } $i = 0; foreach ($enabled_post_types as $post_type) { $pst = 'wpglobus_customize_post_type_' . $post_type; $wp_customize->add_setting($pst, array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $title = ''; if ($i == 0) { $title = __('Uncheck to disable WPGlobus', 'wpglobus'); } $wp_customize->add_control(new WPGlobusCheckBox($wp_customize, $pst, array('settings' => $pst, 'title' => $title, 'label' => $post_type, 'section' => $section, 'priority' => 10))); $i++; self::$settings[$section][$pst]['type'] = 'wpglobus_checkbox'; /** @see option wpglobus_option['post_type'] */ self::$settings[$section][$pst]['option'] = 'post_type'; } } /** end SECTION: Post types */ /** * SECTION: Add ons */ if (1) { global $wp_version; self::$sections['wpglobus_addons_section'] = 'wpglobus_addons_section'; if (version_compare($wp_version, '4.5-RC1', '<')) { $wp_customize->add_section(self::$sections['wpglobus_addons_section'], array('title' => __('Add-ons', 'wpglobus'), 'priority' => 40, 'panel' => 'wpglobus_settings_panel')); /** Add ons setting */ $wp_customize->add_setting('wpglobus_customize_add_ons', array('type' => 'option', 'capability' => 'manage_options', 'transport' => 'postMessage')); $wp_customize->add_control(new WPGlobusCheckBox($wp_customize, 'wpglobus_customize_add_ons', array('settings' => 'wpglobus_customize_add_ons', 'title' => __('Title', 'wpglobus'), 'label' => __('Label', 'wpglobus'), 'section' => self::$sections['wpglobus_addons_section'], 'type' => 'checkbox', 'priority' => 10, 'description' => __('Description', 'wpglobus')))); } else { /** * Changes in WP 4.5 * @link https://make.wordpress.org/core/2016/03/10/customizer-improvements-in-4-5/ */ $wp_customize->add_section(self::$sections['wpglobus_addons_section'], array('title' => __('Add-ons', 'wpglobus'), 'priority' => 40, 'panel' => 'wpglobus_settings_panel')); $wp_customize->add_control('wpglobus_customize_add_ons', array('section' => self::$sections['wpglobus_addons_section'], 'settings' => array(), 'type' => 'button')); } } /** end SECTION: Add ons */ /** * Fires to add customize settings. * * @since 1.4.6 * * @param WP_Customize_Manager $wp_customize The WP Customize Manager. */ do_action('wpglobus_customize_register', $wp_customize); /** @var array $res */ $res = apply_filters('wpglobus_customize_data', array('sections' => self::$sections, 'settings' => self::$settings)); self::$sections = $res['sections']; self::$settings = $res['settings']; }