function uls_register_sidebar_laguages() { global $wp_registered_sidebars; $languages = uls_get_available_languages(); // get the all languages available in the wp $options = get_option('uls_settings'); // delete language that is actually in the side, from available languages $lang_code = uls_get_site_language(); foreach ($languages as $lang_name) { if (($lang_name = array_search($lang_code, $languages)) !== false) { unset($languages[$lang_name]); } } // create the N_sidebar X available_languages, but fir ask if the enable checkbox is true if (!isset($options['enable_translation_sidebars_language_switch']) || $options['enable_translation_sidebars_language_switch']) { if (function_exists('register_sidebar')) { $temporal_sidebars = $wp_registered_sidebars; foreach ($temporal_sidebars as $sidebar => $items) { foreach ($languages as $lang_name => $lang_code) { register_sidebar(array('name' => $items['name'] . ' / ' . $lang_name, 'id' => strtolower("uls_" . $items['id'] . '_' . $lang_code), 'description' => __($items['description'] . ' / ' . $lang_name, 'user-language-switch'), 'before_widget' => $items['before_widget'], 'after_widget' => $items['after_widget'], 'before_title' => $items['before_title'], 'after_title' => $items['after_title'])); } } } } }
/** * Add queries to filter posts by languages. If a post doesn't have language. * * @param $query object WordPress query object where language query will be added. */ function uls_add_language_meta_query(&$query) { //set permalink convertion to true, to get real URLs global $uls_permalink_convertion; $uls_permalink_convertion = true; //get language displayed $language_displayed = uls_get_user_language(); //get the default language of the website $default_website_language = uls_get_site_language(); //if the language displayed is the same to the default language, then it includes posts without language $language_query = null; if ($language_displayed == $default_website_language) { //build query for languages $language_query = array('relation' => 'OR', array('key' => 'uls_language', 'value' => 'bug #23268', 'compare' => 'NOT EXISTS'), array('key' => 'uls_language', 'value' => $language_displayed, 'compare' => '=')); } else { $language_query = array(array('key' => 'uls_language', 'value' => $language_displayed, 'compare' => '=')); } //get current meta query $meta_query = $query->get('meta_query'); //add language query to the meta query if (empty($meta_query)) { $meta_query = $language_query; } else { $meta_query = array('relation' => 'AND', $language_query, $meta_query); } //set the new meta query $query->set('meta_query', $meta_query); //reset flag $uls_permalink_convertion = false; }
/** * This function creates a set of links with available languages. * * @param $url string base URL to convert. * @param $url_type string type of language flag to add in the URL (query_var, prefix, subdomain) * @param $type string type of links to generate (links, select) (TO-DO: select isn't available yet.) * @param $only_lang_name if it is true, then the links don't contain the country name. * @param $class string additional CSS class to add in the div of links generated. * * @return string returns the HTML code with links to translated versions. */ function uls_language_link_switch($url = null, $url_type = 'prefix', $type = 'links', $only_lang_name = true, $class = null) { //if URL is null, then it uses the current URL if (null == $url) { $url = isset($_SERVER["HTTPS"]) && $_SERVER["HTTPS"] == "on" ? "https://" : "http://"; $url .= $_SERVER["HTTP_HOST"] . $_SERVER["REQUEST_URI"]; } //get the available languages $available_languages = uls_get_available_languages(); $class = null == $class ? 'uls-language-link-switch' : 'uls-language-link-switch ' . $class; //get the current language $current_language = uls_get_user_language(); if ('' == $current_language) { $current_language = uls_get_site_language(); } //set conversion of permalinks to false global $uls_permalink_convertion; $uls_permalink_convertion = false; ob_start(); ?> <div class="<?php echo $class; ?> "> <?php include 'uls-languages.php'; foreach ($available_languages as $code) { if (isset($country_languages[$code])) { if ($only_lang_name) { $label = substr($country_languages[$code], 0, strpos($country_languages[$code], ' ')); } else { $label = $country_languages[$code]; } } else { $label = $code; } $displayed = false; if ($code == $current_language) { $displayed = true; ?> <span class="<?php echo 'selected-language'; ?> "><?php echo __($label, 'user-language-switch'); ?> </span> <?php } else { //$current_post_id = empty($post->ID) ? url_to_postid($url) : $post->ID; $current_post_id = url_to_postid($url); if (0 == $current_post_id && !is_home()) { wp_reset_query(); the_post(); $current_post_id = get_the_ID(); } //if the current page has a post related if (0 != $current_post_id) { $translation_id = uls_get_post_translation_id($current_post_id, $code); if (false !== $translation_id) { $displayed = true; ?> <a href="<?php echo uls_get_url_translated(get_permalink($translation_id), $code); ?> "><?php echo __($label, 'user-language-switch'); ?> </a> <?php } //translation url ?> <?php } //current_post_id ?> <?php } //if the translation isn't displayed yet if (!$displayed) { //get the translation based on the URL $translation_url = uls_get_url_map_translation($url); if (false !== $translation_url) { ?> <a href="<?php echo uls_get_url_translated($translation_url, $code); ?> "><?php echo __($label, 'user-language-switch'); ?> </a> <?php } else { ?> <a href="<?php echo uls_get_url_translated($url, $code); ?> "><?php echo __($label, 'user-language-switch'); ?> </a> <?php } ?> <?php } //displayed ?> <?php } ?> </div> <?php $res = ob_get_contents(); ob_end_clean(); //set conversion of permalinks to true again $uls_permalink_convertion = true; return $res; }
/** * This function add the language flag in the url. */ function uls_get_url_translated($url, $language, $type = 'prefix', $remove_default_language = true) { //if URL will omit default language if ($remove_default_language) { //if language is the same for the user if (function_exists('is_user_logged_in') && is_user_logged_in() && $language == uls_get_user_saved_language()) { $language = ''; } elseif (function_exists('is_user_logged_in') && !is_user_logged_in() && $language == uls_get_site_language()) { $language = ''; } } //add language to the url switch ($type) { case 'query_var': $parts = parse_url($url); if (empty($parts['query'])) { if (!empty($language)) { $parts['query'] = 'lang=' . $language; } $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); return $url; } $query_parts = explode('&', $parts['query']); $new_query_parts = array(); foreach ($query_parts as $var) { $var_value = explode('=', $var); if ($var_value[0] == 'lang') { if (!empty($language)) { $new_query_parts[] = 'lang=' . $language; } } else { $new_query_parts[] = $var; } } $parts['query'] = implode('&', $new_query_parts); $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); break; case 'subdomain': break; default: $parts = parse_url($url); $blog_parts = parse_url(get_bloginfo('url')); if (empty($parts['path']) && !empty($language)) { $parts['path'] = '/' . $language . '/'; } else { //split path to detect if it contains a language flag already if (empty($blog_parts['path'])) { $path_parts = explode('/', $parts['path']); $available_languages = uls_get_available_languages(); if (!empty($path_parts) && in_array($path_parts[1], $available_languages)) { unset($path_parts[1]); $parts['path'] = implode('/', $path_parts); } if (!empty($language)) { $parts['path'] = '/' . $language . $parts['path']; } } else { $path_parts = explode('/', str_replace($blog_parts['path'], '', $parts['path'])); $available_languages = uls_get_available_languages(); if (!empty($path_parts) && count($path_parts) > 1 && in_array($path_parts[1], $available_languages)) { unset($path_parts[1]); } if (empty($language)) { $parts['path'] = $blog_parts['path'] . implode('/', $path_parts); } else { $parts['path'] = $blog_parts['path'] . '/' . $language . implode('/', $path_parts); } } } $url = $parts['scheme'] . '://' . $parts['host'] . (empty($parts['port']) ? '' : ':' . $parts['port']) . (empty($parts['path']) ? '' : $parts['path']) . (empty($parts['query']) ? '' : '?' . $parts['query']) . (empty($parts['fragment']) ? '' : '#' . $parts['fragment']); break; } //echo "final: $url<br/>"; return $url; }