single.php

WordPressのサイトマップを動的に作成する方法

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

サイトマップの動的作成

サイトマップを動的に出力できるように、function.phpにルールの上書きを追加します。

これでサイトマップ用のURLにアクセスされた場合には “my-sitemap.php” が呼び出されるようになります。

後は、[my-sitemap.php]を作成して次のコードを追加してWordPressにアップロードします。

<?php
  header('Content-Type: text/xml; charset=' . get_option('blog_charset'), true );
  echo '<?xml version="1.0" encoding="' . get_option('blog_charset') . '"?>' . "\n";
  $args = array(
    'posts_per_page' => -1,
    'orderby' => 'modified',
    'post_type' => array('post', 'page'),
    'order' => 'DESC'
  );
  $the_query = new WP_Query($args);
  ?>
<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">
<url>
  <loc><?php echo home_url(); ?></loc>
  <lastmod><?php echo date('Y-m-d', strtotime(get_lastpostdate('blog'))); ?></lastmod>
  <changefreq>daily</changefreq>
  <priority>1.0</priority>
</url>
<?php
  while ($the_query->have_posts()) {
    $the_query->the_post();
?>
<url>
  <loc><?php echo get_the_permalink(); ?></loc>
  <lastmod><?php echo get_the_modified_date('Y-m-d'); ?></lastmod>
  <changefreq>weekly</changefreq>
  <priority>0.8</priority>
</url>
<?php }; ?>
</urlset>

パーマリンク設定の反映が必要

動作させても、サイトマップが表示されなくて悩みましたがルールを上書きするには[パーマリンク設定]が必要なようです。

WordPressの管理画面で[設定|パーマリンク]メニューで表示される[パーマリンク設定]画面で[変更を保存]をクリックします。([パーマリンク設定]画面の設定項目は変更する必要はありません)

[変更を保存]後に、サイトマップ用のURLにアクセスすると[my-sitemap.php]が実行されるようになります。

まとめ

WordPressのサイトマップを作成するにはプラグインを追加するのが早道ですが、[function.php]にPHPコードを追加して、サイトマップ用のURLにアクセスした場合にXMLサイトマップを出力するように変更してみました。

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

投稿数が多い場合には、事前に用意しておける静的なサイトマップを用意しておいた方が良いかもしれません。

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

スポンサーリンク

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

コメントを残す

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