WordPressプラグインなしでサイトマップ.xmlを作る方法

WordPress
WordPressでプラグインを使わずsitemap.xmlタイプ(ロボット用)のサイトマップを作りたいと思います。このサイトは記事が少ないのでまだまだ要らないとは思いますが、今日は重い腰を上げて作ってみます!!
 
なるべくプラグインを使わずにテーマを作りたい派なので、現在使っているプラグインも2個しかありません。先ほどパーマリンクの変更をしたので、泣く泣く前回記事でも取り上げたPermalink Redirectを使ったので2個になりましたが、通常はWP Multibyte Patchのみで運営しています。
なぜ、WP Multibyte Patchを使っているかは次回、記事で取り上げたいと思います。
 
それでは本題に戻りますが、Google Search Consoleなどクローラー用のサイトマップは、Google XML SitemapsやPS Auto Sitemapなどのプラグインですぐに対応できますが、なるべくプラグインを使いたくない事と、過去に何度も不都合で動かなくなったり、設定が面倒だったりで苦い思い出があります。(単純に使い方の問題かも?)
 
特に面倒な設定も要らずに、sitemap.xmlを自分好みにするコードがこちらです。
 

function sitemap_xml() {
date_default_timezone_set('Asia/Tokyo');
$sitemap = '';

$sitemap .= '' .esc_url(home_url('/')). ''.mysql2date("Y-m-d", get_lastpostmodified(), false).'daily1.0';

$args = array(
'posts_per_page' => -1,
'orderby' => 'modified',
'order' => 'DESC',
'post_type' => array('post','page'),
'post_status' => 'publish'
 );
$the_query = new WP_Query( $args );
while ( $the_query->have_posts() ) : $the_query->the_post();
$sitemap .= '' . get_permalink( $post->ID ) . '' .get_the_modified_date("Y-m-d"). 'weekly0.9';
endwhile;wp_reset_postdata();

$cat_data = get_categories();foreach($cat_data as $value){
$sitemap .= '' . get_category_link($value) . '' .mysql2date("Y-m-d", get_lastpostmodified(), false). 'weekly0.5';
}

$tag_data = get_tags();foreach($tag_data as $value){
$sitemap .= '' . get_tag_link($value->term_id) . '' .mysql2date("Y-m-d", get_lastpostmodified(), false). 'weekly0.5';
}
	
$sitemap .= '' . "\n";

$fp = fopen( ABSPATH. "sitemap.xml", 'w' );
if ($fp) {
fwrite($fp, $sitemap);
fclose($fp);
}}

add_action( "publish_post", "sitemap_xml" );
add_action( "publish_page", "sitemap_xml" );

 
functions.phpに、このコードをコピペでいけると思います。
functions.phpに、張る前には必ずバックアップを取ってからご使用ください。
 
圧縮版ですので、見難いですが仕様としては、投稿や固定ページを公開もしくは更新した際に、ドメイン直下(ルート直下)にsitemap.xmlが作られます。
カスタム投稿がある場合は、上記のコードの13行目のarrayに’post’,’page’,’カスタム投稿’追加すれば表示されます。
 
初期設定のパーマリンク(?p=)とドメイン直下にアクセス権限が無い場合は、動作しませんので変更が必要となります。
年別・月別・日別に関しては、サイトマップに表示されません。
changefreqやpriorityに関しては、お好みで変更をしてください。

 

簡単なXMLタグの説明

loc ページの URL です。
lastmod ページの最終更新日です。時間は省略可。
changefreq ページの更新頻度で、(always・hourly・daily・weekly・monthly・yearly・never
)左から更新頻度が高い順に並んでいます。
priority URL の優先度で、0.0 ~ 1.0 までの値を指定します。全て1.0に指定すると効果がなくなるので、メリハリのある設定をしてください。
詳しくはこちらから sitemaps.org

 

コードの詳しい説明と仕様

1.トップページは、全体に投稿・更新などがあった場合に日付が更新されpriority:1.0,changefreq:weeklyになります。
2.投稿・固定ページは、公開された記事の更新日順で表示されpriority:0.9,changefreq:weeklyになります。
3.カテゴリ・タグは、トップページと同じく全体に投稿・更新などがあった場合に日付が更新され、priority:0.5,changefreq:weeklyになります。
 

WordPressプラグインなしでサイトマップ.xmlを作る方法