Thank you @anon77445132
I’ve now added support for both single and multi language situations
kirby()->routes(array(
array(
'pattern' => 'sitemap.xml',
'action' => function() {
$sitemap = '<?xml version="1.0" encoding="utf-8"?>';
$sitemap .= '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">';
if(!empty(site()->languages())) {
foreach(site()->pages()->index() as $page){
foreach(site()->languages() as $language) {
$sitemap .= add_sitemap_url($page, $language);
}
}
} else {
foreach(site()->pages()->index() as $page){
$sitemap .= add_sitemap_url($page);
}
}
$sitemap .= '</urlset>';
return new Response($sitemap, 'xml');
}
)
));
function add_sitemap_url($page, $language = null){
$exclude = c::get('sitemap.exclude', array('error'));
$important = c::get('sitemap.important', array('contact'));
if(!in_array($page->uri(), $exclude) and $page->isVisible()){
$url = '<url>';
$url .= '<loc>' . ($language ? html($page->url($language->code())) : html($page->url())) . '</loc>';
$url .= '<lastmod>' . $page->modified('c') . '</lastmod>';
$url .= '<priority>' . (($page->isHomePage()||in_array($page->uri(), $important)) ? 1 : 0.6/$page->depth()) . '</priority>';
$url .= '</url>';
return $url;
}
}