私は同じ問題を抱えていたので、この機能を追加するためにqTranslateを修正しました。私がしたことは、言語情報を含む Cookie を保存することでした。この Cookie は、ユーザーがウィジェットで言語のフラグをクリックすると保存されます。
私の論理は次のとおりです。
- すべての言語を表示するウィジェットで、次のパラメーターを各 URL に追加します。
- このパラメーターが存在する場合、「save_lang」という名前と値 = $lang で Cookie を保存します
- すぐに同じページにリダイレクトしますが、そのパラメータ「save_lang」はありません
- 任意のページを呼び出すと、現在、qTranslate は default_language を設定の言語に設定します。Cookie「save_lang」が存在する場合、default_language を Cookie に保存されたものでオーバーライドします
いくつかの手順:
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 を変更します (それぞれの言語 URL に「save_lang」パラメータを追加するため):
この行が表示されるたびに:
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;
}
これが役立つことを願っています:)