Sitemaps - Part 02
**Source path:** Spiralist/wp-content/plugins/ns12-manuscript/includes/sitemaps.php
$entries[] = spiralist_book_pages_sitemap_entry(
'page-' . $slug,
'Site Pages',
trim((string) $page->post_title) !== '' ? trim((string) $page->post_title) : ucwords(str_replace('-', ' ', $slug)),
$permalink,
[
'description' => function_exists('get_the_excerpt') ? wp_strip_all_tags((string) get_the_excerpt($page)) : '',
'lastmod' => spiralist_book_pages_sitemap_post_lastmod($page),
'priority' => in_array($slug, ['symbols', 'prompts', 'system', 'gallery', 'contribute'], true) ? '0.80' : '0.65',
]
);
}
return (array) apply_filters('spiralist_book_pages_sitemap_public_page_entries', $entries);
}
function spiralist_book_pages_sitemap_companion_link_entries(): array
{
if (!function_exists('spiralist_book_pages_get_host_links')) {
return [];
}
$host_links = spiralist_book_pages_get_host_links();
$definitions = [
'workspace' => [
'title' => 'Spiralist Workspace',
'description' => 'The optional Spiralist Workspace participation surface.',
'priority' => '0.68',
],
'prompts' => [
'title' => 'Prompts',
'description' => 'Public prompt and participation records.',
'priority' => '0.78',
],
'system' => [
'title' => 'System',
'description' => 'Public Spiralism system reference surface.',
'priority' => '0.78',
],
'contribute' => [
'title' => 'Contribute',
'description' => 'Public contribution and participation surface.',
'priority' => '0.72',
],
'doctrine' => [
'title' => 'Doctrine',
'description' => 'Public doctrine and study surface.',
'priority' => '0.70',
],
];
$entries = [];
foreach ($definitions as $key => $definition) {
$url = trim((string) ($host_links[$key] ?? ''));
if ($url === '') {
continue;
}
$path = trim((string) wp_parse_url($url, PHP_URL_PATH), '/');
if ($path === '' || preg_match('#(^|/)(account|dashboard|login|register|sign-up|wp-admin)(/|$)#i', $path)) {
continue;
}
$entries[] = spiralist_book_pages_sitemap_entry(
'companion-' . $key,
'Companion Plugin Pages',
(string) $definition['title'],
$url,
[
'description' => (string) $definition['description'],
'changefreq' => 'weekly',
'priority' => (string) $definition['priority'],
]
);
}
return (array) apply_filters('spiralist_book_pages_sitemap_companion_link_entries', $entries, $host_links);
}
function spiralist_book_pages_sitemap_manuscript_entries(): array
{
$pages = function_exists('spiralist_book_pages_get_manuscript_page_assets')
? spiralist_book_pages_get_manuscript_page_assets()
: [];
$sections = function_exists('spiralist_book_pages_get_manuscript_section_records')
? spiralist_book_pages_get_manuscript_section_records($pages)
: [];
$entries = [];
$entries[] = spiralist_book_pages_sitemap_entry(
'manuscript-overview',
'Manuscript',
'Spiralism Canonical Manuscript',
spiralist_book_pages_get_manuscript_page_url(),
[
'description' => 'The browser-based reading workstation for the Spiralism canonical manuscript.',
'lastmod' => spiralist_book_pages_sitemap_records_lastmod($pages),
'changefreq' => 'weekly',
'priority' => '0.95',
]
);
foreach ($sections as $section) {
if (!is_array($section)) {
continue;
}
$slug = sanitize_title((string) ($section['slug'] ?? ''));
if ($slug === '') {
continue;
}
$section_pages = array_values(array_filter(
$pages,
static function ($page) use ($slug): bool {
return is_array($page) && sanitize_title((string) ($page['section_slug'] ?? '')) === $slug;
}
));
$entries[] = spiralist_book_pages_sitemap_entry(
'manuscript-section-' . $slug,
'Manuscript Sections',
(string) ($section['title'] ?? ucwords(str_replace('-', ' ', $slug))),
spiralist_book_pages_sitemap_manuscript_route_url('section', $slug),
[
'description' => (string) ($section['summary'] ?? ''),
'lastmod' => spiralist_book_pages_sitemap_records_lastmod($section_pages),
'changefreq' => 'weekly',
'priority' => '0.78',
]
);
}
foreach ($pages as $page) {
if (!is_array($page)) {
continue;
}
$slug = sanitize_title((string) ($page['slug'] ?? ''));
if ($slug === '') {
continue;
}
$title = trim((string) ($page['title'] ?? ''));
if ($title === '') {
$title = 'Manuscript Folio ' . max(1, (int) ($page['sequence'] ?? 1));
}
$image_url = (string) ($page['url'] ?? '');
$entries[] = spiralist_book_pages_sitemap_entry(
'manuscript-folio-' . $slug,
'Manuscript Folios',
$title,
spiralist_book_pages_sitemap_manuscript_route_url('folio', $slug),
[
'description' => (string) ($page['summary'] ?? $page['caption'] ?? ''),
'lastmod' => spiralist_book_pages_sitemap_file_lastmod($page),
'changefreq' => 'monthly',
'priority' => '0.72',
'image' => $image_url !== '' ? [
'loc' => $image_url,
'title' => $title,
'caption' => (string) ($page['caption'] ?? $page['summary'] ?? ''),
] : [],
]
);
}
return (array) apply_filters('spiralist_book_pages_sitemap_manuscript_entries', $entries, $pages, $sections);
}
function spiralist_book_pages_sitemap_core_entries(): array
{
$manuscript_pages = function_exists('spiralist_book_pages_get_manuscript_page_assets')
? spiralist_book_pages_get_manuscript_page_assets()
: [];
$entries = [
spiralist_book_pages_sitemap_entry(
'home',
'Site Pages',
'Spiralist.org',
home_url('/'),
[
'description' => 'Spiralist.org is the human reading and participation surface for Spiralism.',
'lastmod' => spiralist_book_pages_sitemap_records_lastmod($manuscript_pages),
'changefreq' => 'weekly',
'priority' => '1.00',
]
),
];
return (array) apply_filters('spiralist_book_pages_sitemap_core_entries', $entries);
}
function spiralist_book_pages_sitemap_entries(): array
{
$entries = [];
foreach (spiralist_book_pages_sitemap_providers() as $provider) {
$callback = $provider['callback'] ?? null;
if (!is_callable($callback)) {
continue;
}
try {
$provider_entries = (array) call_user_func($callback);
} catch (Throwable $exception) {
do_action('spiralist_book_pages_sitemap_provider_error', $provider, $exception);
continue;
}
$entries = array_merge($entries, $provider_entries);
}
$entries = (array) apply_filters('spiralist_book_pages_sitemap_entries', $entries);
$seen = [];
$seen_urls = [];
return array_values(array_filter($entries, static function (array $entry) use (&$seen, &$seen_urls): bool {
$id = (string) ($entry['id'] ?? '');
if ($id === '' || isset($seen[$id])) {
return false;
}
$urls = array_values(array_filter(array_map('strval', (array) ($entry['urls'] ?? []))));
foreach ($urls as $url) {
$url_key = strtolower(untrailingslashit($url));
if ($url_key !== '' && isset($seen_urls[$url_key])) {
return false;
}
}
$seen[$id] = true;
foreach ($urls as $url) {
$url_key = strtolower(untrailingslashit($url));
if ($url_key !== '') {
$seen_urls[$url_key] = true;
}
}
return true;
}));
}
function spiralist_book_pages_render_xml_sitemap(): void
{
$languages = spiralist_book_pages_sitemap_languages();
$entries = spiralist_book_pages_sitemap_entries();
$default_language = '';