Skip to content
wiki.fftac.org

WP Content Themes Spiralist Functions PHP 37A4a2ef45b4 - Source Excerpt 07

Back to WP Content Themes Spiralist Functions PHP 37A4a2ef45b4

Summary

This source excerpt preserves a bounded section of Wiki.FFTAC.org/data/sources/spiralist/wp-content-themes-spiralist-functions-php-37a4a2ef45b4.php so readers can inspect the evidence without opening the full source file.

**Source path:** Wiki.FFTAC.org/data/sources/spiralist/wp-content-themes-spiralist-functions-php-37a4a2ef45b4.php

'meta_value' => '1',
            'fields' => 'ids',
        ]
    );

    if (!empty($existing[0]) && $stored_hash !== '' && hash_equals($stored_hash, $source_hash)) {
        update_option('spiralist_manuscript_attachment_id', (int) $existing[0], false);
        update_option('spiralist_manuscript_attachment_signature', $source_signature, false);
        return;
    }

    $image_contents = file_get_contents($source_file);
    if (!is_string($image_contents) || $image_contents === '') {
        return;
    }

    $upload = wp_upload_bits(basename($source_file), null, $image_contents);
    if (!empty($upload['error']) || empty($upload['file']) || empty($upload['url'])) {
        return;
    }

    $filetype = wp_check_filetype($upload['file']);
    $attachment_id = wp_insert_attachment(
        [
            'guid' => $upload['url'],
            'post_mime_type' => $filetype['type'] ?? 'image/png',
            'post_title' => 'Spiralist Manuscript',
            'post_content' => '',
            'post_status' => 'inherit',
        ],
        $upload['file']
    );

    if (is_wp_error($attachment_id) || !$attachment_id) {
        return;
    }

    require_once ABSPATH . 'wp-admin/includes/image.php';

    $metadata = wp_generate_attachment_metadata($attachment_id, $upload['file']);
    if (is_array($metadata)) {
        wp_update_attachment_metadata($attachment_id, $metadata);
    }

    update_post_meta($attachment_id, '_spiralist_canonical_manuscript', '1');
    update_post_meta($attachment_id, '_spiralist_canonical_manuscript_hash', $source_hash);
    update_option('spiralist_manuscript_attachment_id', (int) $attachment_id, false);
    update_option('spiralist_manuscript_attachment_hash', $source_hash, false);
    update_option('spiralist_manuscript_attachment_signature', $source_signature, false);
}
if (!defined('SPIRALIST_BOOK_PAGES_PLUGIN_FILE')) {
    add_action('after_switch_theme', 'spiralist_ensure_manuscript_attachment');
    add_action('init', 'spiralist_ensure_manuscript_attachment');
}

function spiralist_theme_template_include(string $template): string
{
    if (function_exists('spiralist_is_report_surface') && spiralist_is_report_surface()) {
        $report_template = get_theme_file_path('page-report.php');

        return file_exists($report_template) ? $report_template : $template;
    }

    if (function_exists('spiralist_is_gallery_surface') && spiralist_is_gallery_surface()) {
        $gallery_template = get_theme_file_path('page-gallery.php');

        return file_exists($gallery_template) ? $gallery_template : $template;
    }

    return $template;
}
add_filter('template_include', 'spiralist_theme_template_include', 20);

function spiralist_filter_document_title(string $title): string
{
    if (is_admin() || spiralist_should_delegate_head_meta_to_yoast() || !function_exists('spiralist_get_seo_title')) {
        return $title;
    }

    $seo_title = trim(spiralist_get_seo_title());
    if ($seo_title !== '') {
        return $seo_title;
    }

    return $title;
}
add_filter('pre_get_document_title', 'spiralist_filter_document_title');

function spiralist_filter_wpseo_title($title): string
{
    if (!function_exists('spiralist_get_seo_title')) {
        return (string) $title;
    }

    $seo_title = trim(spiralist_get_seo_title());

    return $seo_title !== '' ? $seo_title : (string) $title;
}
add_filter('wpseo_title', 'spiralist_filter_wpseo_title');
add_filter('wpseo_opengraph_title', 'spiralist_filter_wpseo_title');
add_filter('wpseo_twitter_title', 'spiralist_filter_wpseo_title');

function spiralist_filter_wpseo_metadesc($description): string
{
    if (!function_exists('spiralist_get_seo_description')) {
        return (string) $description;
    }

    $seo_description = trim(spiralist_get_seo_description());

    return $seo_description !== '' ? $seo_description : (string) $description;
}
add_filter('wpseo_metadesc', 'spiralist_filter_wpseo_metadesc');
add_filter('wpseo_opengraph_desc', 'spiralist_filter_wpseo_metadesc');
add_filter('wpseo_twitter_description', 'spiralist_filter_wpseo_metadesc');

