ワードプレスで作る格安・高機能なホームページ制作

虎舞竜(トラブル)解消!・・・管理人私的備忘録・第2章

というわけで、疑うべきはデータベース。

またまた、Google君にお願いして、調べてみたら、怪しからんぐらいに素晴らしい情報をGet! それがこれ

WordPressデータベース構造

これこれ、これが見たかったのよ~、流石だね!Wordpressちゃん!

このデータベース構造に関する情報と、Wordpressソースコード解析の結果、管理画面で設定する言語情報は、wp_sitemetaテーブルに格納されていることが分かりました。(get_site_option()の中で言語コードを取得するSQLを発行しています)

そこで、データベースを開いてみて、テーブル内容を確認すると、ありました。言語設定情報が。

そこには、こうありました。

meta_key : WPLANG

meta_value :  ja2

WPLANGパラメータはあったが、その値は、ja2 とは、予想外。wp_config.phpのWPLANGの値と同じ ja だと思っていたら、 ja2 だってさ。何なのこれって感じじゃない?一体、何時から仕様が変わったのよ。プンプン!!

データベースの直接更新は、ちょっと怖いので、wp_config.phpのWPLANGの値を “ja2″に変更して、各moファイル名も ja2.mo に変更したら・・・・

何も変わらない・・・

なんでやねん!バカバカ!

それじゃ、テーブルに格納されている WPLANGの値、”ja2″は、正しいということなの?データベースの値が問題ではなく、それ以外の処理に問題があるということなの?

もう脳みそがメメクラゲに侵され、完全に思考停止状態。

データベースの値は正しいか、どうかも分からない、仮にその値が正しいとして、値を正しく取得していない。そうとしか思えない。

管理人のphpの知識も限界で、こうなったらヤケクソで、超反則技を使うことを決意、実行しました。それが、これです。

function get_locale() {
global $locale;

if ( isset( $locale ) )
return apply_filters( ‘locale’, $locale );

// WPLANG is defined in wp-config.
if ( defined( ‘WPLANG’ ) )
$locale = WPLANG;

// If multisite, check options.マルチサイトのチェック
if ( is_multisite() ) {
// Don’t check blog option when installing.
if ( defined( ‘WP_INSTALLING’ ) || ( false === $ms_locale = get_option( ‘WPLANG’ ) ) )
$ms_locale = get_site_option(‘WPLANG’);

if ( $ms_locale !== false )
$locale = $ms_locale;
}

if ( empty( $locale ) )
$locale = ‘en_US’;

$locale = ‘ja’; ※強制的に日本語化
return apply_filters( ‘locale’, $locale );
}

分かります??

get_locale()の処理の一番最後で、強制的に、”ja”コードをセットするように改造しました。

そして、このファイルを所定の位置にアップロードして確認すると、な、なんと

完全日本語モードに戻りました・・・って当たり前だけど。

これで、WordpressがバージョンUPされる度に、このソース部分を書き換えなくてはならない・・・・もっとも、他にも独自に改造している部分があるんで、別にいいんだけどね・・・

これで全て解決(全然、解決じゃないんだけど)、管理人もホット一息、3日間、殆ど寝ずに作業していたので、寝よっと。

その前に、もう一回だけ、あの ja2 パラメータが気になるので、再確認のため、wp_config.php のWPLANG の値を ja2 に変更して確認してみよう。それじゃ、先ほどのソース修正(強制日本化)部分を元に戻して、オリジナルの状態で確認したところ。まだ、wp_config.php のWPLANG の値も変更していないのに(つまり、正常状態の ja)、吃驚!!

日本語モードになっている。

なんでやねん。アホ、バカ!!

この3日間寝食忘れて、調査に没頭した苦労は何だったのか?結局、本来、有るべき設定、ソースコードで有るべき姿(日本語モード)になっている。

全く、理由が分からない。ついに、脳みそからメメクラゲが飛び出してきたわん。

もう、これ以上、考えるのはやめました。それこそ、これ以上調べだしたら、第13章まで書く破目になるかも知れません。

ただ、若しかしたら本質的な原因は、これなじゃないの?という仮説はあります。(間違っているかも知れないけど・・・)

get_site_option()の処理中に、wp_cache_set()という、その名称からして、キャッシュから情報を取得する処理があって、具体的には、何を行っているのか、PHPの知識が乏しいので解析できていません。そこで気になったのが、この問題が発生する直前に、wp-super-cacheという、サイトの表示速度を速めるため、キャッシュ処理を行うプラグインをOnにしたりOFFにしたりしていました。このプラグインは、マルチサイトに対応しているということなのですが、それには、何か設定を必要らしく、今一つ、動作が挙動不審なので、現在は、利用していません。

そのプラグインのキャッシュ情報がデータベースにゴミとなって残っていて、それが原因で、日本語モードが動作しない。しかし、今回の調査、アプローチで、強制的に日本語モードにしたため、その情報でデータベースのある情報(それが何かは分かりません)が正常な値に書き変わって、それで、元に戻ったのではないか?

今のところ思い付く原因、仮説は、これぐらいです。

最終的な原因解明には至りませんでしたが、お陰で、Wordpressの濃い~部分を知ることが出来ました。パチパチ

もし、この文章を読んで、本当の原因は、これですよ!とお分かりの方いたら、コメント、メールでも情報提供大歓迎です。

何でもない夜の事、二度とは戻れない夜♪

もう、朝だ・・・寝よう

宣伝