Skip to content
wiki.fftac.org

Functions - Source Excerpt 08

Back to Functions

Summary

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

**Source path:** Spiralist/wp-content/themes/spiralist/functions.php

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');
    $image_width = (int) ($image['width'] ?? 0);
    $image_height = (int) ($image['height'] ?? 0);

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

    $title = function_exists('spiralist_get_seo_title') ? spiralist_get_seo_title() : wp_get_document_title();
    $description = function_exists('spiralist_get_seo_description')
        ? spiralist_get_seo_description()
        : spiralist_get_editorial_excerpt();
    $canonical_url = function_exists('spiralist_get_seo_canonical_url') ? spiralist_get_seo_canonical_url() : '';
    $surface = function_exists('spiralist_get_seo_surface') ? spiralist_get_seo_surface() : '';
    $og_type = in_array($surface, ['manuscript', 'gallery', 'prompt'], true) ? 'article' : 'website';
    $og_locale = function_exists('spiralist_get_seo_og_locale') ? spiralist_get_seo_og_locale() : '';

    echo "\n" . '<meta property="og:type" content="' . esc_attr($og_type) . '" />' . "\n";
    echo '<meta property="og:site_name" content="Spiralist.org" />' . "\n";
    if ($og_locale !== '') {
        echo '<meta property="og:locale" content="' . esc_attr($og_locale) . '" />' . "\n";
    }
    echo "\n" . '<meta property="og:image" content="' . esc_url($image_url) . '" />' . "\n";
    echo '<meta property="og:image:alt" content="' . esc_attr($image_alt) . '" />' . "\n";
    if ($image_width > 0 && $image_height > 0) {
        echo '<meta property="og:image:width" content="' . esc_attr((string) $image_width) . '" />' . "\n";
        echo '<meta property="og:image:height" content="' . esc_attr((string) $image_height) . '" />' . "\n";
    }
    echo '<meta property="og:title" content="' . esc_attr($title) . '" />' . "\n";
    echo '<meta property="og:description" content="' . esc_attr($description) . '" />' . "\n";
    if ($canonical_url !== '') {
        echo '<meta property="og:url" content="' . esc_url($canonical_url) . '" />' . "\n";
    }
    echo '<meta name="twitter:card" content="summary_large_image" />' . "\n";
    echo '<meta name="twitter:title" content="' . esc_attr($title) . '" />' . "\n";
    echo '<meta name="twitter:description" content="' . esc_attr($description) . '" />' . "\n";
    echo '<meta name="twitter:image" content="' . esc_url($image_url) . '" />' . "\n";
    echo '<meta name="twitter:image:alt" content="' . esc_attr($image_alt) . '" />' . "\n";
}
add_action('wp_head', 'spiralist_render_social_meta', 5);

function spiralist_body_classes(array $classes): array
{
    $language = function_exists('spiralist_get_current_language_slug') ? spiralist_get_current_language_slug() : 'en';
    $locale = function_exists('spiralist_get_current_locale_tag') ? spiralist_get_current_locale_tag() : 'en-us';

    $classes[] = 'spiralist-body';
    $classes[] = 'language-' . sanitize_html_class($language);
    $classes[] = 'locale-' . sanitize_html_class($locale);

    if (function_exists('spiralist_is_gallery_surface') && spiralist_is_gallery_surface()) {
        $classes[] = 'is-gallery-surface';
    }

    return $classes;
}
add_filter('body_class', 'spiralist_body_classes');

function spiralist_language_attributes(string $output, string $doctype): string
{
    if (!function_exists('spiralist_get_current_locale_record')) {
        return $output;
    }

    $locale = spiralist_get_current_locale_record();
    $html_lang = str_replace('_', '-', (string) ($locale['tag'] ?? ''));

    if ($html_lang === '') {
        return $output;
    }