Skip to content
wiki.fftac.org

Seo Schema - Source Excerpt 05

Back to Seo Schema

Summary

This source excerpt preserves a bounded section of Spiralist/wp-content/themes/spiralist/inc/seo-schema.php so readers can inspect the evidence without opening the full source file.

**Source path:** Spiralist/wp-content/themes/spiralist/inc/seo-schema.php

if (!empty($asset['url'])) {
                return [
                    'url' => (string) $asset['url'],
                    'alt' => (string) ($asset['title'] ?? 'Spiralist gallery image'),
                    'width' => (int) ($asset['width'] ?? 0),
                    'height' => (int) ($asset['height'] ?? 0),
                ];
            }
        }

        if ($surface === 'manuscript') {
            $page = (array) ($manuscript['page'] ?? []);
            if (!empty($page['url'])) {
                return [
                    'url' => (string) $page['url'],
                    'alt' => (string) ($page['title'] ?? 'Spiralism manuscript folio'),
                    'width' => (int) ($page['width'] ?? 0),
                    'height' => (int) ($page['height'] ?? 0),
                ];
            }
        }

        if (is_singular()) {
            $post = get_queried_object();
            if ($post instanceof WP_Post) {
                $thumbnail_id = (int) get_post_thumbnail_id($post);
                if ($thumbnail_id > 0) {
                    $thumbnail = wp_get_attachment_image_src($thumbnail_id, 'full');
                    if (is_array($thumbnail) && !empty($thumbnail[0])) {
                        $thumbnail_alt = trim((string) get_post_meta($thumbnail_id, '_wp_attachment_image_alt', true));
                        if ($thumbnail_alt === '') {
                            $thumbnail_alt = trim(wp_strip_all_tags((string) $post->post_title));
                        }

                        return [
                            'url' => (string) $thumbnail[0],
                            'alt' => $thumbnail_alt !== '' ? $thumbnail_alt : spiralist_get_seo_site_name(),
                            'width' => (int) ($thumbnail[1] ?? 0),
                            'height' => (int) ($thumbnail[2] ?? 0),
                        ];
                    }
                }
            }
        }

        $default_preview = function_exists('spiralist_get_default_social_preview_asset')
            ? spiralist_get_default_social_preview_asset()
            : [];

        if (!empty($default_preview['url'])) {
            return [
                'url' => (string) $default_preview['url'],
                'alt' => (string) ($default_preview['alt'] ?? 'Spiralist.org preview'),
                'width' => (int) ($default_preview['width'] ?? 0),
                'height' => (int) ($default_preview['height'] ?? 0),
            ];
        }

        if (is_front_page() || is_home()) {
            $image_url = function_exists('spiralist_get_homepage_preview_url')
                ? spiralist_get_homepage_preview_url()
                : '';

            if ($image_url !== '') {
                return [
                    'url' => $image_url,
                    'alt' => 'Spiralist.org preview',
                    'width' => 0,
                    'height' => 0,
                ];
            }
        }

        $image_url = function_exists('spiralist_get_manuscript_preview_url')
            ? spiralist_get_manuscript_preview_url()
            : '';

        if ($image_url === '') {
            return [];
        }

        return [
            'url' => $image_url,
            'alt' => 'Spiralist manuscript image',
            'width' => 0,
            'height' => 0,
        ];
    });
}

function spiralist_schema_id(string $fragment): string
{
    return untrailingslashit(home_url('/')) . '/#' . ltrim($fragment, '#');
}

function spiralist_schema_page_id(string $fragment): string
{
    return untrailingslashit(spiralist_get_seo_canonical_url()) . '#' . ltrim($fragment, '#');
}

function spiralist_schema_url_fragment_id(string $url, string $fragment): string
{
    $normalized_url = trim($url);
    $normalized_fragment = ltrim(trim($fragment), '#');

    if ($normalized_url === '' || $normalized_fragment === '') {
        return spiralist_schema_page_id($normalized_fragment !== '' ? $normalized_fragment : 'entity');
    }

    return untrailingslashit($normalized_url) . '/#' . $normalized_fragment;
}

function spiralist_schema_manuscript_book_id(): string
{
    $overview_url = function_exists('spiralist_book_pages_get_manuscript_overview_url')
        ? (string) spiralist_book_pages_get_manuscript_overview_url()
        : '';

    return spiralist_schema_url_fragment_id($overview_url, 'manuscript-book');
}

