'url_converter' ); $trp_settings = $settings->get_settings(); $languages_to_display = $trp_settings['publish-languages']; $published_languages = $languages->get_language_names( $languages_to_display ); foreach ( $published_languages as $code => $name ) { $urls[] = $converter->get_url_for_language( $code, $home_url ); } return $urls; } /** * Gets the active languages slugs * * @param array $codes Array of languages codes. * * @return array */ public function get_active_languages_codes( $codes ) { if ( ! is_array( $codes ) ) { // @phpstan-ignore-line $codes = (array) $codes; } $translatepress = TRP_Translate_Press::get_trp_instance(); $settings = $translatepress->get_component( 'settings' ); $languages = $translatepress->get_component( 'languages' ); $trp_settings = $settings->get_settings(); $languages_to_display = $trp_settings['publish-languages']; $published_languages = $languages->get_language_names( $languages_to_display ); foreach ( $published_languages as $code => $name ) { $codes[] = $trp_settings['url-slugs'][ $code ]; } return $codes; } /** * Gets home URL in given language * * @param string $home_url Home URL. * @param string $lang Language code. * * @return string */ public function get_home_url_for_lang( $home_url, $lang ) { if ( empty( $lang ) ) { return $home_url; } $translatepress = TRP_Translate_Press::get_trp_instance(); $converter = $translatepress->get_component( 'url_converter' ); $settings = $translatepress->get_component( 'settings' ); $trp_settings = $settings->get_settings(); $code = ''; add_filter( 'trp_add_language_to_home_url_check_for_admin', '__return_false' ); foreach ( $trp_settings['url-slugs'] as $index => $slug ) { if ( $lang === $slug ) { $code = $index; break; } } $url = $converter->get_url_for_language( $code, $home_url ); remove_filter( 'trp_add_language_to_home_url_check_for_admin', '__return_false' ); return $url; } /** * Gets all translations URLs for a post * * @param array $urls Array of translated URLs. * @param string $url URL to use. * @param string $post_type Post type. * @param string $regex Pattern to include at the end. * * @return array */ public function get_translated_post_urls( $urls, $url, $post_type, $regex ) { if ( ! is_array( $urls ) ) { // @phpstan-ignore-line $urls = (array) $urls; } $translatepress = TRP_Translate_Press::get_trp_instance(); $settings = $translatepress->get_component( 'settings' ); $languages = $translatepress->get_component( 'languages' ); $converter = $translatepress->get_component( 'url_converter' ); $trp_settings = $settings->get_settings(); $languages_to_display = $trp_settings['publish-languages']; $published_languages = $languages->get_language_names( $languages_to_display ); foreach ( $published_languages as $code => $name ) { $urls[] = wp_parse_url( $converter->get_url_for_language( $code, $url ), PHP_URL_PATH ) . $regex; } return $urls; } /** * Clear all languages of a specific post * * @param int $post_id Post ID. * * @return void */ public function clear_post_languages( $post_id ) { $translatepress = TRP_Translate_Press::get_trp_instance(); $converter = $translatepress->get_component( 'url_converter' ); $settings = $translatepress->get_component( 'settings' ); $trp_settings = $settings->get_settings(); add_filter( 'trp_add_language_to_home_url_check_for_admin', '__return_false' ); $clear_urls = []; $default_permalink = get_permalink( $post_id ); foreach ( $trp_settings['translation-languages'] as $language ) { if ( $language === $trp_settings['default-language'] ) { continue; } $clear_urls[] = $converter->get_url_for_language( $language, $default_permalink, '' ); } remove_filter( 'trp_add_language_to_home_url_check_for_admin', '__return_false' ); if ( empty( $clear_urls ) ) { return; } rocket_clean_files( $clear_urls ); } /** * Clear the post cache when the translation is updated * * @param array $update_strings Array of updated strings. * @param array $settings Array of settings. * * @return void */ public function clear_post_after_updating_translation( $update_strings, $settings ) { $translatepress = TRP_Translate_Press::get_trp_instance(); $converter = $translatepress->get_component( 'url_converter' ); if ( empty( $_POST['url'] ) ) { // phpcs:ignore WordPress.Security.NonceVerification.Missing return; } $url = esc_url_raw( wp_unslash( $_POST['url'] ) ); // phpcs:ignore WordPress.Security.NonceVerification.Missing $clear_urls = []; $current_url = remove_query_arg( 'trp-edit-translation', $url ); foreach ( $settings['translation-languages'] as $language ) { if ( ! empty( $update_strings[ $language ] ) ) { $clear_urls[] = $converter->get_url_for_language( $language, $current_url, '' ); } } rocket_clean_files( $clear_urls ); } /** * Adjusts the current URL to match the language-specific URL format used by TranslatePress. * * Removes the '#TRPLINKPROCESSED' marker and returns the correct URL for the detected language. * * @param string $current_url The current URL to adjust. * @return string The adjusted URL for the current language. */ public function adjust_current_url( $current_url ) { $translatepress = \TRP_Translate_Press::get_trp_instance(); $converter = $translatepress->get_component( 'url_converter' ); $language = $converter->get_lang_from_url_string( $current_url ); return str_replace( '#TRPLINKPROCESSED', '', $converter->get_url_for_language( $language, $current_url ) ); } }