$name ) { if ( $insert === $id ) { $is_valid = true; break; } } } if ( ! $is_valid ) { $insert = 'bottom-center'; } $insert = apply_filters( 'wplng_switcher_insert', $insert ); return $insert; } /** * Get wpLingua switcher option : Theme * * @return string */ function wplng_get_switcher_theme() { $theme = get_option( 'wplng_theme' ); $is_valid = false; if ( ! empty( $theme ) ) { $valid_theme = wplng_data_switcher_valid_theme(); foreach ( $valid_theme as $id => $name ) { if ( $theme === $id ) { $is_valid = true; break; } } } if ( ! $is_valid ) { $theme = 'light-simple-smooth'; } $theme = apply_filters( 'wplng_switcher_theme', $theme ); return $theme; } /** * Get wpLingua switcher option : Style * * @return string */ function wplng_get_switcher_style() { $style = get_option( 'wplng_style' ); $is_valid = false; if ( ! empty( $style ) ) { $valid_style = wplng_data_switcher_valid_style(); foreach ( $valid_style as $id => $name ) { if ( $style === $id ) { $is_valid = true; break; } } } if ( ! $is_valid ) { $style = 'list'; } $style = apply_filters( 'wplng_switcher_style', $style ); return $style; } /** * Get wpLingua switcher option : Name format * * @return void */ function wplng_get_switcher_name_format() { $name_format = get_option( 'wplng_name_format' ); $is_valid = false; if ( ! empty( $name_format ) ) { $valid_name_format = wplng_data_switcher_valid_name_format(); foreach ( $valid_name_format as $id => $name ) { if ( $name_format === $id ) { $is_valid = true; break; } } } if ( ! $is_valid || ( 'none' === wplng_get_switcher_flags_style() && 'none' === $name_format ) ) { $name_format = 'original'; } $name_format = apply_filters( 'wplng_switcher_name_format', $name_format ); return $name_format; } /** * Get wpLingua switcher option : Flags style * * @return string */ function wplng_get_switcher_flags_style() { $flags_style = get_option( 'wplng_flags_style' ); $is_valid = false; if ( ! empty( $flags_style ) ) { $valid_flags_style = wplng_data_switcher_valid_flags_style(); foreach ( $valid_flags_style as $id => $name ) { if ( $flags_style === $id ) { $is_valid = true; break; } } } if ( ! $is_valid ) { $flags_style = 'rectangular'; } return $flags_style; } /** * Get wpLingua switcher option : Class * * @param array $arg * @return string */ function wplng_get_switcher_class( $arg = array() ) { $class = ''; /** * Define insert class (list, block) */ if ( ! empty( $arg['insert'] ) && array_key_exists( $arg['insert'], wplng_data_switcher_valid_insert() ) ) { $class = 'insert-' . $arg['insert']; } else { $class = 'insert-' . wplng_get_switcher_insert(); } /** * Define style class (list, block) */ if ( ! empty( $arg['style'] ) && array_key_exists( $arg['style'], wplng_data_switcher_valid_style() ) ) { $class .= ' style-' . $arg['style']; } else { $class .= ' style-' . wplng_get_switcher_style(); } /** * Define language name class (id, name, none) */ if ( ! empty( $arg['title'] ) && array_key_exists( $arg['title'], wplng_data_switcher_valid_name_format() ) ) { $class .= ' title-' . $arg['title']; } else { $class .= ' title-' . wplng_get_switcher_name_format(); } /** * Define theme class (light, dark) */ if ( ! empty( $arg['theme'] ) && array_key_exists( $arg['theme'], wplng_data_switcher_valid_theme() ) ) { $class .= ' theme-' . $arg['theme']; } else { $class .= ' theme-' . wplng_get_switcher_theme(); } /** * Define flags theme class (id, name, none) */ if ( ! empty( $arg['flags'] ) && array_key_exists( $arg['flags'], wplng_data_switcher_valid_flags_style() ) ) { $class .= ' flags-' . $arg['flags']; } else { $class .= ' flags-' . wplng_get_switcher_flags_style(); } /** * Define additional class (id, name, none) */ if ( ! empty( $arg['class'] ) ) { $class .= ' ' . $arg['class']; } return esc_attr( $class ); } /** * Print HTML of wpLingua switcher if it's inserted automaticaly * * @return string */ function wplng_switcher_wp_footer() { if ( ! wplng_url_is_translatable() || 'none' === wplng_get_switcher_insert() ) { return; } echo wplng_get_switcher_html( array( 'class' => 'insert-auto', ) ); } /** * Get HTML of wpLingua switcher * * @param array $arg * @return string */ function wplng_get_switcher_html( $arg = array() ) { $is_admin = is_admin() || ( defined( 'REST_REQUEST' ) && REST_REQUEST ); if ( ! $is_admin && ! wplng_url_is_translatable() ) { return ''; } $language_website = wplng_get_language_website(); $language_current_id = wplng_get_language_current_id(); $languages_target = wplng_get_languages_target(); $class = wplng_get_switcher_class( $arg ); $flags_style = wplng_get_switcher_flags_style(); $url_website = wplng_get_url_original(); $flags_show = true; $url_website = remove_query_arg( array( 'wplng-mode', 'wplng-load', 'nocache', ), $url_website ); if ( $is_admin ) { $flags_show = true; $url_website = '#'; } elseif ( ! empty( $arg['flags'] ) && 'none' === $arg['flags'] ) { $flags_show = false; } elseif ( 'none' === $flags_style ) { $flags_show = false; } if ( empty( $languages_target ) ) { return ''; } /** * Translate language names */ // Untranslated target language names foreach ( $languages_target as $key => $language_target ) { $languages_target[ $key ]['original'] = wplng_get_language_name_untranslated( $language_target ); } // Untranslated website language name $language_website['original'] = wplng_get_language_name_untranslated( $language_website ); // Translate target language names foreach ( $languages_target as $key => $language_target ) { $languages_target[ $key ]['name'] = wplng_get_language_name_translated( $language_target, $language_current_id ); } // Translate website language name $language_website['name'] = wplng_get_language_name_translated( $language_website, $language_current_id ); /** * Change flags if necessary */ if ( ! empty( $arg['flags'] ) && ( 'none' !== $arg['flags'] ) && ( $flags_style !== $arg['flags'] ) ) { // Change flags on website languages if ( ! empty( $language_website['flag'] ) ) { $language_website['flag'] = str_replace( '/wplingua/assets/images/' . $flags_style . '/', '/wplingua/assets/images/' . $arg['flags'] . '/', $language_website['flag'] ); } // Change flags on target languages foreach ( $languages_target as $key => $language_target ) { if ( empty( $language_target['flag'] ) ) { continue; } $languages_target[ $key ]['flag'] = str_replace( '/wplingua/assets/images/' . $flags_style . '/', '/wplingua/assets/images/' . $arg['flags'] . '/', $language_target['flag'] ); } } /** * Create the switcher HTML */ $html = '
'; $html .= '
'; // Create link for current language if ( $language_website['id'] === $language_current_id ) { $html .= ''; $html .= '' . esc_html( $language_website['name'] ) . ''; $html .= '' . esc_html( $language_website['original'] ) . ''; $html .= ''; } else { foreach ( $languages_target as $key => $language_target ) { if ( $language_target['id'] !== $language_current_id ) { continue; } $url = wplng_get_url_current_for_language( $language_target['id'] ); $html .= ''; $html .= '' . esc_html( $language_target['name'] ) . ''; $html .= '' . esc_html( $language_target['original'] ) . ''; $html .= ''; break; } } /** * Languages */ $html .= '
'; // Create link for website language if ( $language_website['id'] === $language_current_id ) { $html .= ''; $html .= '' . esc_html( $language_website['name'] ) . ''; $html .= '' . esc_html( $language_website['original'] ) . ''; $html .= ''; // Create link for each target languages foreach ( $languages_target as $key => $language_target ) { $url = '#'; if ( ! $is_admin ) { $url = wplng_get_url_current_for_language( $language_target['id'] ); $url = remove_query_arg( array( 'wplng-load', 'nocache' ), $url ); } if ( $language_target['id'] === $language_current_id ) { $html .= ''; $html .= '' . esc_html( $language_target['name'] ) . ''; $html .= '' . esc_html( $language_target['original'] ) . ''; $html .= ''; } $html .= '
'; // End .wplng-languages $html .= '
'; // End .switcher-content $html .= '
'; // End .wplng-switcher $html = apply_filters( 'wplng_switcher_html', $html, $language_website, $languages_target ); return $html; }