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になります。