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;
}
Example #3
0
/**
 * 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;
}