sitemap.xml とアーカイブが壊れた
実は先日から気がついていたのですが、うちの Google Sitemap が 7月くらいからうまく作成できていませんでした。 また、上のメニュにつけている「アーカイブ」もリンククリックしても真っ白になっていました。。 ( yutaka さん、ご指摘ありがとうございました :-))
適当に修正して使っていたらどんどんポンコツブログに。。
とりあえず、sitemap.xml から直してみようということで Google Sitemap Generator for WordPress のソースをごにょごにょしてみる…
どうも、メモリにいっかいエントリ全部読んでから XML をレンダリングしているようだったので、メモリ不足かなと、そのつどちまちまファイルに書くように改造…
なんでだろう、、と思ってもう少しソースをおってみて衝撃の発見。
エントリのリンクを作るのに、1エントリずつ SQL を発行している!
ちゅーことは、うちだと 600 クエリ以上(エントリ数)一度に発行していることにします。 orz
もーしかすると、メモリじゃなくて MySQL にはじかれているのかも。。 ピンときて、使っていたアーカイブの出力用のタグ (<?php wp_get_archives(‘type=postbypost’); ?>) も確認してみると、これも同様な SQL を発行してしまうようです。
ふつうのサーバなら、 600 クエリくらいどーってこともないですがレンタルサーバだとちょっと厳しいですね。
どちらも要はリンクさえ作れればいいので、get_permalink 相当の関数を自前でつくって、プログラムはエントリごとに get_permalink で(get_post して) URI を取得するのではなく、SQL 発行するときに get_permalink するのに必要な情報をいっしょに SELECT するようにしてリンクをつくってあげれば OK だと思います。
とりあえず、うちは POST_ID が URI なので、Google Sitemap Generator は、URI つくるところを get_permalink を使わずに POST_ID から文字列をつくってあげて回避しました。
さて、アーカイブのほうはどうしようか… ちと考えよう。
リミットなしで <?php wp_get_archives(‘type=postbypost’); ?> なんてする場合はお気をつけください。 😛