コード例 #1
0
function bogo_locale($locale)
{
    global $wp_rewrite, $wp_query;
    if (!did_action('plugins_loaded')) {
        return $locale;
    }
    if (is_admin()) {
        return bogo_get_user_locale();
    }
    $default_locale = bogo_get_default_locale();
    if (!empty($wp_query->query_vars)) {
        if (($lang = get_query_var('lang')) && ($closest = bogo_get_closest_locale($lang))) {
            return $closest;
        } else {
            return $default_locale;
        }
    }
    if (isset($wp_rewrite) && $wp_rewrite->using_permalinks()) {
        $url = is_ssl() ? 'https://' : 'http://';
        $url .= $_SERVER['HTTP_HOST'];
        $url .= $_SERVER['REQUEST_URI'];
        $home = set_url_scheme(get_option('home'));
        $home = trailingslashit($home);
        $available_languages = bogo_available_languages();
        $available_languages = array_map('bogo_lang_slug', array_keys($available_languages));
        $available_languages = implode('|', $available_languages);
        $pattern = '#^' . preg_quote($home) . '(' . $available_languages . ')(/|$)#';
        if (preg_match($pattern, $url, $matches) && ($closest = bogo_get_closest_locale($matches[1]))) {
            return $closest;
        }
    }
    $lang = bogo_get_lang_from_url();
    if ($lang && ($closest = bogo_get_closest_locale($lang))) {
        return $closest;
    }
    $locale = $default_locale;
    return $locale;
}
コード例 #2
0
function bogo_parse_query($query)
{
    $qv =& $query->query_vars;
    if (!empty($qv['bogo_suppress_locale_query'])) {
        return;
    }
    if (isset($qv['post_type']) && 'any' != $qv['post_type']) {
        $localizable = array_filter((array) $qv['post_type'], 'bogo_is_localizable_post_type');
        if (empty($localizable)) {
            $qv['bogo_suppress_locale_query'] = true;
            return;
        }
    }
    $lang = isset($qv['lang']) ? $qv['lang'] : '';
    if (is_admin()) {
        $locale = $lang;
    } else {
        if ($lang) {
            $locale = bogo_get_closest_locale($lang);
        } else {
            $locale = get_locale();
        }
        if (empty($locale)) {
            $locale = bogo_get_default_locale();
        }
    }
    if (empty($locale) || !bogo_is_available_locale($locale)) {
        $qv['bogo_suppress_locale_query'] = true;
        return;
    }
    $qv['lang'] = $locale;
    if (is_admin()) {
        return;
    }
    if ($query->is_home && 'page' == get_option('show_on_front') && get_option('page_on_front')) {
        $query_keys = array_keys(wp_parse_args($query->query));
        $query_keys = array_diff($query_keys, array('preview', 'page', 'paged', 'cpage', 'lang'));
        if (empty($query_keys)) {
            $query->is_page = true;
            $query->is_singular = true;
            $query->is_home = false;
            $qv['page_id'] = get_option('page_on_front');
            if (!empty($qv['paged'])) {
                $qv['page'] = $qv['paged'];
                unset($qv['paged']);
            }
        }
    }
    if ('' != $qv['pagename']) {
        $query->queried_object = bogo_get_page_by_path($qv['pagename'], $locale);
        if (!empty($query->queried_object)) {
            $query->queried_object_id = (int) $query->queried_object->ID;
        } else {
            unset($query->queried_object);
        }
        if ('page' == get_option('show_on_front') && isset($query->queried_object_id) && $query->queried_object_id == get_option('page_for_posts')) {
            $query->is_page = false;
            $query->is_home = true;
            $query->is_posts_page = true;
        }
    }
}