????
Current Path : /home/innovagencyco/www/statxpress/wp-content/themes/electro/inc/wpml/ |
Current File : //home/innovagencyco/www/statxpress/wp-content/themes/electro/inc/wpml/class-electro-wpml.php |
<?php /** * Electro WPML Class * * @package electro * @author chethemes */ if ( ! defined( 'ABSPATH' ) ) { exit; } if ( ! class_exists( 'Electro_WPML' ) ) : /** * Electro WPML Integration Class */ class Electro_WPML { /** * Setup Class */ public function __construct() { global $woocommerce_wpml; add_action( 'after_setup_theme', array( $this, 'remove_wp_nav_item_filter' ) ); add_filter( 'wp_nav_menu_items', array( $this, 'language_switcher' ), 10, 2 ); add_filter( 'wp_nav_menu_items', array( $this, 'currency_switcher' ), 10, 2 ); add_action( 'electro_before_header', array( $this, 'handheld_wpml_menu' ), 5 ); } public function remove_wp_nav_item_filter() { global $icl_language_switcher; remove_filter( 'wp_nav_menu_items', array( $icl_language_switcher, 'wp_nav_menu_items_filter' ), 10, 2 ); } public function currency_switcher( $items, $args ) { global $woocommerce_wpml; if ( apply_filters( 'electro_currency_switcher_enable', false ) && class_exists( 'WCML_Currency_Switcher' ) && isset( $woocommerce_wpml->multi_currency ) ) { if ( $args->theme_location == apply_filters( 'electro_currency_switcher_theme_location', 'topbar-right' ) ) { $items .= $this->get_menu_cs_html( $args ); } } return $items; } public function get_menu_cs_html( $args ) { global $woocommerce_wpml; $wc_currencies = get_woocommerce_currencies(); $wcml_settings = $woocommerce_wpml->get_settings(); if ( ! ( isset( $wcml_settings['currency_switcher_product_visibility'] ) && $wcml_settings['currency_switcher_product_visibility'] === 1 ) ) { return; } if( isset( $wcml_settings['wcml_curr_template'] ) && $wcml_settings['wcml_curr_template'] != '' ) { $format = $wcml_settings['wcml_curr_template']; } else { $format = '%name% (%symbol%) - %code%'; } if ( ! isset( $wcml_settings['currencies_order'] ) ) { $currencies = $woocommerce_wpml->multi_currency->get_currency_codes(); } else { $currencies = $wcml_settings['currencies_order']; } $preview = ''; if ( count( $currencies ) > 1 ) { $preview .= '<li class="menu-item menu-item-has-children dropdown wcml_currency_switcher">'; $submenu = ''; foreach ( $currencies as $currency ) { $currency_format = preg_replace( array('#%name%#', '#%symbol%#', '#%code%#'), array( $wc_currencies[$currency], get_woocommerce_currency_symbol( $currency ), $currency), $format ); $selected = $currency == $woocommerce_wpml->multi_currency->get_client_currency() ? ' class="wcml-active-currency"' : ''; if ( ! empty( $selected ) ) { $preview .= '<a href="#" class="dropdown-toggle" data-bs-toggle="dropdown">' . $currency_format . '</a>'; } else { $submenu .= '<li rel="' . $currency . '" ' . $selected . ' class="menu-item"><a>' . $currency_format . '</a></li>'; } } $preview .= '<ul class="dropdown-menu">' . $submenu . '</ul>'; $preview .= '</li>'; } return $preview; } /** * Filter on the 'wp_nav_menu_items' hook, that potentially adds a language switcher to the item of some menus. * * @param string $items * @param object $args * * @return string */ public function language_switcher( $items, $args ) { if ( $this->must_filter_menus() && $this->menu_has_ls( $args ) ) { $items .= $this->get_menu_ls_html( $args ); } return $items; } /** * Returns the HTML string of the language switcher for a given menu. * * @param object $args * * @return string */ private function get_menu_ls_html( $args ) { global $sitepress, $wpml_post_translations, $wpml_term_translations, $icl_language_switcher; $current_language = $sitepress->get_current_language(); $languages_helper = new WPML_Languages( $wpml_term_translations, $sitepress, $wpml_post_translations ); $languages = $sitepress->get_ls_languages(); if ( empty( $languages ) ) { return ''; } $items = ''; $items .= '<li class="menu-item menu-item-language menu-item-language-current menu-item-has-children dropdown">'; $items .= isset( $args->before ) ? $args->before : ''; $items .= '<a href="#" onclick="return false" data-bs-toggle="dropdown" class="dropdown-toggle">'; $items .= isset( $args->link_before ) ? $args->link_before : ''; $lang = isset( $languages[ $current_language ] ) ? $languages[ $current_language ] : $languages_helper->get_ls_language( $current_language, $current_language ); $native_lang = $sitepress->get_setting( 'icl_lso_native_lang' ); $displayed_lang = $sitepress->get_setting( 'icl_lso_display_lang' ); $language_name = $icl_language_switcher->language_display( $lang[ 'native_name' ], $lang[ 'translated_name' ], $native_lang, $displayed_lang, false ); $language_name = $this->maybe_render_flag( $lang, $language_name ); $items .= $language_name; $items .= isset( $args->link_after ) ? $args->link_after : ''; $items .= '</a>'; $items .= isset( $args->after ) ? $args->after : ''; unset( $languages[ $current_language ] ); $items .= $this->render_ls_sub_items( $languages ); return $items; } private function maybe_render_flag( $language, $rendered_name ) { global $sitepress; $html = $rendered_name; if ( $sitepress->get_setting( 'icl_lso_flags' ) ) { $alt_title_lang = $rendered_name ? esc_attr( $rendered_name ) : esc_attr( $language[ 'native_name' ] ); $html = '<img class="iclflag" src="' . $language[ 'country_flag_url' ] . '" width="18" height="12" alt="' . $language[ 'language_code' ] . '" title="' . $alt_title_lang . '" />' . $html; } return $html; } private function render_ls_sub_items( $languages ) { global $sitepress, $icl_language_switcher; $ls_type = $sitepress->get_setting( 'icl_lang_sel_type' ); $ls_orientation = ($ls_type == 'list') && $sitepress->get_setting( 'icl_lang_sel_orientation' ); $menu_is_vertical = ! $ls_orientation || $ls_orientation === 'vertical'; $sub_items = ''; foreach ( (array) $languages as $lang ) { $sub_items .= '<li class="menu-item menu-item-language">'; $sub_items .= '<a href="' . $lang[ 'url' ] . '">'; $native_lang = $sitepress->get_setting( 'icl_lso_native_lang' ); $displayed_lang = $sitepress->get_setting( 'icl_lso_display_lang' ); $language_name = $icl_language_switcher->language_display($lang[ 'native_name' ], $lang[ 'translated_name' ], $native_lang, $displayed_lang, false); $language_name = $this->maybe_render_flag( $lang, $language_name ); $sub_items .= $language_name; $sub_items .= '</a></li>'; } $sub_items = $sub_items && $menu_is_vertical ? '<ul class="sub-menu submenu-languages dropdown-menu">' . $sub_items . '</ul>' : $sub_items; $sub_items = $menu_is_vertical ? $sub_items . '</li>' : '</li>' . $sub_items; return $sub_items; } /** * Checks if a given menu has a language_switcher displayed in it * * @param object $args * * @return bool */ private function menu_has_ls( $args ) { list( $abs_menu_id, $settings_menu_id, $menu_locations ) = $this->get_menu_locations_and_ids( $args ); return $abs_menu_id == $settings_menu_id || ( (bool) $abs_menu_id === false && isset( $args->theme_location ) && in_array( $args->theme_location, $menu_locations ) ); } /** * Gets the menu locations that display a language switcher, the id of the menu to which the switcher is assigned * and translation of this id into the default language. * * @param object $args * * @return array */ private function get_menu_locations_and_ids( $args ) { global $sitepress; $abs_menu_id = false; $settings_menu_id = false; $menu_locations = array(); if(isset($args->menu)) { $default_language = $sitepress->get_default_language(); $args->menu = isset( $args->menu->term_id ) ? $args->menu->term_id : $args->menu; $abs_menu_id = apply_filters( 'translate_object_id', $args->menu, 'nav_menu', false, $default_language ); $settings_menu_id = apply_filters( 'translate_object_id', $sitepress->get_setting( 'menu_for_ls' ), 'nav_menu', false, $default_language ); $menu_locations = get_nav_menu_locations(); if ( ! $abs_menu_id && $settings_menu_id ) { foreach ( $menu_locations as $location => $id ) { if ( $id != $settings_menu_id ) { unset( $menu_locations[ $location ] ); } } } } return array( $abs_menu_id, $settings_menu_id, array_keys( $menu_locations ) ); } private function must_filter_menus() { global $sitepress_settings; return ! empty( $sitepress_settings[ 'display_ls_in_menu' ] ) && ( ! function_exists( 'wpml_home_url_ls_hide_check' ) || ! wpml_home_url_ls_hide_check() ); } public function handheld_wpml_menu() { ?> <div class="top-bar hidden-lg-up"> <div class="container"> <ul class="nav nav-inline animate-dropdown"> <?php echo $this->get_menu_ls_html( array() ); ?> <?php if ( apply_filters( 'electro_currency_switcher_enable', false ) && class_exists( 'WCML_Currency_Switcher' ) && isset( $woocommerce_wpml->multi_currency ) ) { echo $this->get_menu_cs_html( array() ); } ?> </ul> </div> </div> <?php } } endif; return new Electro_WPML();