{"id":437,"date":"2026-02-25T22:24:27","date_gmt":"2026-02-25T22:24:27","guid":{"rendered":"https:\/\/ssnmmi.org.sa\/?page_id=437"},"modified":"2026-02-25T22:25:12","modified_gmt":"2026-02-25T22:25:12","slug":"check-in","status":"publish","type":"page","link":"https:\/\/ssnmmi.org.sa\/ar\/check-in\/","title":{"rendered":"Check in"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"437\" class=\"elementor elementor-437\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b3aecfe e-flex e-con-boxed e-con e-parent\" data-id=\"b3aecfe\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-c9053eb elementor-widget elementor-widget-shortcode\" data-id=\"c9053eb\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">    <style>\n        .aepORG{\n            --p:#4A7DF5; \/* \u062f\u0631\u062c\u0629 \u0627\u0644\u0623\u0632\u0631\u0642 \u0627\u0644\u062c\u062f\u064a\u062f\u0629 *\/\n            --s:#5DCEBE; \/* \u062f\u0631\u062c\u0629 \u0627\u0644\u062a\u0631\u0643\u0648\u0627\u0632 \u0627\u0644\u062c\u062f\u064a\u062f\u0629 *\/\n            --d:#141320; \/* \u0644\u0648\u0646 \u0627\u0644\u062e\u0644\u0641\u064a\u0629 \u0627\u0644\u062f\u0627\u0643\u0646 *\/\n            --card-bg: rgba(255, 255, 255, 0.03);\n            --ink:#ffffff;\n            --muted:#aab2bd;\n            font-family:'Montserrat', sans-serif;\n        }\n        .aepORG *{box-sizing:border-box}\n        .aepWrap{max-width:420px;margin:0 auto;padding:14px; background: var(--d); min-height: 100vh;}\n        .aepHeader{display:flex;align-items:center;justify-content:space-between;margin-bottom:24px}\n        .aepHeader h1{margin:0;font-size:22px;font-weight:900;color:var(--ink)}\n        .aepHeader p{margin:4px 0 0;font-size:12px;color:var(--muted)}\n        .aepAvatar{width:42px;height:42px;background:var(--p);border-radius:999px;display:flex;align-items:center;justify-content:center;color:#fff;font-weight:900}\n\n        .scanBox{background:var(--card-bg);border-radius:22px;padding:20px;margin-bottom:20px;box-shadow:0 18px 40px rgba(0,0,0,.3); border: 1px solid rgba(255,255,255,0.05);}\n        .scannerFrame{position:relative;border:4px solid rgba(255,255,255,0.1);border-radius:18px;overflow:hidden;background:#000}\n        .scannerLine{position:absolute;top:0;left:0;width:100%;height:4px;background:var(--p);box-shadow:0 0 15px var(--p);animation:scan 2s linear infinite;z-index:5;pointer-events:none}\n        @keyframes scan{0%{top:0}50%{top:100%}100%{top:0}}\n\n        \/* \u2705 force video visible *\/\n        #aepQrReader{position:relative;width:100%;height:100%;}\n        #aepQrReader video{width:100% !important;height:100% !important;object-fit:cover !important;}\n\n        .scanActions{display:grid;gap:12px;margin-top:20px}\n        .btnSoft{\n            width:100%;padding:14px 16px;border-radius:14px;\n            background: var(--p); color:#fff; border:none;\n            font-weight:900;cursor:pointer;transition:all .3s ease;\n            box-shadow: 0 4px 15px rgba(74, 125, 245, 0.3);\n        }\n        .btnSoft:hover{background: var(--s); box-shadow: 0 8px 25px rgba(93, 206, 190, 0.5); transform:translateY(-2px)}\n        .hint{color:var(--muted);font-size:12px;line-height:1.45;text-align:center;margin-top:10px}\n\n        .card{background:var(--card-bg);border-radius:22px;border:1px solid rgba(255,255,255,0.05);box-shadow:0 18px 40px rgba(0,0,0,.4);overflow:hidden}\n        .statusBar{padding:12px 14px;display:flex;gap:10px;align-items:center}\n        .statusOk{background:rgba(93, 206, 190, 0.1)}\n        .statusBad{background:rgba(239, 68, 68, 0.1)}\n        .statusDot{width:34px;height:34px;border-radius:999px;display:flex;align-items:center;justify-content:center;color:#fff}\n        .dotOk{background:var(--s)}\n        .dotBad{background:#ef4444}\n        .statusText{font-size:12px;font-weight:900;letter-spacing:.08em;text-transform:uppercase}\n        .okTxt{color:var(--s)}\n        .badTxt{color:#ef4444}\n\n        .body{padding:20px}\n        .rowTop{display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px}\n        .lbl{font-size:10px;color:var(--muted);font-weight:900;letter-spacing:.12em;text-transform:uppercase;margin:0 0 4px}\n        .name{margin:0;font-size:18px;font-weight:900;color:var(--ink)}\n        .pkg{display:inline-flex;align-items:center;gap:8px;background:rgba(74, 125, 245, 0.1);border:1px solid rgba(74, 125, 245, 0.2);color:var(--p);\n             padding:6px 10px;border-radius:12px;font-size:10px;font-weight:900;white-space:nowrap}\n        .grid{display:grid;grid-template-columns:1fr 1fr;gap:10px;margin-top:10px}\n        .box{background:rgba(255,255,255,0.02);border:1px solid rgba(255,255,255,0.05);border-radius:14px;padding:10px}\n        .val{margin:0;font-size:13px;font-weight:900;color:var(--ink)}\n        .valSm{margin:0;font-size:12px;font-weight:800;color:var(--muted)}\n\n        .btnCheckin{\n            width:100%;margin-top:12px;padding:14px 14px;border-radius:16px;border:0;cursor:pointer;\n            background: var(--p); color:#fff; font-weight:900;\n            box-shadow: 0 4px 15px rgba(74, 125, 245, 0.3);\n            transition: all .3s ease;\n        }\n        .btnCheckin:hover{background: var(--s); transform:translateY(-2px); box-shadow: 0 8px 25px rgba(93, 206, 190, 0.5);}\n        .btnCheckin:disabled{opacity:.6;cursor:not-allowed;transform:none}\n\n        .msgRed{margin-top:10px;padding:10px 12px;border-radius:14px;background:rgba(239, 68, 68, 0.1);border:1px solid rgba(239, 68, 68, 0.2);color:#ff6b6b;font-weight:900;font-size:12px}\n    <\/style>\n\n    <div class=\"aepORG\">\n        <div class=\"aepWrap\" data-nonce=\"bc8f0728b1\" data-ajax=\"https:\/\/ssnmmi.org.sa\/wp-admin\/admin-ajax.php\">\n\n            <div class=\"aepHeader\">\n                <div>\n                    <h1>Scan Ticket<\/h1>\n                    <p>Organizer: Admin Panel<\/p>\n                <\/div>\n                <div class=\"aepAvatar\">OP<\/div>\n            <\/div>\n\n            <div class=\"scanBox\">\n                <div class=\"scannerFrame\" style=\"aspect-ratio:1\/1;\">\n                    <div class=\"scannerLine\"><\/div>\n                    <div id=\"aepQrReader\" style=\"width:100%;height:100%;\"><\/div>\n                <\/div>\n\n                <div class=\"scanActions\">\n                    <button class=\"btnSoft\" type=\"button\" id=\"aepStartScan\">\n                        <i class=\"fa-solid fa-camera\" style=\"margin-right:8px;\"><\/i> Start Camera Scan\n                    <\/button>\n                    <button class=\"btnSoft\" type=\"button\" id=\"aepStopScan\" style=\"display:none; background:#ef4444; box-shadow:none;\">\n                        <i class=\"fa-solid fa-stop\" style=\"margin-right:8px;\"><\/i> Stop\n                    <\/button>\n                <\/div>\n\n                <div class=\"hint\">Point the camera at the QR on the attendee ticket.<\/div>\n            <\/div>\n\n            <div id=\"aepResult\" style=\"display:none;\"><\/div>\n\n        <\/div>\n    <\/div>\n\n    <script>\n    (function(){\n        const root = document.querySelector('.aepWrap[data-ajax]');\n        if(!root) return;\n\n        const ajaxUrl = root.getAttribute('data-ajax');\n        const nonce   = root.getAttribute('data-nonce');\n\n        const btnStart = document.getElementById('aepStartScan');\n        const btnStop  = document.getElementById('aepStopScan');\n        const resultBox= document.getElementById('aepResult');\n\n        let html5Qr = null;\n        let scanning = false;\n        let lastText = '';\nfunction renderSuccess(t){\n  resultBox.style.display = 'block';\n  resultBox.innerHTML = `\n    <div class=\"card\">\n      <div class=\"statusBar statusOk\">\n        <div class=\"statusDot dotOk\"><i class=\"fa-solid fa-check\"><\/i><\/div>\n        <div class=\"statusText okTxt\">Checked In Done<\/div>\n      <\/div>\n\n      <div class=\"body\">\n        <div style=\"display:flex;align-items:flex-start;justify-content:space-between;gap:10px;margin-bottom:12px\">\n          <div>\n            <p class=\"lbl\">Attendee Name<\/p>\n            <h3 class=\"name\">${esc(t.name)}<\/h3>\n            <p style=\"margin:6px 0 0;color:var(--s);font-size:12px;font-weight:800;\">${esc(t.event_title)}<\/p>\n          <\/div>\n          <span class=\"pkg\"><i class=\"fa-solid fa-crown\"><\/i> ${esc(t.package_title)}<\/span>\n        <\/div>\n\n        <div class=\"grid\">\n          <div class=\"box\">\n            <p class=\"lbl\">Ticket ID<\/p>\n            <p class=\"val\">${esc(t.ticket_id)}<\/p>\n          <\/div>\n          <div class=\"box\">\n            <p class=\"lbl\">Status<\/p>\n            <p class=\"valSm\" style=\"color:#5DCEBE;font-weight:900;\">Checked In Successfully<\/p>\n          <\/div>\n          <div class=\"box\">\n            <p class=\"lbl\">Date & Time<\/p>\n            <p class=\"valSm\">${esc(t.datetime)}<\/p>\n          <\/div>\n          <div class=\"box\">\n            <p class=\"lbl\">Location<\/p>\n            <p class=\"valSm\">${esc(t.location)}<\/p>\n          <\/div>\n        <\/div>\n\n        <div style=\"margin-top:12px;padding:10px 12px;border-radius:14px;background:rgba(93, 206, 190, 0.1);border:1px solid rgba(93, 206, 190, 0.2);color:#5DCEBE;font-weight:900;font-size:12px;\">\n          \u2705 Attendance recorded successfully. Scan the next ticket.\n        <\/div>\n      <\/div>\n    <\/div>\n  `;\n}\n        function esc(s){return (s||'').toString().replace(\/[&<>\"']\/g, m => ({'&':'&amp;','<':'&lt;','>':'&gt;','\"':'&quot;',\"'\":'&#39;'}[m]));}\n\n        function renderCard(data){\n            const t = data.ticket;\n            const already = !!data.already_checked_in;\n\n            const statusClass = already ? 'statusBad' : 'statusOk';\n            const dotClass    = already ? 'dotBad' : 'dotOk';\n            const txtClass    = already ? 'badTxt' : 'okTxt';\n            const statusText  = already ? 'Already Checked In' : 'Valid Ticket Detected';\n\n            const when = already ? `<div class=\"msgRed\">This attendee already checked in.<br><span style=\"font-weight:800;color:#ff6b6b;\">${esc(data.checked_in_at || '')}${data.checked_in_by ? ' \u2022 By: '+esc(data.checked_in_by) : ''}<\/span><\/div>` : '';\n\n            const btn = already\n              ? ''\n              : `<button class=\"btnCheckin\" id=\"aepConfirmBtn\">Confirm Attendance<\/button>`;\n\n            resultBox.style.display = 'block';\n            resultBox.innerHTML = `\n              <div class=\"card\">\n                <div class=\"statusBar ${statusClass}\">\n                  <div class=\"statusDot ${dotClass}\">\n                    ${already ? '<i class=\"fa-solid fa-triangle-exclamation\"><\/i>' : '<i class=\"fa-solid fa-check\"><\/i>'}\n                  <\/div>\n                  <div class=\"statusText ${txtClass}\">${statusText}<\/div>\n                <\/div>\n\n                <div class=\"body\">\n                  <div class=\"rowTop\">\n                    <div>\n                      <p class=\"lbl\">Attendee Name<\/p>\n                      <h3 class=\"name\">${esc(t.name)}<\/h3>\n                      <p style=\"margin:6px 0 0;color:var(--muted);font-size:12px;font-weight:800;\">${esc(t.event_title)}<\/p>\n                    <\/div>\n                    <span class=\"pkg\"><i class=\"fa-solid fa-crown\"><\/i> ${esc(t.package_title)}<\/span>\n                  <\/div>\n\n                  <div class=\"grid\">\n                    <div class=\"box\">\n                      <p class=\"lbl\">Ticket ID<\/p>\n                      <p class=\"val\">${esc(t.ticket_id)}<\/p>\n                    <\/div>\n                    <div class=\"box\">\n                      <p class=\"lbl\">Order<\/p>\n                      <p class=\"valSm\">#${esc(t.order_id)} \/ Item ${esc(t.item_id)}<\/p>\n                    <\/div>\n\n                    <div class=\"box\">\n                      <p class=\"lbl\">Customer ID<\/p>\n                      <p class=\"valSm\">${t.customer_id ? esc(t.customer_id) : 'Guest'}<\/p>\n                    <\/div>\n                    <div class=\"box\">\n                      <p class=\"lbl\">Status<\/p>\n                      <p class=\"valSm\" style=\"color:${already ? '#ef4444' : '#4A7DF5'};font-weight:900;\">\n                        ${already ? 'Checked In' : 'Pending Check-in'}\n                      <\/p>\n                    <\/div>\n\n                    <div class=\"box\">\n                      <p class=\"lbl\">Date & Time<\/p>\n                      <p class=\"valSm\">${esc(t.datetime)}<\/p>\n                    <\/div>\n                    <div class=\"box\">\n                      <p class=\"lbl\">Location<\/p>\n                      <p class=\"valSm\">${esc(t.location)}<\/p>\n                    <\/div>\n\n                    <div class=\"box\">\n                      <p class=\"lbl\">Email<\/p>\n                      <p class=\"valSm\">${esc(t.email || '\u2014')}<\/p>\n                    <\/div>\n                    <div class=\"box\">\n                      <p class=\"lbl\">Phone<\/p>\n                      <p class=\"valSm\">${esc(t.phone || '\u2014')}<\/p>\n                    <\/div>\n                  <\/div>\n\n                  ${btn}\n                  ${when}\n                <\/div>\n              <\/div>\n            `;\n\n            if (!already) {\n                const confirmBtn = document.getElementById('aepConfirmBtn');\n                confirmBtn.addEventListener('click', async ()=>{\n                    confirmBtn.disabled = true;\n                    confirmBtn.textContent = 'Processing...';\n\n                    const fd = new FormData();\n                    fd.append('action','aep_checkin_confirm');\n                    fd.append('nonce',nonce);\n                    fd.append('order_id',t.order_id);\n                    fd.append('item_id',t.item_id);\n                    fd.append('event_id',t.event_id);\n                    fd.append('package_id',t.package_id);\n\n                    const r = await fetch(ajaxUrl,{method:'POST',credentials:'same-origin',body:fd});\n                    const j = await r.json();\n\n                    if (j && j.success) {\n                        renderSuccess(t);\n                    } else {\n                        confirmBtn.disabled = false;\n                        confirmBtn.textContent = 'Confirm Attendance';\n                        alert('Check-in failed: ' + (j && j.data && j.data.msg ? j.data.msg : ''));\n                    }\n                });\n            }\n        }\n\n        async function lookup(scanned){\n            const fd = new FormData();\n            fd.append('action','aep_checkin_lookup');\n            fd.append('nonce',nonce);\n            fd.append('scanned_url',scanned);\n\n            const r = await fetch(ajaxUrl,{method:'POST',credentials:'same-origin',body:fd});\n            const j = await r.json();\n\n            if(!j || !j.success){\n                resultBox.style.display = 'block';\n                resultBox.innerHTML = `\n                  <div class=\"card\">\n                    <div class=\"statusBar statusBad\">\n                      <div class=\"statusDot dotBad\"><i class=\"fa-solid fa-triangle-exclamation\"><\/i><\/div>\n                      <div class=\"statusText badTxt\">Invalid \/ Not Found<\/div>\n                    <\/div>\n                    <div class=\"body\">\n                      <div class=\"msgRed\">Failed to validate this QR.<br><span style=\"font-weight:800;\">${esc((j && j.data && j.data.msg) ? j.data.msg : 'Unknown error')}<\/span><\/div>\n                    <\/div>\n                  <\/div>\n                `;\n                return;\n            }\n\n            renderCard(j.data);\n        }\n\n        async function start(){\n            if (scanning) return;\n\n            resultBox.style.display = 'none';\n            resultBox.innerHTML = '';\n\n            const waitLib = async () => {\n                for (let i=0; i<30; i++){\n                    if (typeof window.Html5Qrcode !== 'undefined') return true;\n                    await new Promise(r=>setTimeout(r, 150));\n                }\n                return false;\n            };\n\n            const libOk = await waitLib();\n            if (!libOk){\n                resultBox.style.display = 'block';\n                resultBox.innerHTML = `\n                  <div class=\"card\">\n                    <div class=\"statusBar statusBad\">\n                      <div class=\"statusDot dotBad\"><i class=\"fa-solid fa-triangle-exclamation\"><\/i><\/div>\n                      <div class=\"statusText badTxt\">Scanner Library Not Loaded<\/div>\n                    <\/div>\n                    <div class=\"body\">\n                      <div class=\"msgRed\">html5-qrcode library is not available.<\/div>\n                    <\/div>\n                  <\/div>\n                `;\n                return;\n            }\n\n            const readerEl = document.getElementById('aepQrReader');\n            const rect = readerEl ? readerEl.getBoundingClientRect() : {width:0,height:0};\n\n            if(!readerEl || rect.width < 80 || rect.height < 80){\n                resultBox.style.display = 'block';\n                resultBox.innerHTML = `<div class=\"card\"><div class=\"body\"><div class=\"msgRed\">Scanner container size error.<\/div><\/div><\/div>`;\n                return;\n            }\n\n            try{\n                if (html5Qr) { await html5Qr.stop(); await html5Qr.clear(); }\n            }catch(e){}\n            html5Qr = null;\n\n            btnStart.disabled = true;\n            btnStart.textContent = 'Starting...';\n\n            try{\n                html5Qr = new Html5Qrcode(\"aepQrReader\");\n                scanning = true;\n\n                btnStop.style.display = 'block';\n                btnStop.disabled = false;\n\n                const config = { fps: 12, qrbox: { width: 260, height: 260 } };\n\n                await html5Qr.start(\n                    { facingMode: \"environment\" },\n                    config,\n                    async (decodedText) => {\n                        if(!decodedText) return;\n                        if (decodedText === lastText) return;\n                        lastText = decodedText;\n                        await lookup(decodedText);\n                    }\n                );\n\n                btnStart.style.display = 'none';\n                btnStart.disabled = false;\n                btnStart.textContent = 'Start Camera Scan';\n\n            } catch (e) {\n                scanning = false;\n                btnStart.style.display = 'block';\n                btnStart.disabled = false;\n                btnStart.textContent = 'Start Camera Scan';\n                btnStop.style.display = 'none';\n            }\n        }\n\n        async function stop(){\n            if(!html5Qr || !scanning) return;\n            btnStop.disabled = true;\n            try{\n                await html5Qr.stop();\n                await html5Qr.clear();\n            }catch(e){}\n            html5Qr = null;\n            scanning = false;\n            btnStart.style.display = 'block';\n            btnStart.disabled = false;\n            btnStop.style.display  = 'none';\n            btnStop.disabled = false;\n        }\n\n        btnStart.addEventListener('click', start);\n        btnStop.addEventListener('click', stop);\n        window.addEventListener('beforeunload', ()=>{ try{ stop(); }catch(e){} });\n    })();\n    <\/script>\n    <\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"","protected":false},"author":1,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-437","page","type-page","status-publish","hentry"],"_links":{"self":[{"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/pages\/437","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/comments?post=437"}],"version-history":[{"count":4,"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/pages\/437\/revisions"}],"predecessor-version":[{"id":441,"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/pages\/437\/revisions\/441"}],"wp:attachment":[{"href":"https:\/\/ssnmmi.org.sa\/ar\/wp-json\/wp\/v2\/media?parent=437"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}