qTranslateで Hide Untranslated Content オプションがうまく動かなくなった場合の対処

Shunsuke Sawada

前もこれにはまってしまった記憶があるのに、メモしてなかった。

Wordpressで制作するウェブサイトを多言語化する際に役立つプラグインがqTranslate。

プラグインページ:http://wordpress.org/extend/plugins/qtranslate/

使い方とか:http://www.webcreatorbox.com/tech/qtranslate-multilingual-wordpress-plugin/

日本では使うことがあまりなかったけど、こっちにいるとウェブサイトは2か国語でって場合が結構あるので、ほぼ全案件に使っている気がする。
それぞれの言語でコンテンツがまったく一緒ってことも少ないから、qTranslateのHide Untranslated Content機能は素晴らしい。

がしかし、動かないことがしばしば。
うごかないとコレやってね。と注意書きが書いてあります。

This function will not work correctly if you installed qTranslate on a blog with existing entries. In this case you will need to take a look at "Convert Database" under "Advanced Settings".

でもやってもだいたい動かないんだよね。
そんな場合は、下記のファイルをいじります。
119行あたり。
wp-content/plugins/qtranslate/qtranslate_hooks.php

1
2
3
4
5
6
7
function qtrans_excludeUntranslatedPosts($where) {
    global $q_config, $wpdb;
    if($q_config['hide_untranslated'] && !is_singular()) {
        $where .= " AND $wpdb->posts.post_content LIKE '%<!--:".qtrans_getLanguage()."-->%'";
    }
    return $where;
}

ってなってるのを下のようにする。

1
2
3
4
5
6
7
function qtrans_excludeUntranslatedPosts($where) {
    global $q_config, $wpdb;
    if($q_config['hide_untranslated'] && !is_singular()) {
        $where .= " AND $wpdb->posts.post_title LIKE '%<!--:".qtrans_getLanguage()."-->%'";
    }
    return $where;
}

AND $wpdb->posts.post_content を AND $wpdb->posts.post_title
にするだけです。

これをすると、タイトルが空の場合は、(日本語)タイトル・・・・なんてなることもなくなります。

参考リンク
http://www.qianqin.de/qtranslate/forum/viewtopic.php?f=3&t=810&p=11398&hilit=hide+content#p11398

Shunsuke Sawada

おすすめの記事

justhostがハッキングされてる件
Wordpressのアップロード作業を楽にする
CakePHP 2.x + Search Plugin アソシエーションされたモデルの情報で検索する
10