
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に指定すると効果がなくなるので、メリハリのある設定をしてください。 |
コードの詳しい説明と仕様
1.トップページは、全体に投稿・更新などがあった場合に日付が更新されpriority:1.0,changefreq:weeklyになります。
2.投稿・固定ページは、公開された記事の更新日順で表示されpriority:0.9,changefreq:weeklyになります。
3.カテゴリ・タグは、トップページと同じく全体に投稿・更新などがあった場合に日付が更新され、priority:0.5,changefreq:weeklyになります。



