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の履歴を残すプラグイン開発中)