예제 #1
0
 /**
  * Set the current language: if not found in the URL or REFERER, then keep the default
  * @since 1.1.1
  */
 public function init_current_language()
 {
     /**
      * Keep the default language if any of the code before does not detect another one.
      */
     $this->language = $this->default_language;
     /**
      * Theoretically, we might not have any URL to get the language info from.
      */
     $url_to_check = '';
     if (WPGlobus_WP::is_doing_ajax()) {
         /**
          * If DOING_AJAX, we cannot retrieve the language information from the URL,
          * because it's always `admin-ajax`.
          * Therefore, we'll rely on the HTTP_REFERER (if it exists).
          */
         if (!empty($_SERVER['HTTP_REFERER'])) {
             $url_to_check = $_SERVER['HTTP_REFERER'];
         }
     } else {
         /**
          * If not AJAX and not ADMIN then we are at the front. Will use the current URL.
          */
         if (!is_admin()) {
             $url_to_check = WPGlobus_Utils::current_url();
         }
     }
     /**
      * If we have an URL, extract language from it.
      * If extracted, set it as a current.
      */
     if ($url_to_check) {
         $language_from_url = WPGlobus_Utils::extract_language_from_url($url_to_check);
         if ($language_from_url) {
             $this->language = $language_from_url;
         }
     }
 }
 /**
  * @since 1.2.3
  * @param string          $language
  * @param WPGlobus_Config $config Alternative configuration (i.e. Unit Test mock object)
  * @return string
  */
 public static function localize_current_url($language = '', WPGlobus_Config $config = null)
 {
     $url = apply_filters('wpglobus_pre_localize_current_url', '', $language);
     if (!$url) {
         /**
          * Use the global configuration is alternative not passed
          */
         if (null === $config) {
             // @codeCoverageIgnoreStart
             $config = WPGlobus::Config();
         }
         // @codeCoverageIgnoreEnd
         $url = WPGlobus_Utils::localize_url(WPGlobus_Utils::current_url(), $language, $config);
     }
     return $url;
 }
예제 #3
0
 /**
  * Add language switcher to navigation menu
  *
  * @param array  $sorted_menu_items
  * @param stdClass $args An object containing wp_nav_menu() arguments.
  *
  * @return array
  * @see wp_nav_menu()
  */
 public function on_add_item($sorted_menu_items, $args)
 {
     if (empty(WPGlobus::Config()->nav_menu)) {
         /**
          * User can use WPGlobus widget
          * @since 1.0.7
          */
         $disable_add_selector = true;
     } elseif ('all' === WPGlobus::Config()->nav_menu) {
         /**
          * Attach to every nav menu
          * @since 1.0.7
          */
         $disable_add_selector = false;
     } else {
         $items = array();
         foreach ($sorted_menu_items as $item) {
             $items[] = $item->ID;
         }
         $disable_add_selector = true;
         foreach ($this->menus as $key => $menu) {
             $diff = array_diff($items, $menu->menu_items);
             if (empty($diff) && WPGlobus::Config()->nav_menu === $menu->slug) {
                 $disable_add_selector = false;
                 break;
             }
         }
     }
     /**
      * Filter to add or not language selector to the menu.
      * Returning boolean.
      * @since 1.5.8
      *
      * @param bool 	$disable_add_selector 	Disable or not to add language selector to the menu.
      * @param stdClass 	$args 					An object containing wp_nav_menu() arguments.
      */
     $disable_add_selector = apply_filters('wpglobus_menu_add_selector', $disable_add_selector, $args);
     if ($disable_add_selector) {
         return $sorted_menu_items;
     }
     /**
      * List of all languages, except the main one.
      *
      * @var string[] $extra_languages
      */
     $extra_languages = array();
     foreach (WPGlobus::Config()->enabled_languages as $languages) {
         if ($languages !== WPGlobus::Config()->language) {
             $extra_languages[] = $languages;
         }
     }
     /**
      * Filter extra languages.
      * Returning array.
      * @since 1.0.13
      *
      * @param array $extra_languages An array of languages to show in the menu.
      * @param       string           WPGlobus::Config()->language The current language.
      */
     $extra_languages = apply_filters('wpglobus_extra_languages', $extra_languages, WPGlobus::Config()->language);
     // Main menu item classes.
     $menu_item_classes = array('', 'menu-item', 'menu-item-type-custom', 'menu-item-object-custom', 'menu_item_wpglobus_menu_switch', 'wpglobus-selector-link');
     // Submenu item classes.
     $submenu_item_classes = array('', 'menu-item', 'menu-item-type-custom', 'menu-item-object-custom', 'sub_menu_item_wpglobus_menu_switch', 'wpglobus-selector-link');
     if (apply_filters('wpglobus_dropdown_menu', true, WPGlobus::Config())) {
         $parent_item_ID = 9999999999;
         # 9 999 999 999
     } else {
         $parent_item_ID = 0;
     }
     $span_classes_lang = $this->_get_language_classes(WPGlobus::Config()->language);
     $current_url = WPGlobus_Utils::current_url();
     $item = new stdClass();
     $item->ID = 0 === $parent_item_ID ? 'wpglobus_menu_switch_' . WPGlobus::Config()->language : $parent_item_ID;
     $item->db_id = $item->ID;
     $item->object_id = $item->ID;
     $item->object = 'custom';
     $item->menu_item_parent = 0;
     $item->title = '<span class="' . implode(' ', $span_classes_lang) . '">' . $this->_get_flag_name(WPGlobus::Config()->language) . '</span>';
     // The top menu level points to the current URL. Useless? Maybe good for refresh.
     $item->url = $current_url;
     $item->classes = $menu_item_classes;
     $item->classes[] = 'wpglobus-current-language';
     $item->description = '';
     $item->language = WPGlobus::Config()->language;
     $wpglobus_menu_items[] = new WP_Post($item);
     foreach ($extra_languages as $language) {
         $span_classes_lang = $this->_get_language_classes($language);
         $item = new stdClass();
         $item->ID = 'wpglobus_menu_switch_' . $language;
         $item->db_id = $item->ID;
         $item->object_id = $item->ID;
         $item->object = 'custom';
         $item->menu_item_parent = $parent_item_ID;
         $item->title = '<span class="' . implode(' ', $span_classes_lang) . '">' . $this->_get_flag_name($language) . '</span>';
         // This points to the URL localized for the selected language.
         $item->url = WPGlobus_Utils::localize_current_url($language);
         $item->classes = 0 === $parent_item_ID ? $menu_item_classes : $submenu_item_classes;
         $item->description = '';
         $item->language = $language;
         $wpglobus_menu_items[] = new WP_Post($item);
     }
     $languages = $extra_languages;
     array_unshift($languages, WPGlobus::Config()->language);
     return array_merge($sorted_menu_items, apply_filters('wpglobus_menu_items', $wpglobus_menu_items, $languages));
 }
 /**
  * "Stub" test for coverage.
  *
  * @covers WPGlobus_Utils::current_url
  */
 public static function test_current_url()
 {
     $_SERVER['HTTP_HOST'] = 'www.example.com';
     $_SERVER['REQUEST_URI'] = '/folder/file?var=value';
     self::assertEquals('http://www.example.com/folder/file?var=value', WPGlobus_Utils::current_url());
 }
