ちゃんと画面は表示されているのに、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 件のコメント:
コメントを投稿