プラグインなしでsitemap.xmlを作成する【WordPress】

  • 投稿 : 2017-07-23
add_action('publish_post', 'create_sitemap'); //記事更新時
add_action('publish_page', 'create_sitemap'); //固定ページ更新時

function create_sitemap() {
  //記事、固定ページのデータを取得
  $sitemap_posts = get_posts(array(
    'numberposts' => -1, //全件
    'orderby' => 'modified', //更新日順
    'post_type'  => array('post','page'), // 投稿とページの両方
    'order'    => 'DESC' //降順
  ));

  $sitemap_data = '<?xml version="1.0" encoding="UTF-8"?>'."\n";
  $sitemap_data .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";

  foreach($sitemap_posts as $post) {
    setup_postdata($post);

    $postdate = explode(" ", $post->post_modified);

  	$sitemap_data .= '<url>'."\n".
      '<loc>'. get_permalink($post->ID) .'</loc>'."\n".
      '<lastmod>'. $postdate[0] .'</lastmod>'."\n".
      '<changefreq>monthly</changefreq>'."\n".
    '</url>'."\n";
  }
  $sitemap_data .= '</urlset>'."\n";

  //sitemap.xmlを出力
  file_put_contents(ABSPATH . "sitemap.xml",$sitemap_data);

}

テンプレートタグ/get posts - WordPress Codex 日本語版
関数リファレンス/add action - WordPress Codex 日本語版
関数リファレンス/setup postdata - WordPress Codex 日本語版


上記をテーマの「functions.php」に追記すると、sitemap.xmlが「記事更新」「固定ページ更新」時に作成されるようになります。数百件程度の記事なら大丈夫だと思いますが、記事数が多くなるつれて負荷が高くなるので注意が必要だとは思います。

プラグインとかの場合は、「記事更新」「固定ページ更新」に毎回でなくて、1日1回とかそういう感じで生成していることの方が多いかとは思います。

出力の内容は「$sitemap_data」なので、このあたりを書き換えたら好きに変更できるかと思います。

参考

Create sitemap.xml In WordPress Without Using Any Plugins | emrahgunduz.com
You Might Not Need That WordPress Plugin
スポンサーリンク