トップ
業務紹介
お知らせ
ブログ
個人情報保護方針

お問い合わせ

sitemap.xmlをカスタムポストの投稿更新で自動で更新する

sitemap.xmlをカスタムポストの投稿更新で自動で更新する

web技術
2021/04/02

sitemap.xmlをカスタムポストの投稿更新で自動で更新する

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をクロールしてくれない疑惑があるので焦っております…何故…!?