Skip to content
wiki.fftac.org

Sitemaps - Part 02

Back to Sitemaps

**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 = '';