Functions - Source Excerpt 08
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;
}