sitemap.xmlを自動生成するwordpressプラグインはいくつもありますが、カスタムポストに対応したものはあるのでしょうか…。
高機能なものは必要ないし、あまりプラグインに頼りたくない(メンテナンスやアップデートなどのサポートの関係で)ので、シンプルでチューニングがしやすいものをさっと探してみましたが、んーという感じでした。
やることは簡単で決まっているので、作ることにしました。
必要なことは、
●wordpressのカスタムポストを含めた記事全部の取得。(get_postsを使いたい)
●xml形式でファイルの生成
●カスタムポストや固定ページで投稿、更新をした際に自動生成(投稿、更新後にフックで実行)
そのため、
1:get_postsを使い、xmlを出力する固定ページを1つ作成。
2:function.phpに、投稿更新後xml出力固定ページにアクセスするフック処理を追加。
この2つを作成しました。
1:get_postsを使い、xmlを出力する固定ページを1つ作成。
これは簡単です。いつも通りget_postsをして、必要な情報(URLと最終更新日)をループで出力するだけです。
xmlはいつも新規書き込みモードで作ります。
トップページや固定ページなどは固定出力を。カスタムポストが増えたらget_postsも増やしていくことにしました。
毎回全記事にアクセスすることになりますが、記事も少ないですしとりあえずということで。
固定ページとして公開し、この固定ページにアクセスすればとりあえずsitemap.xmlが生成、更新されるのを確認しました。
2:function.phpに、投稿更新後xml出力固定ページにアクセスするフック処理を追加。
次にfunction.phpに、フック処理を追加しました。
投稿、更新をした時のフック名は、固定ページやカスタムポストごとに指定しないといけなかったようです。ちょっとハマりました。
weblogというpost_typeだったのでpublish_weblogというフック名にします。ついでに固定ページも。固定ページはpublish_page。
あとは処理としてはfile_get_contentsで、先程のxml出力用の固定ページのURLにアクセスするだけです。
このページは隠す方がいいはずですので、function.phpのみで完結したりするべきでしょうが、今回はとりあえず。
これでsitemap.xmlが勝手に再生成されるようになりました。
本来ならプラグイン化して、カスタムポストに対応した設定ができるように…というのがゴールでしょうが、今回はとりあえず。
というのも、なんかgoogleがカスタムポストのURLをクロールしてくれない疑惑があるので焦っております…何故…!?