static function _st_warnings()
 {
     if (!class_exists('ICL_AdminNotifier')) {
         return;
     }
     global $sitepress, $sitepress_settings;
     if (!isset($sitepress)) {
         return;
     }
     if (method_exists($sitepress, 'check_settings_integrity') && !SitePress::check_settings_integrity()) {
         return;
     }
     if (!isset($sitepress_settings['st']['strings_language'])) {
         $sitepress_settings = $sitepress->get_settings();
     }
     if (isset($sitepress_settings['st']['strings_language'])) {
         if ($sitepress->get_default_language() != $sitepress_settings['st']['strings_language']) {
             self::_st_default_language_warning();
         } elseif ($sitepress_settings['st']['strings_language'] != 'en') {
             self::_st_default_and_st_language_warning();
         } else {
             ICL_AdminNotifier::removeMessage('_st_default_and_st_language_warning');
             ICL_AdminNotifier::removeMessage('_st_default_language_warning');
         }
     }
 }
Ejemplo n.º 2
0
 function admin_language_switcher()
 {
     if (!SitePress::check_settings_integrity()) {
         return;
     }
     /** @var $wp_admin_bar WP_Admin_Bar */
     global $wpdb, $wp_admin_bar, $pagenow, $mode;
     $all_languages_enabled = true;
     $current_page = basename($_SERVER['SCRIPT_NAME']);
     $post_type = false;
     $trid = false;
     $translations = false;
     $languages_links = array();
     // individual translations
     $is_post = false;
     $is_tax = false;
     $is_menu = false;
     $current_language = $this->get_current_language();
     switch ($pagenow) {
         case 'post.php':
             $is_post = true;
             $post_id = @intval($_GET['post']);
             $post = get_post($post_id);
             $post_language = $this->get_language_for_element($post_id, 'post_' . get_post_type($post_id));
             if ($post_language && $post_language != $current_language) {
                 $this->switch_lang($post_language);
                 $current_language = $this->get_current_language();
             }
             $trid = $this->get_element_trid($post_id, 'post_' . $post->post_type);
             $translations = $this->get_element_translations($trid, 'post_' . $post->post_type, true);
             break;
         case 'post-new.php':
             $all_languages_enabled = false;
             if (isset($_GET['trid'])) {
                 $trid = intval($_GET['trid']);
                 $post_type = isset($_GET['post_type']) ? $_GET['post_type'] : 'post';
                 $translations = $this->get_element_translations($trid, 'post_' . $post_type, true);
                 $is_post = true;
             }
             break;
         case 'edit-tags.php':
             $is_tax = true;
             if (isset($_GET['action']) && $_GET['action'] == 'edit') {
                 $all_languages_enabled = false;
             }
             $taxonomy = $_GET['taxonomy'];
             $term_tax_id = 0;
             if (isset($_GET['tag_ID'])) {
                 $term_id = @intval($_GET['tag_ID']);
                 $term_tax_id = $wpdb->get_var($wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE taxonomy=%s AND term_id=%d", $taxonomy, $term_id));
             }
             if ($term_tax_id) {
                 $trid = $this->get_element_trid($term_tax_id, 'tax_' . $taxonomy);
             }
             if ($trid) {
                 $translations = $this->get_element_translations($trid, 'tax_' . $taxonomy, true);
             }
             break;
         case 'nav-menus.php':
             $is_menu = true;
             if (isset($_GET['menu']) && $_GET['menu']) {
                 $menu_id = $_GET['menu'];
                 $trid = $trid = $this->get_element_trid($menu_id, 'tax_nav_menu');
                 $translations = $this->get_element_translations($trid, 'tax_nav_menu', true);
             }
             $all_languages_enabled = false;
             break;
         case 'upload.php':
             if ($mode == 'grid') {
                 $all_languages_enabled = false;
             }
             break;
     }
     foreach ($this->get_active_languages() as $lang) {
         $current_page_lang = $current_page;
         if (isset($_SERVER['QUERY_STRING'])) {
             parse_str($_SERVER['QUERY_STRING'], $query_vars);
             unset($query_vars['lang'], $query_vars['admin_bar']);
         } else {
             $query_vars = array();
         }
         // individual translations
         if ($is_post) {
             if (isset($translations[$lang['code']]) && isset($translations[$lang['code']]->element_id)) {
                 $query_vars['post'] = $translations[$lang['code']]->element_id;
                 unset($query_vars['source_lang']);
                 $current_page_lang = 'post.php';
                 $query_vars['action'] = 'edit';
             } else {
                 $current_page_lang = 'post-new.php';
                 if (isset($post)) {
                     $query_vars['post_type'] = $post->post_type;
                     $query_vars['source_lang'] = $current_language;
                 } else {
                     $query_vars['post_type'] = $post_type;
                 }
                 $query_vars['trid'] = $trid;
                 unset($query_vars['post'], $query_vars['action']);
             }
         } elseif ($is_tax) {
             if (isset($translations[$lang['code']]) && isset($translations[$lang['code']]->element_id)) {
                 $query_vars['tag_ID'] = $translations[$lang['code']]->element_id;
             } else {
                 $query_vars['trid'] = $trid;
                 $query_vars['source_lang'] = $current_language;
                 unset($query_vars['tag_ID'], $query_vars['action']);
             }
         } elseif ($is_menu) {
             if (!empty($menu_id)) {
                 if (isset($translations[$lang['code']]->element_id)) {
                     $query_vars['menu'] = $translations[$lang['code']]->element_id;
                 } else {
                     $query_vars['menu'] = 0;
                     $query_vars['trid'] = $trid;
                     $query_vars['action'] = 'edit';
                 }
             }
         }
         $query_string = http_build_query($query_vars);
         $query = '?';
         if (!empty($query_string)) {
             $query .= $query_string . '&';
         }
         $query .= 'lang=' . $lang['code'];
         // the default language need to specified explicitly yoo in order to set the lang cookie
         $link_url = admin_url($current_page_lang . $query);
         $flag = $this->get_flag($lang['code']);
         if ($flag->from_template) {
             $wp_upload_dir = wp_upload_dir();
             $flag_url = $wp_upload_dir['baseurl'] . '/flags/' . $flag->flag;
         } else {
             $flag_url = ICL_PLUGIN_URL . '/res/flags/' . $flag->flag;
         }
         $languages_links[$lang['code']] = array('url' => $link_url . '&admin_bar=1', 'current' => $lang['code'] == $current_language, 'anchor' => $lang['display_name'], 'flag' => '<img class="icl_als_iclflag" src="' . $flag_url . '" alt="' . $lang['code'] . '" width="18" height="12" />');
     }
     if ($all_languages_enabled) {
         $query = '?';
         if (!empty($query_string)) {
             $query .= $query_string . '&';
         }
         $query .= 'lang=all';
         $link_url = admin_url(basename($_SERVER['SCRIPT_NAME']) . $query);
         $languages_links['all'] = array('url' => $link_url, 'current' => 'all' == $current_language, 'anchor' => __('All languages', 'sitepress'), 'flag' => '<img class="icl_als_iclflag" src="' . ICL_PLUGIN_URL . '/res/img/icon16.png" alt="all" width="16" height="16" />');
     } else {
         // set the default language as current
         if ('all' == $current_language) {
             $current_language = $this->get_default_language();
             $languages_links[$current_language]['current'] = true;
         }
     }
     $parent = 'WPML_ALS';
     $lang = $languages_links[$current_language];
     // Current language
     $wp_admin_bar->add_menu(array('parent' => false, 'id' => $parent, 'title' => $lang['flag'] . '&nbsp;' . $lang['anchor'] . '&nbsp;&nbsp;<img title="' . __('help', 'sitepress') . '" id="wpml_als_help_link" src="' . ICL_PLUGIN_URL . '/res/img/question1.png" alt="' . __('help', 'sitepress') . '" width="16" height="16"/>', 'href' => false, 'meta' => array('title' => __('Showing content in:', 'sitepress') . ' ' . $lang['anchor'])));
     if ($languages_links) {
         foreach ($languages_links as $code => $lang) {
             if ($code == $current_language) {
                 continue;
             }
             $wp_admin_bar->add_menu(array('parent' => $parent, 'id' => $parent . '_' . $code, 'title' => $lang['flag'] . '&nbsp;' . $lang['anchor'], 'href' => $lang['url'], 'meta' => array('title' => __('Show content in:', 'sitepress') . ' ' . $lang['anchor'])));
         }
     }
     add_action('all_admin_notices', array($this, '_admin_language_switcher_help_popup'));
 }
Ejemplo n.º 3
0
    /**
     * echo simple language switcher for WPML, 'sitepress' is used as plugin translation domain
     */
    function admin_language_switcher()
    {
        // do nothing if WPML is not active
        if (!class_exists('SitePress')) {
            return;
        }
        // If check_settings_integrity exists then it should not fail, otherwise ignore.
        if (method_exists('SitePress', 'check_settings_integrity') && !SitePress::check_settings_integrity()) {
            return;
        }
        global $sitepress;
        // We need those methods, so make sure they are available.
        if (!method_exists($sitepress, 'get_current_language') || !method_exists($sitepress, 'get_default_language') || !method_exists($sitepress, 'get_active_languages')) {
            return;
        }
        $languages_links = array();
        $current_language = $sitepress->get_current_language();
        $current_language = $current_language ? $current_language : $sitepress->get_default_language();
        if (isset($_SERVER['QUERY_STRING'])) {
            parse_str($_SERVER['QUERY_STRING'], $query_vars);
            unset($query_vars['lang'], $query_vars['admin_bar']);
        } else {
            $query_vars = array();
        }
        $query_string = http_build_query($query_vars);
        if (empty($query_string)) {
            $query_string = '?';
        } else {
            $query_string = '?' . $query_string . '&';
        }
        foreach ($sitepress->get_active_languages() as $lang) {
            $query = $query_string . 'lang=' . $lang['code'];
            // the default language need to specified explicitly yoo in order to set the lang cookie
            $link_url = admin_url(basename($_SERVER['SCRIPT_NAME']) . $query);
            $languages_links[$lang['code']] = array('url' => $link_url, 'current' => $lang['code'] == $current_language, 'anchor' => $lang['display_name']);
        }
        $query = $query_string . 'lang=all';
        $link_url = admin_url(basename($_SERVER['SCRIPT_NAME']) . $query);
        $languages_links['all'] = array('url' => $link_url, 'current' => 'all' == $current_language, 'anchor' => __('All languages', 'sitepress'));
        // We start with the current language in our select.
        $lang = $languages_links[$current_language];
        if ($languages_links) {
            ?>
<select onchange="window.location=this.value" style="margin: 0 0 0 20px;">
<option value="<?php 
            echo esc_url($lang['url']);
            ?>
"><?php 
            echo $lang['anchor'];
            ?>
</option>
<?php 
            foreach ($languages_links as $code => $lang) {
                if ($code == $current_language) {
                    continue;
                }
                ?>
                <option value="<?php 
                echo esc_url($lang['url']);
                ?>
"><?php 
                echo $lang['anchor'];
                ?>
</option>
                <?php 
            }
            ?>
</select>
<?php 
        }
    }
Ejemplo n.º 4
0
 function administration_menu2()
 {
     if (!SitePress::check_settings_integrity()) {
         return;
     }
     $main_page = apply_filters('icl_menu_main_page', ICL_PLUGIN_FOLDER . '/menu/languages.php');
     if ($this->setup()) {
         add_submenu_page($main_page, __('Taxonomy Translation', 'sitepress'), __('Taxonomy Translation', 'sitepress'), 'wpml_manage_taxonomy_translation', ICL_PLUGIN_FOLDER . '/menu/taxonomy-translation.php');
     }
 }
Ejemplo n.º 5
0
 function get_ls_languages($template_args = array())
 {
     //Returns false if is admin and settings are corrupted
     if (is_admin() && !SitePress::check_settings_integrity()) {
         return false;
     }
     /** @var $wp_query WP_Query */
     global $wpdb, $wp_query, $w_this_lang, $wpml_post_translations;
     $current_language = $this->get_current_language();
     $default_language = $this->get_default_language();
     $cache_key_args = $template_args ? array_filter($template_args) : array('default');
     $cache_key_args[] = $current_language;
     $cache_key_args[] = $default_language;
     $cache_key_args = array_filter($cache_key_args);
     $cache_key = md5(wp_json_encode($cache_key_args));
     $cache_group = 'ls_languages';
     $found = false;
     $ls_languages = wp_cache_get($cache_key, $cache_group, $found);
     if ($found) {
         return $ls_languages;
     }
     if (is_null($this->wp_query)) {
         $this->set_wp_query();
     }
     // use original wp_query for this
     // backup current $wp_query
     if (!isset($wp_query)) {
         return $this->get_active_languages();
     }
     $_wp_query_back = clone $wp_query;
     unset($wp_query);
     global $wp_query;
     // make it global again after unset
     $wp_query = clone $this->wp_query;
     $w_active_languages = $this->get_active_languages();
     $this_lang = $this->this_lang;
     if ($this_lang == 'all') {
         $w_this_lang = array('code' => 'all', 'english_name' => 'All languages', 'display_name' => __('All languages', 'sitepress'));
     } else {
         $w_this_lang = $this->get_language_details($this_lang);
     }
     if (isset($template_args['skip_missing'])) {
         //override default setting
         $icl_lso_link_empty = !$template_args['skip_missing'];
     } else {
         $icl_lso_link_empty = $this->settings['icl_lso_link_empty'];
     }
     // 1. Determine translations
     if (is_category()) {
         $skip_empty = false;
         $term_taxonomy_id_prepared = $wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy=%s", array(get_query_var('cat'), 'category'));
         $term_taxonomy_id = $wpdb->get_var($term_taxonomy_id_prepared);
         $trid = $this->get_element_trid($term_taxonomy_id, 'tax_category');
         $translations = $this->get_element_translations($trid, 'tax_category', $skip_empty);
     } elseif (is_tag()) {
         $skip_empty = false;
         $term_taxonomy_id_prepared = $wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy=%s", array(get_query_var('tag_id'), 'post_tag'));
         $term_taxonomy_id = $wpdb->get_var($term_taxonomy_id_prepared);
         $trid = $this->get_element_trid($term_taxonomy_id, 'tax_post_tag');
         $translations = $this->get_element_translations($trid, 'tax_post_tag', $skip_empty);
     } elseif (is_tax()) {
         $skip_empty = false;
         $term_taxonomy_id_prepared = $wpdb->prepare("SELECT term_taxonomy_id FROM {$wpdb->term_taxonomy} WHERE term_id=%d AND taxonomy=%s", array($wp_query->get_queried_object_id(), get_query_var('taxonomy')));
         $term_taxonomy_id = $wpdb->get_var($term_taxonomy_id_prepared);
         if ($this->is_translated_taxonomy(get_query_var('taxonomy'))) {
             $trid = $this->get_element_trid($term_taxonomy_id, 'tax_' . get_query_var('taxonomy'));
             $translations = $this->get_element_translations($trid, 'tax_' . get_query_var('taxonomy'), $skip_empty);
         } else {
             $translations[$this->get_current_language()] = (object) array('translation_id' => 0, 'language_code' => $this->get_default_language(), 'original' => 1, 'name' => get_query_var('taxonomy'), 'term_id' => $wp_query->get_queried_object_id());
         }
     } elseif (is_archive() && !empty($wp_query->posts)) {
         $translations = array();
     } elseif (is_attachment()) {
         // Exception for attachments. Not translated.
         $trid = $this->get_element_trid($wp_query->get_queried_object_id(), 'post_attachment');
         $translations = $this->get_element_translations($trid, 'post_attachment');
     } elseif (is_page() || 'page' == get_option('show_on_front') && (isset($this->wp_query->queried_object_id) && $this->wp_query->queried_object_id == get_option('page_on_front') || isset($this->wp_query->queried_object_id) && $this->wp_query->queried_object_id == get_option('page_for_posts'))) {
         $trid = $this->get_element_trid($wp_query->get_queried_object_id(), 'post_page');
         $translations = $this->get_element_translations($trid, 'post_page');
     } elseif (is_singular() && !empty($wp_query->posts) || isset($_wp_query_back->query['name']) && isset($_wp_query_back->query['post_type'])) {
         $trid = $wpml_post_translations->get_element_trid($this->wp_query->post->ID);
         $translations = $this->get_element_translations($trid, 'post_' . $this->wp_query->post->post_type);
     } else {
         $wp_query->is_singular = false;
         $wp_query->is_archive = false;
         $wp_query->is_category = false;
         $wp_query->is_404 = true;
     }
     // 2. determine url
     foreach ($w_active_languages as $k => $lang) {
         $skip_lang = false;
         if (is_singular() || isset($_wp_query_back->query['name']) && isset($_wp_query_back->query['post_type']) || !empty($this->wp_query->queried_object_id) && $this->wp_query->queried_object_id == get_option('page_for_posts')) {
             $this_lang_tmp = $this->this_lang;
             $this->this_lang = $lang['code'];
             $lang_page_on_front = get_option('page_on_front');
             $lang_page_for_posts = get_option('page_for_posts');
             if ($lang_page_on_front) {
                 $lang_page_on_front = icl_object_id($lang_page_on_front, 'page', false, $lang['code']);
             }
             if ($lang_page_for_posts) {
                 $lang_page_for_posts = icl_object_id($lang_page_for_posts, 'page', false, $lang['code']);
             }
             if ('page' == get_option('show_on_front') && !empty($translations[$lang['code']]) && $translations[$lang['code']]->element_id == $lang_page_on_front) {
                 $lang['translated_url'] = $this->language_url($lang['code']);
             } elseif ('page' == get_option('show_on_front') && !empty($translations[$lang['code']]) && $translations[$lang['code']]->element_id && $translations[$lang['code']]->element_id == $lang_page_for_posts) {
                 if ($lang_page_for_posts) {
                     $lang['translated_url'] = get_permalink($lang_page_for_posts);
                 } else {
                     $lang['translated_url'] = $this->language_url($lang['code']);
                 }
             } else {
                 if (!empty($translations[$lang['code']]) && isset($translations[$lang['code']]->post_title)) {
                     $lang['translated_url'] = get_permalink($translations[$lang['code']]->element_id);
                     $lang['missing'] = 0;
                 } else {
                     if ($icl_lso_link_empty) {
                         if (!empty($template_args['link_empty_to'])) {
                             $lang['translated_url'] = str_replace('{%lang}', $lang['code'], $template_args['link_empty_to']);
                         } else {
                             $lang['translated_url'] = $this->language_url($lang['code']);
                         }
                     } else {
                         $skip_lang = true;
                     }
                     $lang['missing'] = 1;
                 }
             }
             $this->this_lang = $this_lang_tmp;
         } elseif (is_category() || is_tax() || is_tag()) {
             if (isset($translations[$lang['code']])) {
                 // force  the taxonomy id adjustment to not modify this
                 global $icl_adjust_id_url_filter_off;
                 $icl_adjust_id_url_filter_off = true;
                 $taxonomy = is_category() ? 'category' : (is_tag() ? 'post_tag' : get_query_var('taxonomy'));
                 $lang['translated_url'] = get_term_link((int) $translations[$lang['code']]->term_id, $taxonomy);
                 $icl_adjust_id_url_filter_off = false;
                 // restore default behaviour
                 $lang['missing'] = 0;
             } else {
                 if ($icl_lso_link_empty) {
                     if (!empty($template_args['link_empty_to'])) {
                         $lang['translated_url'] = str_replace('{%lang}', $lang['code'], $template_args['link_empty_to']);
                     } else {
                         $lang['translated_url'] = $this->language_url($lang['code']);
                     }
                 } elseif ($current_language !== $lang['code']) {
                     // don't skip the current language
                     $skip_lang = true;
                 }
                 $lang['missing'] = 1;
             }
         } elseif (is_author()) {
             global $authordata, $wp_query;
             if (empty($authordata)) {
                 $authordata = get_userdata(get_query_var('author'));
             }
             $post_type = get_query_var('post_type') ? get_query_var('post_type') : 'post';
             $query_utils = new WPML_Query_Utils();
             if ($query_utils->author_query_has_posts($post_type, $authordata, $lang)) {
                 remove_filter('home_url', array($this, 'home_url'), 1, 4);
                 remove_filter('author_link', array($this, 'author_link'));
                 $author_url = get_author_posts_url($authordata->ID);
                 add_filter('home_url', array($this, 'home_url'), 1, 4);
                 add_filter('author_link', array($this, 'author_link'));
                 $lang['translated_url'] = $this->convert_url($author_url, $lang['code']);
                 $lang['missing'] = 0;
             } else {
                 if ($icl_lso_link_empty) {
                     if (!empty($template_args['link_empty_to'])) {
                         $lang['translated_url'] = str_replace('{%lang}', $lang['code'], $template_args['link_empty_to']);
                     } else {
                         $lang['translated_url'] = $this->language_url($lang['code']);
                     }
                 } else {
                     // dont skip the currrent language
                     if ($current_language != $lang['code']) {
                         $skip_lang = true;
                     }
                 }
                 $lang['missing'] = 1;
             }
         } elseif (is_archive() && !is_tag()) {
             global $icl_archive_url_filter_off;
             $icl_archive_url_filter_off = true;
             if ($this->wp_query->is_year) {
                 if (isset($this->wp_query->query_vars['m']) && !$this->wp_query->query_vars['year']) {
                     $this->wp_query->query_vars['year'] = substr($this->wp_query->query_vars['m'], 0, 4);
                 }
                 $lang['translated_url'] = $this->archive_url(get_year_link($this->wp_query->query_vars['year']), $lang['code']);
             } elseif ($this->wp_query->is_month) {
                 if (isset($this->wp_query->query_vars['m']) && !$this->wp_query->query_vars['year']) {
                     $this->wp_query->query_vars['year'] = substr($this->wp_query->query_vars['m'], 0, 4);
                     $this->wp_query->query_vars['monthnum'] = substr($this->wp_query->query_vars['m'], 4, 2);
                 } else {
                     if ($icl_lso_link_empty) {
                         if (!empty($template_args['link_empty_to'])) {
                             $lang['translated_url'] = str_replace('{%lang}', $lang['code'], $template_args['link_empty_to']);
                         } else {
                             $lang['translated_url'] = $this->language_url($lang['code']);
                         }
                     }
                     $lang['missing'] = 1;
                 }
                 $lang['translated_url'] = $this->archive_url(get_month_link($this->wp_query->query_vars['year'], $this->wp_query->query_vars['monthnum']), $lang['code']);
             } elseif ($this->wp_query->is_day) {
                 if (isset($this->wp_query->query_vars['m']) && !$this->wp_query->query_vars['year']) {
                     $this->wp_query->query_vars['year'] = substr($this->wp_query->query_vars['m'], 0, 4);
                     $this->wp_query->query_vars['monthnum'] = substr($this->wp_query->query_vars['m'], 4, 2);
                     $this->wp_query->query_vars['day'] = substr($this->wp_query->query_vars['m'], 6, 2);
                     gmdate('Y', current_time('timestamp'));
                     //force wp_timezone_override_offset to be called
                 }
                 $lang['translated_url'] = $this->archive_url(get_day_link($this->wp_query->query_vars['year'], $this->wp_query->query_vars['monthnum'], $this->wp_query->query_vars['day']), $lang['code']);
             } else {
                 if (isset($this->wp_query->query_vars['post_type'])) {
                     do_action('_icl_before_archive_url', $this->wp_query->query_vars['post_type'], $lang['code']);
                     if ($this->is_translated_post_type($this->wp_query->query_vars['post_type']) && function_exists('get_post_type_archive_link')) {
                         remove_filter('post_type_archive_link', array($this, 'post_type_archive_link_filter'), 10);
                         $post_type = $this->wp_query->query_vars['post_type'];
                         $url = $this->convert_url(get_post_type_archive_link($post_type), $lang['code']);
                         $lang['translated_url'] = $this->adjust_cpt_in_url($url, $post_type, $lang['code']);
                     } else {
                         if ($k != $this->get_default_language()) {
                             $skip_lang = true;
                             unset($w_active_languages[$k]);
                         }
                     }
                     do_action('_icl_after_archive_url', $this->wp_query->query_vars['post_type'], $lang['code']);
                 }
             }
             add_filter('post_type_archive_link', array($this, 'post_type_archive_link_filter'), 10, 2);
             $icl_archive_url_filter_off = false;
         } elseif (is_search()) {
             $url_glue = strpos($this->language_url($lang['code']), '?') === false ? '?' : '&';
             $lang['translated_url'] = $this->language_url($lang['code']) . $url_glue . 's=' . urlencode($wp_query->query['s']);
         } else {
             global $icl_language_switcher_preview;
             if ($icl_lso_link_empty || is_home() || is_404() || 'page' == get_option('show_on_front') && ($this->wp_query->queried_object_id == get_option('page_on_front') || $this->wp_query->queried_object_id == get_option('page_for_posts')) || $icl_language_switcher_preview || WPML_Root_Page::is_current_request_root()) {
                 $lang['translated_url'] = $this->language_url($lang['code']);
                 $skip_lang = false;
             } else {
                 $skip_lang = true;
                 unset($w_active_languages[$k]);
             }
         }
         if (!$skip_lang) {
             $w_active_languages[$k] = $lang;
         } else {
             unset($w_active_languages[$k]);
         }
     }
     $languages_helper = new WPML_Languages();
     // 3.
     foreach ($w_active_languages as $k => $v) {
         $w_active_languages[$k] = $languages_helper->get_ls_language($k, $current_language, $w_active_languages[$k]);
     }
     // 4. pass GET parameters
     $parameters_copied = apply_filters('icl_lang_sel_copy_parameters', array_map('trim', explode(',', wpml_get_setting_filter('', 'icl_lang_sel_copy_parameters'))));
     if ($parameters_copied) {
         foreach ($_GET as $k => $v) {
             if (in_array($k, $parameters_copied)) {
                 $gets_passed[$k] = $v;
             }
         }
     }
     if (!empty($gets_passed)) {
         $gets_passed = http_build_query($gets_passed);
         foreach ($w_active_languages as $code => $al) {
             if (empty($al['missing'])) {
                 $glue = false !== strpos($w_active_languages[$code]['url'], '?') ? '&' : '?';
                 $w_active_languages[$code]['url'] .= $glue . $gets_passed;
             }
         }
     }
     // restore current $wp_query
     unset($wp_query);
     global $wp_query;
     // make it global again after unset
     $wp_query = clone $_wp_query_back;
     unset($_wp_query_back);
     $w_active_languages = apply_filters('icl_ls_languages', $w_active_languages);
     $w_active_languages = $languages_helper->sort_ls_languages($w_active_languages, $template_args);
     // Change the url, in case languages in subdomains are set.
     if ($this->settings['language_negotiation_type'] == 2) {
         foreach ($w_active_languages as $lang => $element) {
             $w_active_languages[$lang]['url'] = $this->convert_url($element['url'], $lang);
         }
     }
     wp_reset_query();
     wp_cache_set($cache_key, $w_active_languages, $cache_group);
     return $w_active_languages;
 }