WordPress MystiqueテーマとqTranslate
MystiqueというWPテーマはなかなかカッコいいのだが、qTranslateを入れてるとなぜかCSSやJavaScriptがうまく読み込まれず、表示や動作に支障が出る。
Mystiqueのcore.phpにクイックハックでなんとかする。テーマの中身をいじるのはアップグレードなどで問題が起きるのであまりおすすめしない。あくまで自己責任で。
core.phpの947行あたりにある mystique_curPageURL()を以下のように変更
function mystique_curPageURL() { $request = esc_url($_SERVER["REQUEST_URI"]); // wp-themes fake request url fix :) if (strpos($_SERVER["SERVER_NAME"], 'wp-themes.com') !== false) $request = str_replace($request, '/wordpress/', '/'); $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") $pageURL .= "s"; $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$request; elseif(strpos($request, "http://")!==false || strpos($request, "https://") !== false ) $pageURL=$request; else $pageURL .= $_SERVER["SERVER_NAME"].$request; return $pageURL; }
この関数は$_SERVER["REQUEST_URI"]の前に"http://ほげ"とかを加えてURLを生成するものだ。
esc_url()関数はURLを安全な文字列にエスケープする関数だが、qTranslateが動いている環境でこれに$_SERVER["REQUEST_URI"]を食わせるとなぜか"/"とかが"http://www.ほげ/"という具合にそれ自体でフルURLが返って来るため、結果としてこの関数が生成するURLは"http://ほげ/http://ほげ/path-to-page"といった不正なものになってしまう。CSSやJavaScriptを読み込むためのURL生成にこれを使っているのでテーマが正常に動作しないと言うことになっていた。