/** * Add language tabs to wpseo metabox ( .wpseo-metabox-tabs-div ) */ public static function action__wpseo_tab_content() { /** @global WP_Post $post */ global $post; $type = empty($post) ? '' : $post->post_type; if (WPGlobus::O()->disabled_entity($type)) { return; } $permalink = array(); if ('publish' === $post->post_status) { $permalink['url'] = get_permalink($post->ID); $permalink['action'] = 'complete'; } else { $permalink['url'] = trailingslashit(home_url()); $permalink['action'] = ''; } // #wpseo-metabox-tabs /** * Array of id to make multilingual */ $ids = array('wpseo-add-keyword-popup', 'wpseosnippet', 'snippet_preview', 'title_container', 'snippet_title', 'snippet_sitename', 'url_container', 'snippet_citeBase', 'snippet_cite', 'meta_container', 'snippet_meta', 'yoast_wpseo_focuskw_text_input', 'yoast_wpseo_focuskw', 'focuskwresults', 'yoast_wpseo_title', 'yoast_wpseo_metadesc', 'yoast_wpseo_linkdex', 'wpseo-pageanalysis', 'yoast-seo-content-analysis', 'YoastSEO-plugin-loading', 'snippet-editor-title', 'snippet-editor-slug', 'snippet-editor-meta-description'); $names = array('yoast_wpseo_focuskw_text_input', 'yoast_wpseo_focuskw', 'yoast_wpseo_title', 'yoast_wpseo_metadesc', 'yoast_wpseo_linkdex'); $qtip = array('snippetpreviewhelp', 'focuskw_text_inputhelp', 'pageanalysishelp', 'snippetpreview-help', 'focuskw_text_input-help', 'pageanalysis-help', 'snippetpreview-help-toggle', 'focuskw_text_input-help-toggle', 'pageanalysis-help-toggle'); ?> <div id="wpglobus-wpseo-tabs" style="width:90%; float:right;"> <?php /** * Use span with attributes 'data' for send to js script ids, names elements for which needs to be set new ids, names with language code. */ ?> <span id="wpglobus-wpseo-attr" data-ids="<?php echo esc_attr(implode(',', $ids)); ?> " data-names="<?php echo esc_attr(implode(',', $names)); ?> " data-qtip="<?php echo esc_attr(implode(',', $qtip)); ?> "> </span> <ul class="wpglobus-wpseo-tabs-list"> <?php $order = 0; foreach (WPGlobus::Config()->open_languages as $language) { ?> <li id="wpseo-link-tab-<?php echo esc_attr($language); ?> " data-language="<?php echo esc_attr($language); ?> " data-order="<?php echo esc_attr($order); ?> " class="wpglobus-wpseo-tab"><a href="#wpseo-tab-<?php echo $language; ?> "><?php echo esc_attr(WPGlobus::Config()->en_language_name[$language]); ?> </a> </li> <?php $order++; } ?> </ul> <?php /** * Get meta description */ $metadesc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true); /** * Get title */ $wpseotitle = get_post_meta($post->ID, '_yoast_wpseo_title', true); /** * From Yoast3 focus keyword key is '_yoast_wpseo_focuskw_text_input' */ $focuskw = get_post_meta($post->ID, '_yoast_wpseo_focuskw_text_input', true); /** * make yoast cite base */ list($yoast_permalink) = get_sample_permalink($post->ID); $yoast_permalink = str_replace(array('%pagename%', '%postname%'), '', urldecode($yoast_permalink)); /** * Set cite does not editable by default */ $cite_contenteditable = 'false'; foreach (WPGlobus::Config()->open_languages as $language) { $yoast_cite_base = WPGlobus_Utils::localize_url($yoast_permalink, $language); $yoast_cite_base = str_replace(array('http://', 'https://'), '', $yoast_cite_base); $yoast_cite_base = str_replace('//', '/', $yoast_cite_base); $permalink['url'] = WPGlobus_Utils::localize_url($permalink['url'], $language); $url = apply_filters('wpglobus_wpseo_permalink', $permalink['url'], $language); if ($url !== $permalink['url']) { /* We accept that user's filter make complete permalink for draft */ /* @todo maybe need more investigation */ $permalink['action'] = 'complete'; } else { if ('publish' !== $post->post_status) { /** * We cannot get post-name-full to make correct url here ( for draft & auto-draft ). We do it in JS * @see var wpseosnippet_url in wpglobus-wpseo-**.js */ $permalink['action'] = ''; } } ?> <div id="wpseo-tab-<?php echo $language; ?> " class="wpglobus-wpseo-general" data-language="<?php echo $language; ?> " data-url-<?php echo $language; ?> ="<?php echo esc_attr($url); ?> " data-yoast-cite-base="<?php echo esc_attr($yoast_cite_base); ?> " data-cite-contenteditable="<?php echo esc_attr($cite_contenteditable); ?> " data-permalink="<?php echo esc_attr($permalink['action']); ?> " data-metadesc="<?php echo esc_attr(WPGlobus_Core::text_filter($metadesc, $language, WPGlobus::RETURN_EMPTY)); ?> " data-wpseotitle="<?php echo esc_attr(WPGlobus_Core::text_filter($wpseotitle, $language, WPGlobus::RETURN_EMPTY)); ?> " data-focuskw="<?php echo esc_attr(WPGlobus_Core::text_filter($focuskw, $language, WPGlobus::RETURN_EMPTY)); ?> "> </div> <?php } ?> </div> <?php }
/** * Add language tabs to wpseo metabox ( .wpseo-metabox-tabs-div ) */ public static function action__wpseo_tab_content() { /** @global WP_Post $post */ global $post; $type = empty($post) ? '' : $post->post_type; if (WPGlobus::O()->disabled_entity($type)) { return; } $permalink = array(); if ('publish' == $post->post_status) { $permalink['url'] = get_permalink($post->ID); $permalink['action'] = 'complete'; } else { $permalink['url'] = trailingslashit(home_url()); $permalink['action'] = ''; } ?> <div id="wpglobus-wpseo-tabs"> <?php /** * Use span with attributes 'data' for send to js script ids, names elements for which needs to be set new ids, names with language code. */ ?> <span id="wpglobus-wpseo-attr" data-ids="wpseosnippet,wpseosnippet_title,yoast_wpseo_focuskw,focuskwresults,yoast_wpseo_title,yoast_wpseo_title-length-warning,yoast_wpseo_metadesc,yoast_wpseo_metadesc-length,yoast_wpseo_metadesc_notice" data-names="yoast_wpseo_focuskw,yoast_wpseo_title,yoast_wpseo_metadesc" data-qtip="snippetpreviewhelp,focuskwhelp,titlehelp,metadeschelp"> </span> <ul class="wpglobus-wpseo-tabs-list"> <?php $order = 0; foreach (WPGlobus::Config()->open_languages as $language) { ?> <li id="wpseo-link-tab-<?php echo $language; ?> " data-language="<?php echo $language; ?> " data-order="<?php echo $order; ?> " class="wpglobus-wpseo-tab"><a href="#wpseo-tab-<?php echo $language; ?> "><?php echo WPGlobus::Config()->en_language_name[$language]; ?> </a> </li> <?php $order++; } ?> </ul> <?php $metadesc = get_post_meta($post->ID, '_yoast_wpseo_metadesc', true); $wpseotitle = get_post_meta($post->ID, '_yoast_wpseo_title', true); $focuskw = get_post_meta($post->ID, '_yoast_wpseo_focuskw', true); foreach (WPGlobus::Config()->open_languages as $language) { $permalink['url'] = WPGlobus_Utils::localize_url($permalink['url'], $language); $url = apply_filters('wpglobus_wpseo_permalink', $permalink['url'], $language); if ($url != $permalink['url']) { /* We accept that user's filter make complete permalink for draft */ /* @todo maybe need more investigation */ $permalink['action'] = 'complete'; } else { if ('publish' != $post->post_status) { /** * We cannot get post-name-full to make correct url here ( for draft & auto-draft ). We do it in JS * @see var wpseosnippet_url in wpglobus-wpseo-**.js */ $permalink['action'] = ''; } } ?> <div id="wpseo-tab-<?php echo $language; ?> " class="wpglobus-wpseo-general" data-language="<?php echo $language; ?> " data-url-<?php echo $language; ?> ="<?php echo $url; ?> " data-permalink="<?php echo $permalink['action']; ?> " data-metadesc="<?php echo esc_html(WPGlobus_Core::text_filter($metadesc, $language, WPGlobus::RETURN_EMPTY)); ?> " data-wpseotitle="<?php echo esc_html(WPGlobus_Core::text_filter($wpseotitle, $language, WPGlobus::RETURN_EMPTY)); ?> " data-focuskw="<?php echo WPGlobus_Core::text_filter($focuskw, $language, WPGlobus::RETURN_EMPTY); ?> "> </div> <?php } ?> </div> <?php }
/** * 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']; }