/** * Support for Yoast SEO */ require_once dirname(__FILE__) . '/includes/wpglobus-yoastseo.php'; /** * Support of theme option panels and customizer * @since 1.4.0 */ require_once dirname(__FILE__) . '/includes/class-wpglobus-customize140.php'; WPGlobus_Customize::controller(); /** * WPGlobus customize options * @since 1.4.6 */ require_once dirname(__FILE__) . '/includes/admin/class-wpglobus-customize-options.php'; WPGlobus_Customize_Options::controller(); // TODO remove this old updater. require_once dirname(__FILE__) . '/updater/class-wpglobus-updater.php'; /** * TIVWP Updater. * * @since 1.5.9 */ if (version_compare(PHP_VERSION, '5.3.0', '>=') && file_exists(dirname(__FILE__) . '/vendor/tivwp/updater/updater.php')) { require_once dirname(__FILE__) . '/vendor/tivwp/updater/updater.php'; } /** * In admin area */ if (WPGlobus_WP::in_wp_admin()) { /**
/** * Load Customize Control JS */ public static function action__customize_controls_enqueue_scripts() { /** * @see wp.customize.control elements * for example wp.customize.control('blogname'); */ $disabled_setting_mask = array(); /** navigation menu elements */ $disabled_setting_mask[] = 'nav_menu_item'; $disabled_setting_mask[] = 'nav_menu['; $disabled_setting_mask[] = 'nav_menu_locations'; $disabled_setting_mask[] = 'new_menu_name'; /** widgets */ $disabled_setting_mask[] = 'widgets'; /** color elements */ $disabled_setting_mask[] = 'color'; /** yoast seo */ $disabled_setting_mask[] = 'wpseo'; /** css elements */ $disabled_setting_mask[] = 'css'; /** social networks elements */ $disabled_setting_mask[] = 'facebook'; $disabled_setting_mask[] = 'twitter'; $disabled_setting_mask[] = 'linkedin'; $disabled_setting_mask[] = 'behance'; $disabled_setting_mask[] = 'dribbble'; $disabled_setting_mask[] = 'instagram'; /** since 1.4.4 */ $disabled_setting_mask[] = 'tumblr'; $disabled_setting_mask[] = 'flickr'; $disabled_setting_mask[] = 'wordpress'; $disabled_setting_mask[] = 'youtube'; $disabled_setting_mask[] = 'pinterest'; $disabled_setting_mask[] = 'github'; $disabled_setting_mask[] = 'rss'; $disabled_setting_mask[] = 'google'; $disabled_setting_mask[] = 'email'; /** since 1.5.9 */ $disabled_setting_mask[] = 'dropbox'; $disabled_setting_mask[] = 'foursquare'; $disabled_setting_mask[] = 'vine'; $disabled_setting_mask[] = 'vimeo'; /** since 1.6.0 */ $disabled_setting_mask[] = 'yelp'; /** * Filter to disable fields in customizer. * @see wp.customize.control elements * Returning array. * @since 1.4.0 * * @param array $disabled_setting_mask An array of disabled masks. */ $disabled_setting_mask = apply_filters('wpglobus_customize_disabled_setting_mask', $disabled_setting_mask); $element_selector = array('input[type=text]', 'textarea'); /** * Filter for element selectors. * Returning array. * @since 1.4.0 * * @param array $element_selector An array of selectors. */ $element_selector = apply_filters('wpglobus_customize_element_selector', $element_selector); $set_link_by = array('link', 'url'); /** * Filter of masks to determine links. * @see value data-customize-setting-link of element * Returning array. * @since 1.4.0 * * @param array $set_link_by An array of masks. */ $set_link_by = apply_filters('wpglobus_customize_setlinkby', $set_link_by); /** * Filter of disabled sections. * * Returning array. * @since 1.5.0 * * @param array $disabled_sections An array of sections. */ $disabled_sections = array(); $disabled_sections = apply_filters('wpglobus_customize_disabled_sections', $disabled_sections); /** * Generate language select button for customizer * @since 1.6.0 */ $attributes['href'] = '#'; $attributes['style'] = 'margin-left:48px;'; $attributes['class'] = 'customize-controls-close wpglobus-customize-selector'; /** * Filter of attributes to generate language selector button. * For example @see Divi theme http://www.elegantthemes.com/gallery/divi/ . * * Returning array. * @since 1.6.0 * * @param array $attributes An array of attributes. * @param string Name of current theme. */ $attributes = apply_filters('wpglobus_customize_language_selector_attrs', $attributes, WPGlobus_Customize_Options::get_theme('name')); $string = ''; foreach ($attributes as $attribute => $value) { if (null !== $value) { $string .= esc_attr($attribute) . '="' . esc_attr($value) . '" '; } } $selector_button = sprintf('<a %1$s>%2$s</a>', trim($string), '<span class="wpglobus-globe"></span>'); wp_enqueue_script('wpglobus-customize-control140', WPGlobus::$PLUGIN_DIR_URL . 'includes/js/wpglobus-customize-control140' . WPGlobus::SCRIPT_SUFFIX() . '.js', array('jquery'), WPGLOBUS_VERSION, true); wp_localize_script('wpglobus-customize-control140', 'WPGlobusCustomize', array('version' => WPGLOBUS_VERSION, 'selectorButton' => $selector_button, 'languageAdmin' => WPGlobus::Config()->language, 'disabledSettingMask' => $disabled_setting_mask, 'elementSelector' => $element_selector, 'setLinkBy' => $set_link_by, 'disabledSections' => $disabled_sections, 'controlClass' => 'wpglobus-customize-control')); }
/** * 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']; }