qTranslateで、よく不可解な挙動を見せるので(編集時に言語を切り替えたときとか)、もっと安心して使えるようにしたい。その対策を講じて現在構築しているサイトがあるので、そのやり方の紹介。日本語と英語を切り替えられるようにする方法。
>> qTranslate ハウツーとハマりどころ
qTranslateを使う目的は
- 言語の切り替えが簡単で、選択されている言語がわかる
- 言語別パーマリンクを階層的に作ってくれる (http://hogehoge/moge と http://hogehoge/en/moge とか)
なので、この2点さえ使えれば、あとはtitleやcontentsの保存している怪しい仕掛けはどうでもいい(でもtitle部の保存については問題なかったのでこのまま使う)。
準備
用意するのは、
- qTranslate
- Custom Fieldを簡単に入れられるプラグイン( Advanced Custom Fields や Custom Field Templateなど)Advanced Custom FieldsがUI的に分かりやすいのでこちらを使う
この記事の通りに、最新版WordPressでも使えるようにする。
設定の仕方
- qTranslateを設定する
- Advanced Custom Fieldsで、content_ja(日本語コンテンツ)とcontent_en(英語コンテンツ)の入力欄を作る。

これを翻訳したい全投稿タイプについて

- 本文をこれらのcustom fieldsに入力する
- the_contentフィルタで言語を切り替える。デフォルト言語を日本語としている設定で、functions.phpに
// 元のtinymceはいらないので隠す
add_action('admin_head', 'hide_tinymce' );
function hide_tinymce()
{
$post_type = get_current_post_type();
$hide_in = array('post', 'page', 'event', 'collaboration', 'funding', 'publication');
if( in_array($post_type, $hide_in) )
{
?>
<style type="text/css">
#postdivrich { display:none; }
</style>
<?php
}
}
// the_content フィルタ
function the_content_replace($text)
{
global $post;
$lang = qtrans_getLanguage();
$content_ja = get_post_meta($post->ID, 'content_ja', true);
$content_en = get_post_meta($post->ID, 'content_en', true);
if($lang == 'en' && $content_en != '')
{
$text = $content_en;
}
else
$text = $content_ja;
return $text;
}
add_filter('the_content', 'the_content_replace','9');
// get post meta by lang
function get_post_meta_lang($post_id, $key = '', $single = false)
{
$lang = qtrans_getLanguage();
$key2 = $key.'_'.$lang;
return get_metadata('post', $post_id, $key2, $single);
}
あとは、qTranslateの翻訳で表示が切り替わる。同様にしてさらに多言語化も可能。
タイトルや本文を表示する場合は、必ず the_contentやthe_title(); get_the_title()などを使う。また、ホームのURLは bloginfo(‘url’) を使うこと。
また、同様にtitleもfilter hookで変えられるし、post metaも get_post_meta_lang()みたいなのを作ってやればできる。
注意したいのは、contentはpost metaに保存されるので、履歴が残らない。(post metaの履歴を残すプラグイン開発中)
