function bogo_admin_enqueue_scripts($hook_suffix) { if (false !== strpos($hook_suffix, 'bogo-tools') || 'widgets.php' == $hook_suffix || 'user-edit.php' == $hook_suffix) { wp_enqueue_style('bogo-admin', plugins_url('admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME), array(), BOGO_VERSION, 'all'); return; } if ('nav-menus.php' == $hook_suffix) { $nav_menu_id = absint(get_user_option('nav_menu_recently_edited')); $nav_menu_items = wp_get_nav_menu_items($nav_menu_id); $locales = array(); foreach ((array) $nav_menu_items as $item) { $locales[$item->db_id] = $item->bogo_locales; } $prefix = 'menu-item-bogo-locale'; wp_enqueue_script('bogo-admin', plugins_url('admin/includes/js/admin.js', BOGO_PLUGIN_BASENAME), array('jquery'), BOGO_VERSION, true); wp_localize_script('bogo-admin', '_bogo', array('availableLanguages' => bogo_available_languages('orderby=value'), 'locales' => $locales, 'selectorLegend' => __('Displayed on pages in', 'bogo'), 'cbPrefix' => $prefix)); wp_enqueue_style('bogo-admin', plugins_url('admin/includes/css/admin.css', BOGO_PLUGIN_BASENAME), array(), BOGO_VERSION, 'all'); return; } if ('options-general.php' == $hook_suffix) { wp_enqueue_script('bogo-admin', plugins_url('admin/includes/js/admin.js', BOGO_PLUGIN_BASENAME), array('jquery'), BOGO_VERSION, true); wp_localize_script('bogo-admin', '_bogo', array('defaultLocale' => bogo_get_default_locale())); return; } }
function bogo_in_widget_form($widget, $return, $instance) { $available_languages = bogo_available_languages('orderby=value'); if (empty($available_languages)) { return; } $return = null; $selected_languages = isset($instance['bogo_locales']) ? (array) $instance['bogo_locales'] : array_keys($available_languages); ?> <fieldset class="bogo-locale-options"> <legend><?php echo esc_html(__('Displayed on pages in', 'bogo')); ?> </legend> <?php foreach ($available_languages as $locale => $language) { $checked = in_array($locale, $selected_languages); $id_attr = $widget->get_field_id('bogo_locales') . '-' . $locale; ?> <label class="bogo-locale-option<?php echo $checked ? ' checked' : ''; ?> " for="<?php echo $id_attr; ?> "> <input type="checkbox" id="<?php echo $id_attr; ?> " name="<?php echo $widget->get_field_name('bogo_locales'); ?> []" value="<?php echo esc_attr($locale); ?> "<?php echo $checked ? ' checked="checked"' : ''; ?> /><?php echo esc_html($language); ?> </label> <?php } ?> </fieldset> <?php }
function bogo_admin_bar_menu($wp_admin_bar) { $current_locale = bogo_get_user_locale(); $current_language = bogo_get_language($current_locale); if (!$current_language) { $current_language = $current_locale; } $wp_admin_bar->add_menu(array('parent' => 'top-secondary', 'id' => 'bogo-user-locale', 'title' => '✔ ' . $current_language)); $available_languages = bogo_available_languages(array('exclude' => array($current_locale), 'current_user_can_access' => true)); foreach ($available_languages as $locale => $lang) { $url = admin_url('profile.php?action=bogo-switch-locale&locale=' . $locale); $url = add_query_arg(array('redirect_to' => urlencode($_SERVER['REQUEST_URI'])), $url); $url = wp_nonce_url($url, 'bogo-switch-locale'); $wp_admin_bar->add_menu(array('parent' => 'bogo-user-locale', 'id' => 'bogo-user-locale-' . $locale, 'title' => $lang, 'href' => $url)); } }
function bogo_restrict_manage_posts() { global $post_type; if (!bogo_is_localizable_post_type($post_type)) { return; } $available_languages = bogo_available_languages(); $current_locale = empty($_GET['lang']) ? '' : $_GET['lang']; echo '<select name="lang">'; $selected = '' == $current_locale ? ' selected="selected"' : ''; echo '<option value=""' . $selected . '>' . esc_html(__('Show all locales', 'bogo')) . '</option>'; foreach ($available_languages as $locale => $lang) { $selected = $locale == $current_locale ? ' selected="selected"' : ''; echo '<option value="' . esc_attr($locale) . '"' . $selected . '>' . esc_html($lang) . '</option>'; } echo '</select>' . "\n"; }
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_language_switcher_links($args = '') { global $wp_query; $args = wp_parse_args($args, array()); $locale = get_locale(); $available_languages = bogo_available_languages(); $translations = array(); $is_singular = false; if (is_singular() || !empty($wp_query->is_posts_page)) { $translations = bogo_get_post_translations(get_queried_object_id()); $is_singular = true; } $links = array(); foreach ($available_languages as $code => $name) { $link = array('locale' => $code, 'lang' => bogo_language_tag($code), 'title' => $name, 'native_name' => bogo_get_language_native_name($code), 'href' => ''); if ($is_singular) { if ($locale != $code && !empty($translations[$code])) { $link['href'] = get_permalink($translations[$code]); } } else { if ($locale != $code) { $link['href'] = bogo_url(null, $code); } } $links[] = $link; } return apply_filters('bogo_language_switcher_links', $links, $args); }
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 }