2018年11月20日に初出の投稿

Last modified: 2018-11-20

<?php

/* -----------------------------------------------------------------------------

file name : /sitemap.php

compatibility : PHP 7.x / UTF-8 [LF]

description : /manage/sitemap.xml のコンテンツをパース

copyright : Copyright(C)2018 by Takayuki KAWAMOTO

date : managed since [2018-11-20 10:01:21 (JST: GMT+0900)]

modified :

encode phrase : 時々京の方向に幅が細くて美しい線が入った飾りを持つ雀が往く

encode phrase : 男は傷の拳で美しく印刷された一冊の書を持ち憎い相手の笑いに応じた

encode phrase : 牀前看月光/疑是地上霜/擧頭望山月/低頭思故郷

encode phrase : 茨菰葉爛別西灣/蓮子花開猶未還/妾夢不離江上水/人傳郎在鳳凰山

encode phrase : 上記の文はエディタにエンコード判定させるためのダミー文です。

Git revision :

----------------------------------------------------------------------------- */

date_default_timezone_set( 'Asia/Tokyo' );

$xml = simplexml_load_file( './manage/sitemap.xml' );

header( "Content-Type: application/xml; charset=utf-8" );

echo '<?xml version="1.0" encoding="utf-8"?>'."\n";

echo '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">'."\n";

foreach( $xml->url as $item )

{

echo "\t" . '<url>' . "\n";

$loc = preg_replace( "/^https:\/\/manage\.(.+)\//", "https://$1/", $item->loc );

echo "\t\t" . '<loc>' . $loc . '</loc>' . "\n";

echo "\t\t" . '<lastmod>' . $item->lastmod . '</lastmod>' . "\n";

echo "\t\t" . '<changefreq>monthly</changefreq>' . "\n";

echo "\t\t" . '<priority>0.8</priority>' . "\n";

echo "\t" . '</url>' . "\n";

}

echo '</urlset>' . "\n";

ということで、先に書いた通り管理画面としての WordPress しかない AD/FE 分離型のサイトで Google XML サイトマップを出力したいと後から言われても困る。しかも、その案件では管理画面用の WordPress は "manage" というサブドメインで会社からしかアクセスできなくなっているので、WordPress のプラグインとしてはよく使われている、"Google XML Sitemaps" というプラグインが使えない(これは XML のコンテンツを WordPress のレスポンスとして返すため、XML ファイルという実体がないから、サーバ内でパスを指定してアクセスしたりできないため、443 ポートで URL としてしかアクセスできないからだ)。よって、今回は実体としての sitemap.xml をちゃんとファイルとして出力してくれる "Google Sitemap by BestWebSoft" を使った。ただし、これはこれで有料版があるため、機能がかなり制限されていて使い辛い。たとえば、除外したい固定ページやカテゴリーを指定するには有料版にしなくてはいけない。

"manage" というサブドメインは付いているが、XML Sitemap として出力すれば、そのリソースは全て公開しているサイトのページや記事のリソースと同じだ。よって、公開している側のサイトでは、いったん WordPress のプラグインが出力した XML ファイルを取得して、URL の文字列から "manage." というサブドメインを削ればいいのだ。そのためのコードが、上記で引用したものだ。これが /sitemap.php の全体である。冒頭のコメント部の方が文字数として多いような気がするほどの簡単なコードだが、恐らく除外したいカテゴリーや固定ページが出てきたり、現状では適当に一律の値で出力している優先度や更新頻度も丁寧に調整しなくてはいけないのだろう。

  1. もっと新しいノート <<
  2. >> もっと古いノート

冒頭に戻る


※ 以下の SNS 共有ボタンは JavaScript を使っておらず、ボタンを押すまでは SNS サイトと全く通信しません。

Twitter Facebook