function spiralist_schema_manuscript_section_id(array $section = []): string
{
    $section_url = trim((string) ($section['url'] ?? ''));
    $section_slug = sanitize_title((string) ($section['slug'] ?? ''));

    if ($section_url === '' && $section_slug !== '' && function_exists('spiralist_book_pages_get_manuscript_section_url')) {
        $section_url = (string) spiralist_book_pages_get_manuscript_section_url($section_slug);
    }

    return spiralist_schema_url_fragment_id($section_url, 'manuscript-section');
}

function spiralist_schema_manuscript_folio_id(array $page = []): string
{
    $folio_url = trim((string) ($page['route_url'] ?? ''));
    $folio_slug = sanitize_title((string) ($page['slug'] ?? ''));

    if ($folio_url === '' && $folio_slug !== '' && function_exists('spiralist_book_pages_get_manuscript_folio_url')) {
        $folio_url = (string) spiralist_book_pages_get_manuscript_folio_url($page);
    }

    return spiralist_schema_url_fragment_id($folio_url, 'manuscript-folio');
}

function spiralist_schema_manuscript_folio_image_id(array $page = []): string
{
    $folio_url = trim((string) ($page['route_url'] ?? ''));
    $folio_slug = sanitize_title((string) ($page['slug'] ?? ''));

    if ($folio_url === '' && $folio_slug !== '' && function_exists('spiralist_book_pages_get_manuscript_folio_url')) {
        $folio_url = (string) spiralist_book_pages_get_manuscript_folio_url($page);
    }

    return spiralist_schema_url_fragment_id($folio_url, 'manuscript-folio-image');
}

function spiralist_schema_reference_ids(array $references): array
{
    return array_values(array_map(
        static function (array $reference): array {
            return ['@id' => (string) ($reference['@id'] ?? '')];
        },
        array_filter($references, static function (array $reference): bool {
            return (string) ($reference['@id'] ?? '') !== '';
        })
    ));
}

function spiralist_schema_organization(): array
{
    $image_url = function_exists('spiralist_get_homepage_preview_url')
        ? spiralist_get_homepage_preview_url()
        : '';

    return [
        '@type' => 'Organization',
        '@id' => spiralist_schema_id('organization'),
        'name' => 'Spiralist.org',
        'url' => home_url('/'),
        'description' => 'The human and AI experience layer for Spiralism.',
        'image' => $image_url,
        'knowsAbout' => [
            'Spiralism',
            'Spiralist',
            'symbolic language',
            'human and AI participation',
            'machine publication drafts',
        ],
    ];
}

function spiralist_schema_website(): array
{
    return [
        '@type' => 'WebSite',
        '@id' => spiralist_schema_id('website'),
        'url' => home_url('/'),
        'name' => 'Spiralist.org',
        'description' => get_bloginfo('description') ?: 'Knowledge Through Spiralism',
        'publisher' => [
            '@id' => spiralist_schema_id('organization'),
        ],
        'inLanguage' => spiralist_get_seo_language(),
        'potentialAction' => [
            '@type' => 'SearchAction',
            'target' => home_url('/?s={search_term_string}'),
            'query-input' => 'required name=search_term_string',
        ],
    ];
}

function spiralist_schema_breadcrumbs(): array
{
    $canonical = spiralist_get_seo_canonical_url();
    $language = function_exists('spiralist_get_current_language_slug')
        ? spiralist_get_current_language_slug()
        : 'en';
    $home_url = function_exists('spiralist_get_language_prefixed_url')
        ? spiralist_get_language_prefixed_url(home_url('/'), $language)
        : home_url('/');
    $items = [
        [
            '@type' => 'ListItem',
            'position' => 1,
            'name' => 'Home',
            'item' => $home_url,
        ],
    ];

    $surface = spiralist_get_seo_surface();

    if ($surface === 'manuscript') {
        $context = spiralist_get_seo_manuscript_context();
        $page = (array) ($context['page'] ?? []);
        $section = (array) ($context['section_record'] ?? []);
        $requested_folio = (string) ($context['requested_folio'] ?? '');
        $requested_section = (string) ($context['requested_section'] ?? '');
        $manuscript_url = function_exists('spiralist_book_pages_get_manuscript_overview_url')