Skip to content
wiki.fftac.org

Class Uai1 Head Links

**Site relevance:** Spiralist.org

**Memory type:** plugin source memory

**Source path:** Spiralist/wp-content/plugins/uai-1-wordpress/includes/class-uai1-head-links.php

**Size:** 1.4 KB

Summary

if (!defined('ABSPATH'))

Source Preview

This source file is short enough to preview directly on its source-memory page.

<?php

if (!defined('ABSPATH')) {
    exit;
}

class UAI1_Head_Links
{
    private const UAIX_CONTENT_TYPE = 'application/vnd.uaix.uai+json';

    public static function render_alternate_link(): void
    {
        $links = self::get_uaix_links();

        echo "\n" . '<link rel="service" type="' . esc_attr(self::UAIX_CONTENT_TYPE) . '" href="' . esc_url($links['discovery']) . '" />' . "\n";
        echo '<link rel="alternate" type="' . esc_attr(self::UAIX_CONTENT_TYPE) . '" href="' . esc_url($links['capability']) . '" />' . "\n";
        echo '<meta name="uaix-uai-1" content="1.0" />' . "\n";
    }

    public static function send_alternate_header(): void
    {
        if (is_admin() || wp_doing_ajax() || (defined('REST_REQUEST') && REST_REQUEST)) {
            return;
        }

        $links = self::get_uaix_links();
        header('Link: <' . esc_url_raw($links['discovery']) . '>; rel="service"; type="' . self::UAIX_CONTENT_TYPE . '"', false);
        header('Link: <' . esc_url_raw($links['capability']) . '>; rel="alternate"; type="' . self::UAIX_CONTENT_TYPE . '"', false);
        header('X-UAI-1: 1.0', false);
        header('X-UAIX-Discovery: ' . esc_url_raw($links['discovery']), false);
    }

    private static function get_uaix_links(): array
    {
        return [
            'discovery' => rest_url('uaix/v1/discovery'),
            'capability' => rest_url('uaix/v1/capability'),
        ];
    }
}