function bogo_switch_user_locale() { if (empty($_REQUEST['action']) || 'bogo-switch-locale' != $_REQUEST['action']) { return; } check_admin_referer('bogo-switch-locale'); $locale = isset($_REQUEST['locale']) ? $_REQUEST['locale'] : ''; if (!bogo_is_available_locale($locale) || $locale == bogo_get_user_locale()) { return; } update_user_option(get_current_user_id(), 'locale', $locale, true); if (!empty($_REQUEST['redirect_to'])) { wp_safe_redirect($_REQUEST['redirect_to']); exit; } }
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; }
function bogo_save_post($post_id, $post) { if (did_action('import_start') && !did_action('import_end')) { // Importing return; } if (!bogo_is_localizable_post_type($post->post_type)) { return; } $old_locale = get_post_meta($post_id, '_locale', true); if (empty($old_locale)) { if (!empty($_REQUEST['locale']) && bogo_is_available_locale($_REQUEST['locale'])) { $locale = $_REQUEST['locale']; } elseif ('auto-draft' == get_post_status($post_id)) { $locale = bogo_get_user_locale(); } else { $locale = bogo_get_default_locale(); } } if (!empty($locale) && $locale != $old_locale) { update_post_meta($post_id, '_locale', $locale); } else { $locale = $old_locale; } if ($original = get_post_meta($post_id, '_original_post', true)) { return; } if (!empty($_REQUEST['original_post'])) { $original = get_post_meta($_REQUEST['original_post'], '_original_post', true); if (empty($original)) { $original = (int) $_REQUEST['original_post']; } update_post_meta($post_id, '_original_post', $original); return; } $original = $post_id; while (1) { $q = new WP_Query(); $posts = $q->query(array('bogo_suppress_locale_query' => true, 'posts_per_page' => 1, 'post_status' => 'any', 'post_type' => $post->post_type, 'meta_key' => '_original_post', 'meta_value' => $original)); if (empty($posts)) { update_post_meta($post_id, '_original_post', $original); return; } $original += 1; } }
function bogo_select_own_locale($profileuser) { $available_languages = bogo_available_languages(array('orderby' => 'value', 'current_user_can_access' => true)); $selected = bogo_get_user_locale($profileuser->ID); ?> <!-- Bogo plugin --> <tr> <th scope="row"><?php echo esc_html(__('Locale', 'bogo')); ?> </th> <td> <select name="bogo_own_locale"> <?php foreach ($available_languages as $locale => $lang) { ?> <option value="<?php echo esc_attr($locale); ?> " <?php selected($locale, $selected); ?> ><?php echo esc_html($lang); ?> </option> <?php } ?> </select> </td> </tr> <?php }