예제 #5
0
 /**
  * Add language switcher to navigation menu
  *
  * @param array  $sorted_menu_items
  * @param object $args An object containing wp_nav_menu() arguments.
  *
  * @return array
  * @see wp_nav_menu()
  */
 function on_add_item($sorted_menu_items, $args)
 {
     if (empty(WPGlobus::Config()->nav_menu)) {
         /**
          * User can use WPGlobus widget
          * @since 1.0.7
          */
         return $sorted_menu_items;
     } elseif ('all' == WPGlobus::Config()->nav_menu) {
         /**
          * Attach to every nav menu
          * @since 1.0.7
          */
     } else {
         $items = array();
         foreach ($sorted_menu_items as $item) {
             $items[] = $item->ID;
         }
         $return = true;
         foreach ($this->menus as $key => $menu) {
             $diff = array_diff($items, $menu->menu_items);
             if (empty($diff) && WPGlobus::Config()->nav_menu === $menu->slug) {
                 $return = false;
                 break;
             }
         }
         if ($return) {
             return $sorted_menu_items;
         }
     }
     $extra_languages = array();
     foreach (WPGlobus::Config()->enabled_languages as $languages) {
         if ($languages != WPGlobus::Config()->language) {
             $extra_languages[] = $languages;
         }
     }
     /**
      * Filter extra languages.
      * Returning array.
      * @since 1.0.13
      *
      * @param array $extra_languages An array with languages to show off in menu.
      * @param       string           WPGlobus::Config()->language The current language.
      */
     $extra_languages = apply_filters('wpglobus_extra_languages', $extra_languages, WPGlobus::Config()->language);
     /** main menu item classes */
     $menu_item_classes = array('', 'menu-item', 'menu_item_wpglobus_menu_switch', 'wpglobus-selector-link');
     /** submenu item classes */
     $submenu_item_classes = array('', 'sub_menu_item_wpglobus_menu_switch', 'wpglobus-selector-link');
     if (apply_filters('wpglobus_dropdown_menu', true, WPGlobus::Config())) {
         $parent_item_ID = 9999999999;
         # 9 999 999 999
     } else {
         $parent_item_ID = 0;
     }
     $span_classes_lang = $this->_get_language_classes(WPGlobus::Config()->language);
     $current_url = WPGlobus_Utils::current_url();
     $item = new stdClass();
     $item->ID = $parent_item_ID == 0 ? 'wpglobus_menu_switch_' . WPGlobus::Config()->language : $parent_item_ID;
     $item->db_id = $parent_item_ID == 0 ? 'wpglobus_menu_switch_' . WPGlobus::Config()->language : $parent_item_ID;
     $item->menu_item_parent = 0;
     $item->title = '<span class="' . implode(' ', $span_classes_lang) . '">' . $this->_get_flag_name(WPGlobus::Config()->language) . '</span>';
     // The top menu level points to the current URL. Useless? Maybe good for refresh.
     $item->url = $current_url;
     $item->classes = $menu_item_classes;
     $item->classes[] = 'wpglobus-current-language';
     $item->description = '';
     $item->language = WPGlobus::Config()->language;
     $wpglobus_menu_items[] = $item;
     foreach ($extra_languages as $language) {
         $span_classes_lang = $this->_get_language_classes($language);
         $item = new stdClass();
         $item->ID = 'wpglobus_menu_switch_' . $language;
         $item->db_id = 'wpglobus_menu_switch_' . $language;
         $item->menu_item_parent = $parent_item_ID;
         $item->title = '<span class="' . implode(' ', $span_classes_lang) . '">' . $this->_get_flag_name($language) . '</span>';
         // This points to the URL localized for the selected language
         //			$item->url         = WPGlobus_Utils::localize_url( $current_url, $language );
         $item->url = WPGlobus_Utils::localize_current_url($language);
         $item->classes = $parent_item_ID == 0 ? $menu_item_classes : $submenu_item_classes;
         $item->description = '';
         $item->language = $language;
         $wpglobus_menu_items[] = $item;
     }
     $languages = $extra_languages;
     array_unshift($languages, WPGlobus::Config()->language);
     return array_merge($sorted_menu_items, apply_filters('wpglobus_menu_items', $wpglobus_menu_items, $languages));
 }