我遇到了同样的问题,我修改了 qTranslate 以添加此功能。我所做的是保存一个带有语言信息的 cookie,当用户点击小部件中的语言标志时,这个 cookie 被保存。
我的逻辑如下:
- 在显示所有语言的小部件中,将以下参数添加到每个 URL:?save_lang
- 当此参数存在时,保存一个名为“save_lang”且值 = $lang 的 cookie
- 立即重定向到同一页面,但没有该参数“save_lang”
- 调用任何页面时,现在 qTranslate 会将 default_language 设置为设置中的那个。如果 cookie 'save_lang' 存在,那么我将用保存在 cookie 中的那个覆盖 default_language
这么几个步骤:
修改 qtranslate_core.php 文件:
//Save the cookie if param ?save_lang is set, and then redirect to the same page without the param
add_action('qtranslate_loadConfig', 'custom_qtranslate_loadConfig');
function custom_qtranslate_loadConfig() {
global $q_config, $_COOKIE;
// By default, if the save_lang cookie is set, use that one instead
if(isset($_COOKIE['save_lang'])) {
$q_config['default_language'] = $_COOKIE['save_lang'];
}
}
// Priority 3: load after function qtrans_init (it has priority 2)
add_action('plugins_loaded', 'custom_after_qtrans_init', 3);
function custom_after_qtrans_init() {
global $q_config, $_COOKIE;
if (isset($_GET["save_lang"])) {
// cookie will last 30 days
setcookie('save_lang', $q_config['language'], time()+86400*30, $q_config['url_info']['home'], $q_config['url_info']['host']);
wp_redirect(remove_url_param("save_lang", $q_config['url_info']['url']));
exit();
}
}
function remove_url_param($param_rm, $url) {
$new_url = str_replace("?$param_rm", '', $url);
$new_url = str_replace("&$param_rm", '', $new_url);
return $new_url;
}
修改文件 qtranslate_widget.php(将 'save_lang' 参数添加到每个语言的 URL):
每次看到这一行:
qtrans_convertURL($url, $language)
将其替换为:
add_url_param(qtrans_convertURL($url, $language), "save_lang")
然后添加该功能:
// Function to add a parameter to a URL
function add_url_param($url, $name, $value = '') {
// Pick the correct separator to use
$separator = "?";
if (strpos($url,"?")!==false)
$separator = "&";
// Find the location for the new parameter
$insertPosition = strlen($url);
if (strpos($url,"#")!==false)
$insertPosition = strpos($url,"#");
$withValue = ($value == '' ? '' : "=$value");
// Build the new url
$newUrl = substr_replace($url,"$separator$name$withValue",$insertPosition,0);
return $newUrl;
}
我希望这有帮助 :)