вот на сколько я понял это код в qtranslate отвечает за модификацию урл, но как допилят?
function qtrans_convertURL($url='', $lang='', $forceadmin = false) {
global $q_config;
// invalid language
if($url=='') $url = esc_url($q_config['url_info']['url']);
if($lang=='') $lang = $q_config['language'];
if(defined('WP_ADMIN')&&!$forceadmin) return $url;
if(!qtrans_isEnabled($lang)) return "";
// & workaround
$url = str_replace('&','&',$url);
$url = str_replace('&','&',$url);
// check for trailing slash
$nottrailing = (strpos($url,'?')===false && strpos($url,'#')===false && substr($url,-1,1)!='/');
// check if it's an external link
$urlinfo = qtrans_parseURL($url);
$home = rtrim(get_option('home'),"/");
if($urlinfo['host']!='') {
// check for already existing pre-domain language information
if($q_config['url_mode'] == QT_URL_DOMAIN && preg_match("#^([a-z]{2}).#i",$urlinfo['host'],$match)) {
if(qtrans_isEnabled($match[1])) {
// found language information, remove it
$url = preg_replace("/".$match[1]."\./i","",$url, 1);
// reparse url
$urlinfo = qtrans_parseURL($url);
}
}
if(substr($url,0,strlen($home))!=$home) {
return $url;
}
// strip home path
$url = substr($url,strlen($home));
} else {
// relative url, strip home path
$homeinfo = qtrans_parseURL($home);
if($homeinfo['path']==substr($url,0,strlen($homeinfo['path']))) {
$url = substr($url,strlen($homeinfo['path']));
}
}
// check for query language information and remove if found
if(preg_match("#(&|\?)lang=([^&\#]+)#i",$url,$match) && qtrans_isEnabled($match[2])) {
$url = preg_replace("#(&|\?)lang=".$match[2]."&?#i","$1",$url);
}
// remove any slashes out front
$url = ltrim($url,"/");
// remove any useless trailing characters
$url = rtrim($url,"?&");
// reparse url without home path
$urlinfo = qtrans_parseURL($url);
// check if its a link to an ignored file type
$ignore_file_types = preg_split('/\s*,\s*/', strtolower($q_config['ignore_file_types']));
$pathinfo = pathinfo($urlinfo['path']);
if(isset($pathinfo['extension']) && in_array(strtolower($pathinfo['extension']), $ignore_file_types)) {
return $home."/".$url;
}
// ignore wp internal links
if(preg_match("#^(wp-login.php|wp-signup.php|wp-register.php|wp-admin/)#", $url)) {
return $home."/".$url;
}
switch($q_config['url_mode']) {
case QT_URL_PATH: // pre url
// might already have language information
if(preg_match("#^([a-z]{2})/#i",$url,$match)) {
if(qtrans_isEnabled($match[1])) {
// found language information, remove it
$url = substr($url, 3);
}
}
if(!$q_config['hide_default_language']||$lang!=$q_config['default_language']) $url = $lang."/".$url;
break;
case QT_URL_DOMAIN: // pre domain
if(!$q_config['hide_default_language']||$lang!=$q_config['default_language']) $home = preg_replace("#//#","//".$lang.".",$home,1);
break;
default: // query
if(!$q_config['hide_default_language']||$lang!=$q_config['default_language']){
if(strpos($url,'?')===false) {
$url .= '?';
} else {
$url .= '&';
}
$url .= "lang=".$lang;
}
}
// see if cookies are activated
if(!$q_config['cookie_enabled'] && !$q_config['url_info']['internal_referer'] && $urlinfo['path'] == '' && $lang == $q_config['default_language'] && $q_config['language'] != $q_config['default_language'] && $q_config['hide_default_language']) {
// :( now we have to make unpretty URLs
$url = preg_replace("#(&|\?)lang=".$match[2]."&?#i","$1",$url);
if(strpos($url,'?')===false) {
$url .= '?';
} else {
$url .= '&';
}
$url .= "lang=".$lang;
}
// & workaround
$complete = str_replace('&','&',$home."/".$url);
// remove trailing slash if there wasn't one to begin with
if($nottrailing && strpos($complete,'?')===false && strpos($complete,'#')===false && substr($complete,-1,1)=='/')
$complete = substr($complete,0,-1);
return $complete;
}