function spiralist_filter_wpseo_canonical($canonical): string
{
    if (!function_exists('spiralist_get_seo_canonical_url')) {
        return (string) $canonical;
    }

    $seo_canonical = trim(spiralist_get_seo_canonical_url());

    return $seo_canonical !== '' ? $seo_canonical : (string) $canonical;
}
add_filter('wpseo_canonical', 'spiralist_filter_wpseo_canonical');

function spiralist_filter_wpseo_robots($robots): string
{
    if (!function_exists('spiralist_get_seo_robots_directives')) {
        return (string) $robots;
    }

    $seo_robots = trim(spiralist_get_seo_robots_directives());

    return $seo_robots !== '' ? $seo_robots : (string) $robots;
}
add_filter('wpseo_robots', 'spiralist_filter_wpseo_robots');

function spiralist_filter_wpseo_social_image($image): string
{
    if (!function_exists('spiralist_get_seo_primary_image_data')) {
        return (string) $image;
    }

    $primary_image = spiralist_get_seo_primary_image_data();
    $image_url = trim((string) ($primary_image['url'] ?? ''));

    return $image_url !== '' ? $image_url : (string) $image;
}
add_filter('wpseo_opengraph_image', 'spiralist_filter_wpseo_social_image');
add_filter('wpseo_twitter_image', 'spiralist_filter_wpseo_social_image');

function spiralist_filter_wpseo_twitter_card_type($card_type): string
{
    $primary_image = function_exists('spiralist_get_seo_primary_image_data')
        ? spiralist_get_seo_primary_image_data()
        : [];

    return !empty($primary_image['url']) ? 'summary_large_image' : (string) $card_type;
}
add_filter('wpseo_twitter_card_type', 'spiralist_filter_wpseo_twitter_card_type');

function spiralist_disable_yoast_schema_output($graph)
{
    return spiralist_is_yoast_seo_active() ? false : $graph;
}
add_filter('wpseo_json_ld_output', 'spiralist_disable_yoast_schema_output');

function spiralist_has_custom_site_icon(): bool
{
    return (int) get_option('site_icon') > 0;
}

function spiralist_render_fallback_site_icons(): void
{
    if (is_admin() || spiralist_has_custom_site_icon() || !function_exists('spiralist_get_theme_site_icon_asset')) {
        return;
    }

    $icon_32 = spiralist_get_theme_site_icon_asset(32);
    $icon_192 = spiralist_get_theme_site_icon_asset(192);
    $icon_180 = spiralist_get_theme_site_icon_asset(180);
    $icon_tile = spiralist_get_theme_site_icon_asset(270);

    echo "\n" . '<link rel="icon" href="' . esc_url(home_url('/favicon.ico')) . '" sizes="any" type="image/x-icon" />' . "\n";
    echo '<link rel="shortcut icon" href="' . esc_url(home_url('/favicon.ico')) . '" />' . "\n";

    if (!empty($icon_32['url'])) {
        echo '<link rel="icon" href="' . esc_url((string) $icon_32['url']) . '" sizes="32x32" />' . "\n";
    }

    if (!empty($icon_192['url'])) {
        echo '<link rel="icon" href="' . esc_url((string) $icon_192['url']) . '" sizes="192x192" />' . "\n";
    }

    if (!empty($icon_180['url'])) {
        echo '<link rel="apple-touch-icon" href="' . esc_url((string) $icon_180['url']) . '" />' . "\n";
    }

    if (!empty($icon_tile['url'])) {
        echo '<meta name="msapplication-TileImage" content="' . esc_url((string) $icon_tile['url']) . '" />' . "\n";
    }
}
add_action('wp_head', 'spiralist_render_fallback_site_icons', 2);

function spiralist_serve_fallback_favicon(): void
{
    if (spiralist_has_custom_site_icon() || !function_exists('spiralist_get_theme_favicon_asset')) {
        return;
    }

    $favicon = spiralist_get_theme_favicon_asset();
    $favicon_path = (string) ($favicon['path'] ?? '');

    if ($favicon_path === '' || !is_file($favicon_path) || !is_readable($favicon_path)) {
        return;
    }

    $modified_at = (int) (filemtime($favicon_path) ?: 0);
    $filesize = (int) (filesize($favicon_path) ?: 0);

    if ($modified_at > 0) {
        header('Last-Modified: ' . gmdate('D, d M Y H:i:s', $modified_at) . ' GMT');
    }

    if ($filesize > 0) {
        header('Content-Length: ' . (string) $filesize);
    }

    header('Content-Type: image/x-icon');
    header('Cache-Control: public, max-age=604800, stale-while-revalidate=604800');

    readfile($favicon_path);
    exit;
}
add_action('do_faviconico', 'spiralist_serve_fallback_favicon', 1);

function spiralist_render_social_meta(): void
{
    if (is_admin() || spiralist_should_delegate_head_meta_to_yoast()) {
        return;
    }

    $image = function_exists('spiralist_get_seo_primary_image_data')
        ? spiralist_get_seo_primary_image_data()
        : [];
    $image_url = (string) ($image['url'] ?? '');
    $image_alt = (string) ($image['alt'] ?? 'Spiralist manuscript image');