post_type); } $slug = trim((string) $translated, '/'); if (strtolower($lang) === strtolower($default)) { return '/' . $cpt_prefix . $slug . $trail; } return '/' . $lang . '/' . $cpt_prefix . $slug . $trail; } add_filter('post_link', function ($permalink, $post, $leavename) { if (is_admin()) return $permalink; if (ai_translate_is_xml_request()) return $permalink; $lang = \AITranslate\AI_Lang::current(); $default = \AITranslate\AI_Lang::default(); if ($lang === null || $default === null || strtolower($lang) === strtolower($default)) { return $permalink; } $trail = substr($permalink, -1) === '/' ? '/' : ''; $path = ai_translate_build_translated_path((int) $post->ID, $lang, $default, $trail); return $path === null ? $permalink : home_url($path); }, 10, 3); add_filter('page_link', function ($permalink, $post_id, $sample) { if (is_admin()) return $permalink; if (ai_translate_is_xml_request()) return $permalink; $lang = \AITranslate\AI_Lang::current(); $default = \AITranslate\AI_Lang::default(); if ($lang === null || $default === null || strtolower($lang) === strtolower($default)) { return $permalink; } $trail = substr($permalink, -1) === '/' ? '/' : ''; $path = ai_translate_build_translated_path((int) $post_id, $lang, $default, $trail); return $path === null ? $permalink : home_url($path); }, 10, 3); /** * Rewrite internal permalinks (custom post types) to stable translated slugs for current language. */ add_filter('post_type_link', function ($permalink, $post, $leavename, $sample) { if (is_admin()) return $permalink; if (ai_translate_is_xml_request()) return $permalink; $lang = \AITranslate\AI_Lang::current(); $default = \AITranslate\AI_Lang::default(); if ($lang === null || $default === null || strtolower($lang) === strtolower($default)) { return $permalink; } $trail = substr($permalink, -1) === '/' ? '/' : ''; $path = ai_translate_build_translated_path((int) $post->ID, $lang, $default, $trail); return $path === null ? $permalink : home_url($path); }, 10, 4);