多言語対応サイトを作るために、qTranslateプラグインをインストールした。そのメモ。
インストールと使い方
プラグインからインストール。
qTranslateを日本語WPに入れると、デフォルトの言語が英語に切り替わってしまう。最初に入れた状態では、中国語、英語、ドイツ語が入っているので、Settings (設定) -> Languages の下の表から、中国語と英語をdisableし、日本語をenableする。
表示中の言語は
$lang = qtrans_getLanguage();
を使うと取れるので、これを使ってcustom fieldsも表示できるようにテーマを編集する。その他便利な関数はこちらで紹介されている:
ハマりどころ
正直、qTranslateを使ってみて、色々と不具合があるように思える。ある言語で編集していたら、他の言語の欄が空っぽになっていたり、保存したら全部空っぽになっていたり、他のCustom Fieldsプラグイン(Advanced Custom FieldsやCustom Field Template)とconflictしたり。。
WP3.4.1以降の開発も止まっているようなんだが、現状のqTranslateの機能(url書き換えなど)は有用なので使いたい。そんなわけで、とりあえずハマりどころを説明する。Custom Fieldをどうしても使いたいので、その対処方法は後日紹介する。
- 自分のWPのバージョンに合ったものをインストールすること。2013年1月17日現在、WP3.5対応のものが出ていないため、インストールすると、

と表示される。暫定的な回避策は、qtranslate.phpの90行目を
define('QT_SUPPORTED_WP_VERSION', '3.5')
とする。対応版が公開されたら、ちゃんとアップデートしよう。
- 他のCustom Fieldsプラグイン(Advanced Custom FieldsやCustom Field Template)とconflictする。無効にすれば使えるのだが。。
- contentおよびtitleは ちゃんと the_content()やthe_title(), get_the_title()を使う
- カスタム投稿タイプで使うためには、register_post_type()のsupportsにeditorを入れておかないと使えないようだ。
じゃあ、どうする?
カスタム投稿タイプによって、エディタを隠したい場合は、こうする: functions.phpに
add_action('admin_head', 'hide_tinymce' );
function hide_tinymce()
{
$post_type = get_current_post_type();
// 隠したいcustom post typeのarray
$hide_in = array('hoge', 'moge');
if( in_array($post_type, $hide_in) )
{
?>
<style type="text/css">
#postdivrich { display:none; }
</style>
<?php
}
}
function get_current_post_type() {
global $post, $typenow, $current_screen;
//we have a post so we can just get the post type from that
if ( $post && $post->post_type )
return $post->post_type;
//check the global $typenow - set in admin.php
elseif( $typenow )
return $typenow;
//check the global $current_screen object - set in sceen.php
elseif( $current_screen && $current_screen->post_type )
return $current_screen->post_type;
//lastly check the post_type querystring
elseif( isset( $_REQUEST['post_type'] ) )
return sanitize_key( $_REQUEST['post_type'] );
//we do not know the post type!
return null;
}
