渡米生活。(日記)

渡米生活。本家から切り離しました。あまり渡米生活に関係のないプログラムネタや音楽ネタなど。

qTranslateをとりあえずwordpress 3.9対応にするパッチ

wordpressの多言語プラグイン、やはりqTranslateが圧倒的に便利なので、ほとんどの管理サイトで使っています。

以前はwpの新バージョンが出て2週間ほどですぐにアップデートが出ていたのですが、最近開発者様がお忙しいのか、なかなかwp3.9対応版が出ません。

で、無理矢理wordpress 3.9.1 でqTranslate 2.5.39を使うと、編集画面でこんなエラーがでちゃうんですね。。


The qTranslate Editor has disabled itself because it hasn't been tested with your Wordpress version yet. This is done to prevent Wordpress from malfunctioning. You can reenable it by clicking here (may cause data loss! Use at own risk!). To remove this message permanently, please update qTranslate to the corresponding version.


バージョンが合わないからエディタはオフにした、もう一回オンにしてもいいけど、データ消えるかもしれないよ、やるなら自己責任で!
といったところでしょうか。

無理矢理エディタ使ってデータ消されてはかなわんので、まあ、エディタは別に使えなくてもいいか、と思っていたら、表示の方にもこんなエラーがでてしまいました。

PHP Catchable fatal error: Object of class WP_Post could not be converted to string in ../wp-content/plugins/qtranslate/qtranslate_core.php on line 455

さすがにこれはまずいので、どうすべ、と解決策を探したらこんなのがでてきました。

Fix qTranslate with WordPress 3.9

要するに、qtranslate_core.phpのqtranslate_core.phpのqtrans_dateFromPostForCurrentLanguage関数を以下のように変更してしまえば良い、ということらしい。

-function qtrans_dateFromPostForCurrentLanguage($old_date, $format ='', $before = '', $after = '') {
+function qtrans_dateFromPostForCurrentLanguage($old_date, $format ='') {
  global $post;
- return qtrans_strftime(qtrans_convertDateFormat($format), mysql2date('U',$post->post_date), $old_date, $before, $after);
+ return qtrans_strftime(qtrans_convertDateFormat($format), mysql2date('U',$post->post_date), $old_date);
}

先頭に-が書いてあるラインがもとのコード、+が書いてあるラインが変更。
つまり、-のラインを+のラインで置き換えれば良い、ということです。

WP3.9からget_the_date関数の引数が変わっちゃったのが問題で、qtrans_dateFromPostForCurrentLanguage関数はフックとして使われているのだけど、3.9以降はオプション引数ひとつしか取れないんだそうな。

これで、表示の方の問題は治ります。
エディタをオンにしても安全かどうかは知りませんので、トライする方は、バックアップをとった上で自己責任で♪


……とここまでやったら、既にqTranslationにパッチをあてたmqTranslationなるものが出ているらしいと判明(笑)

Wordpress多言語化プラグインmqTranslate

mqTranslateをインストールして、qTranslateを無効化し、mqTranslateの言語設定をして有効化するだけで良いらしい。
(Language Switcherのウィジェットを使っている場合は、その設定も必要)


早速入れてみたら、エディタのバグも治ってました。
というわけで、一番簡単なのは、本家qTranslateのアップデートが出るまで、このプラグインを使うことの模様。
なんだかタイトルと違った結論になってしまった。。(笑)