add_action( 'wp_footer', 'wplng_switcher_wp_footer' ); // Add languages switcher in nav menu add_filter( 'wp_nav_menu_objects', 'wplng_switcher_nav_menu_replace_items' ); add_filter( 'nav_menu_link_attributes', 'wplng_add_nav_menu_link_attributes_atts', 10, 2 ); // Set alternate links with hreflang parametters add_action( 'wp_head', 'wplng_link_alternate_hreflang', 1 ); // Disable web browser automatic translation add_action( 'language_attributes', 'wplng_disable_web_browser_auto_translate' ); // Ajax function for Load in progress add_action( 'wp_ajax_wplng_load_in_progress', 'wplng_ajax_load_in_progress' ); /** * OB and REQUEST_URI */ // Manage URL with REQUEST_URI and start OB add_action( 'init', 'wplng_ob_start', 1 ); // Redirect page if is called with an untranslate slug add_action( 'template_redirect', 'wplng_redirect_translated_slug' ); /** * Generate JSON translation on the fly for wp-i18n.js */ // Generate JSON translation add_filter( 'load_script_translation_file', 'wplng_load_script_translation_file', 20, 3 ); /** * Clear wpLingua cache on updates */ // Clear wpLingua cache on WordPress core, plugins, themes or translations update add_action( 'upgrader_process_complete', 'wplng_clear_cache_on_update', 10, 2 ); // Clear wpLingua cache on plugin activation/deactivation add_action( 'activated_plugin', 'wplng_clear_folder_cache' ); add_action( 'deactivated_plugin', 'wplng_clear_folder_cache' ); // Clear wpLingua cache on theme switch add_action( 'switch_theme', 'wplng_clear_folder_cache' ); // Clear wpLingua cache on site language change add_action( 'update_option_WPLANG', 'wplng_clear_folder_cache' ); // Clear wpLingua cache on wpLingua settings change add_action( 'update_option_wplng_website_language', 'wplng_clear_folder_cache' ); add_action( 'update_option_wplng_target_languages', 'wplng_clear_folder_cache' ); /** * Features */ // Make multilingua Sitemap XML for All In One SEO plugin // Il other case, multilingual Sitemap is make by output buffering if ( get_option( 'wplng_sitemap_xml', true ) && function_exists( 'aioseo' ) ) { add_filter( 'aioseo_sitemap_post', 'wplng_aioseo_filter_sitemap_post', 10, 2 ); add_filter( 'aioseo_sitemap_term', 'wplng_aioseo_filter_sitemap_term', 10, 2 ); } // Search from translated languages if ( ! empty( get_option( 'wplng_translate_search' ) ) && wplng_api_feature_is_allow( 'search' ) ) { add_action( 'parse_query', 'wplng_translate_search_query' ); add_filter( 'get_search_query', 'wplng_search_put_tag' ); add_filter( 'wplng_translated_html', 'wplng_search_replace_tag', 5 ); } else { add_filter( 'wplng_url_is_translatable', 'wplng_exclude_search', 20 ); } // Redirect by browser language $browser_language_redirect = get_option( 'wplng_browser_language_redirect' ); if ( $browser_language_redirect === 'js_only' ) { add_action( 'wp_head', 'wplng_browser_language_redirect_js_only', 2 ); } elseif ( $browser_language_redirect === 'php_js' ) { add_action( 'template_redirect', 'wplng_browser_language_redirect_php_js' ); } /** * Shortcode */ add_shortcode( 'wplng_switcher', 'wplng_shortcode_switcher' ); add_shortcode( 'wplng_notranslate', 'wplng_shortcode_notranslate' ); add_shortcode( 'wplng_only', 'wplng_shortcode_only' ); /** * Gutenberg */ add_filter( 'block_categories_all', 'wplng_block_category' ); add_action( 'init', 'wplng_register_block' ); add_action( 'enqueue_block_editor_assets', 'wplng_register_block_assets' ); /** * Do action after wpLingua fully initialized */ do_action( 'wplng_initialized' ); } } wplng_start(); /** * Delete translation and slug cache options on plugin deactivation. * * @return void */ function wplng_deactivate() { delete_option( 'wplng_cached_translations' ); delete_option( 'wplng_cached_slugs' ); delete_option( 'wplng_api_key_data' ); } register_deactivation_hook( __FILE__, 'wplng_deactivate' );