読者です 読者をやめる 読者になる 読者になる

WordPress MystiqueテーマとqTranslate

MystiqueというWPテーマはなかなかカッコいいのだが、qTranslateを入れてるとなぜかCSSJavaScriptがうまく読み込まれず、表示や動作に支障が出る。
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"といった不正なものになってしまう。CSSJavaScriptを読み込むためのURL生成にこれを使っているのでテーマが正常に動作しないと言うことになっていた。