function bogo_language_switcher($args = '') { $args = wp_parse_args($args, array('echo' => false)); $links = bogo_language_switcher_links($args); $total = count($links); $count = 0; $output = ''; foreach ($links as $link) { $count += 1; $class = array(); $class[] = bogo_language_tag($link['locale']); $class[] = bogo_lang_slug($link['locale']); if (get_locale() == $link['locale']) { $class[] = 'current'; } if (1 == $count) { $class[] = 'first'; } if ($total == $count) { $class[] = 'last'; } $class = implode(' ', array_unique($class)); $label = $link['native_name'] ? $link['native_name'] : $link['title']; $title = $link['title']; if (empty($link['href'])) { $li = esc_html($label); } else { $li = sprintf('<a rel="alternate" hreflang="%1$s" href="%2$s" title="%3$s">%4$s</a>', $link['lang'], esc_url($link['href']), esc_attr($title), esc_html($label)); } $li = sprintf('<li class="%1$s">%2$s</li>', $class, $li); $output .= $li . "\n"; } $output = '<ul class="bogo-language-switcher">' . $output . '</ul>' . "\n"; $output = apply_filters('bogo_language_switcher', $output, $args); if ($args['echo']) { echo $output; } else { return $output; } }
function bogo_get_url_with_lang($url = null, $lang = null, $args = '') { $defaults = array('using_permalinks' => true); $args = wp_parse_args($args, $defaults); if (!$url) { if (!($url = redirect_canonical($url, false))) { $url = is_ssl() ? 'https://' : 'http://'; $url .= $_SERVER['HTTP_HOST']; $url .= $_SERVER['REQUEST_URI']; } if ($frag = strstr($url, '#')) { $url = substr($url, 0, -strlen($frag)); } if ($query = @parse_url($url, PHP_URL_QUERY)) { parse_str($query, $query_vars); foreach (array_keys($query_vars) as $qv) { if (!get_query_var($qv)) { $url = remove_query_arg($qv, $url); } } } } $default_locale = bogo_get_default_locale(); if (!$lang) { $lang = $default_locale; } $home = set_url_scheme(get_option('home')); $home = trailingslashit($home); $url = remove_query_arg('lang', $url); if (!$args['using_permalinks']) { if ($lang != $default_locale) { $url = add_query_arg(array('lang' => bogo_lang_slug($lang)), $url); } return $url; } $available_languages = array_map('bogo_lang_slug', bogo_available_locales()); $tail_slashed = '/' == substr($url, -1); $url = preg_replace('#^' . preg_quote($home) . '((' . implode('|', $available_languages) . ')/)?#', $home . ($lang == $default_locale ? '' : bogo_lang_slug($lang) . '/'), trailingslashit($url)); if (!$tail_slashed) { $url = untrailingslashit($url); } return $url; }