当サイトはWordPressIntegratorを使用して、MODxにWordPressのブログを表示させている。
MODxでMODx本体の記事のsitemapを作成していたが、WordPressのsitemapもマージするように修正した。
WordPressのsitemapはプラグイン「google-sitemap-generator」を使用している。
簡単な対応概要は以下

  1. google-sitemap-generator
    sitemap.phpに以下を追加する。

    function CallMODxSitemap() {
        if(GoogleSitemapGeneratorLoader::LoadPlugin()) {
        $gs = GoogleSitemapGenerator::GetInstance();
        $gs->MODxSitemap();
        }
    }
    if(defined('ABSPATH') && defined('WPINC')) {
         add_action("modxsitemap",
         array("GoogleSitemapGeneratorLoader","CallMODxSitemap"),1000,0);
    }

    sitemap-core.phpに以下を追加する

    function MODxSitemap() {
        BuildSitemap()でsitemapを作成している処理を真似て、sitemap出力をechoする処理
    を編集する
    }
  2. wordpressintegrator修正
    以下をwordpressintegratorのスニペットに以下を追加する

    if ($block=='sitemap') {
        do_action('modxsitemap');
        return;
    }
  3. sitemaps作成ドキュメント
    [[Ditto? &parents=`0` &showInMenuOnly=`1` &depth=`10` &display=`all` &sortBy=`menuindex` &sortDir=`ASC` &format=`html` &tpl=`Sitemapc` &language=`english`]]
    [!WordPressIntegrator?block=sitemap!]
    
    Sitemapc(チャンク)
    <url>
        <loc>[+url+]</loc>
        <lastmod>[+editedon:date=`%Y-%m-%dT%H:%M:%S+09:00`+]</lastmod>
        <changefreq>daily</changefreq>
        <priority>1.0</priority>
      </url>

尚、上記は簡単な概要だが、以下の対応が別途必要

  • wordpressのブログのトップページとMODxのブログドキュメントのページが重複する。どちらかひとつしか出力しないようにする。
  • google-sitemap-generatorでpinを飛ばす処理がある。MODx側のアドレスに変換する等の処置をいれたほうが良い。
  • wordpress側とMODxではURLが違う。
    例えば、
    wordpress:wp_blog/?p=49
    MODx:test.html?p=49
    どちらでもアクセスは可能だが、リダイレクトされないMODx側に合わせたほうが良い。