single.php

WordPressの投稿時にサイトマップを作成する方法

WordPressの投稿記事の表示回数など統計情報を表示させると、画面が白くなる場合や表示に時間がかかる場合の対処法を備忘録的に投稿しておきます。

サイトマップの作成

いままでサイトマップなど無視してブログを運営してきましたが、最近クローラーが寄り付かなくなったので、サイトマップを仕込もうとfuntion.phpに書いてみました。

いろいろ試してみましたが、次のコードを[function.php]に追加してXMLを吐き出すことができました。

//投稿の公開時にサイトマップを作成
add_action('publish_post', 'create_sitemap');
 
function create_sitemap() {
  $my_sitemap_posts = get_posts(array(
  'numberposts' => -1,
  'orderby' => 'modified',
  'post_type' => array('post','page'),
  'order' => 'DESC'
  ));
 
  $my_sitemap = '<?xml version="1.0" encoding="UTF-8"?>';
  $my_sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
 
  foreach($my_sitemap_posts as $post) {
    setup_postdata($post);
    $postdate = explode(" ", $post->post_modified);
    $my_sitemap .= '<url>'.
    '<loc>'. get_permalink($post->ID) .'</loc>'.
    '<lastmod>'. $postdate[0] .'</lastmod>'.
    '<changefreq>monthly</changefreq>'.
    '</url>';
  }
  $sitemap .= '</urlset>';
 
  $fp = fopen(ABSPATH . "sitemap.xml", 'w');
  fwrite($fp, $my_sitemap);
  fclose($fp);
}

投稿数が多いと負担がかかる

動作させてみましたが、すぐに問題が発生したので削除しました。

課題になったのは、投稿数が多いと処理に時間がかかります。(sitemap.xmlの作成時間が投稿数と比例して長くなる)

当たり前と言えば、それまでですが投稿時にサイトマップを書き直すというのは毎日投稿しているような場合、結構な負担になりそうなので別の方法を考えます。

投稿数が少ない場合には、例示したコードでもサイトマップを出力できます。

まとめ

WordPressのサイトマップを作成するにはプラグインを追加するのが早道ですが、[function.php]にPHPコードを追加して、WordPressへの投稿時にXMLサイトマップのファイルを出力することが可能です。

ただし投稿数が多い場合には、XMLを作成するための時間が長くなるため、投稿時に作成するのはサーバーへの負担や処理時間が必要になる可能性があります。

WordPressのサイトマップ用のファイル作成をしたい場合の参考になれば幸いです。

スポンサーリンク

最後までご覧いただき、ありがとうございます。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です