2011年10月20日木曜日

正常に表示されてるのに404エラー[Wordpress]

あるサイトの仕上げにHTML Validationチェックをかけていた時のこと。

ちゃんと画面は表示されているのに、Validation ServiceにURLを送信すると404エラーになるページがありました。

どのページも共通してWordpressのヘッダーをrequireしていたので、原因はWordpressしかないと考えました。


require_once 'blog/wp-blog-header.php';

do_something..


こんな感じでwp-blog-header.phpをrequireしていたので、まずはwp-blog-header.phpのソースをチェック。


if ( !isset($wp_did_header) ) {
    $wp_did_header = true;
    require_once( dirname(__FILE__) . '/wp-load.php' );
    wp();
    require_once( ABSPATH . WPINC . '/template-loader.php' );
}


こんなのが書いてあります。

行数が少ないので、一個ずつコメントアウトして動作チェックしてみると、wp() 関数をコメントアウトしたら404エラーが出なくなりました。
そして、template-loader.phpを読まなくても問題ないので、ここで必要なのは wp-load.phpだけということになります。

なので、wp-blog-header.phpのrequireをやめて、wp-load.phpを読み込むように変更しました。


require_once 'blog/wp-load.php';

do_something...


こうすることで404エラーは出なくなり、validationも無事通すことができました。

結局wp()関数が何をしているのかは検証してないけど、Wordpressの機能だけ使えたら問題ないので必要ないでしょう。


これって、画面が正常に表示されているだけに気づきにくい問題です。
もしWordpressを組み込んだサイトを作って、wp-blog-header.phpをrequireしている人がいたら、一度W3CのHTML Validation ServiceにURLを送ってみるとか、Chromeの「要素の検証」で「Network」を開いてチェックしてみるとかしてみた方がいいですね。

ちなみに今回のWordpressのバージョンは3.2系だったと思います。

0 件のコメント:

コメントを投稿