rkelist





فعاليات الرياض 2026 — دليل الفعاليات المحدّث | مفتاح الرياض

















الإثنين، 6 يوليو 2026
21 محرم 1448هـ

فعاليات الرياض

المعارض والمؤتمرات والفعاليات الثقافية والترفيهية في مدينة الرياض — محدّثة يومياً مع العد التنازلي لكل فعالية.


فعالية جارية وقادمة

جارِ تحميل الفعاليات…


/* حماية من فشل تحميل ملف الإعدادات */ if(!window.RK_CONFIG){ console.error('%c[RK] لم يُحمَّل rk-config.js','background:#C0392B;color:#fff;padding:4px 8px;border-radius:4px;font-weight:bold', '\nالحل: ارفع الملف عبر SFTP إلى:\n /wp-content/uploads/mfz-blocks/rk-config.js\nأو عدّل مسار

var MONTHS=['يناير','فبراير','مارس','أبريل','مايو','يونيو','يوليو','أغسطس','سبتمبر','أكتوبر','نوفمبر','ديسمبر']; var PIN_SVG='';

/* ═════ خريطة التصنيفات: عربي → لون + label ═════ قابلة للتوسعة بلا حدود عبر RK_CONFIG.categoryMap في rk-config.js */ var CAT_MAP = Object.assign({ 'ثقافة وفنون': { color:'#0073AA', label:{ ar:'ثقافة وفنون', en:'Culture & Arts' } }, 'تقنية': { color:'#8E6FD8', label:{ ar:'تقنية ومستقبل', en:'Tech & Future' } }, 'تجارة وصناعة': { color:'#4E9A51', label:{ ar:'معارض وأعمال', en:'Fairs & Business' } } }, C.categoryMap || {});

var LANG = window.RK_LANG || 'ar'; function tt(v){if(v==null)return '';if(typeof v==='object'&&!Array.isArray(v)&&(v.ar||v.en))return v[LANG]||v.ar||v.en||'';return v}

/* ═════ تطبيع بيانات الفعاليات ═════ */ function pickDate(v){ if(v==null||v==='') return ''; if(typeof v==='number') return new Date(v*(v<1e12?1000:1)).toISOString().slice(0,10); var s=String(v).slice(0,10); return /^\d{4}-\d{2}-\d{2}$/.test(s) ? s : ''; } function normalizeEvent(e){ if(!e) return null; var m=e.meta||{}; var title=e.title; if(title&&title.rendered) title=title.rendered; var rawCat=e.cat||e.category||''; var mapped=CAT_MAP[rawCat]||{}; var n={ title: title || e.name || '', link: e.link || e.url || e.permalink || '#', venue: e.venue || e.location || e.place || m._sle_venue || 'الرياض', start: pickDate(e.start || e.start_date || e.startDate || e.date_iso || e.date || m._sle_start), end: pickDate(e.end || e.end_date || e.endDate || e.end_date_iso || m._sle_end), catRaw: rawCat, catColor: mapped.color || '#6C756F', catLabel: e.catLabel || e.category_label || tt(mapped.label) || rawCat || '' }; return (n.start && n.title) ? n : null; }

if(C.gtmId){ document.getElementById('gtm-ns').innerHTML = ''; }

/* التواريخ في الشريط العلوي */ (function(){ var now=new Date(); try{ document.getElementById('greg-date').textContent= new Intl.DateTimeFormat('ar-SA-u-ca-gregory-nu-latn',{weekday:'long',day:'numeric',month:'long',year:'numeric'}).format(now); document.getElementById('hijri-date').textContent= new Intl.DateTimeFormat('ar-SA-u-ca-islamic-umalqura-nu-latn',{day:'numeric',month:'long',year:'numeric'}).format(now)+'هـ'; }catch(e){} document.getElementById('yr').textContent=now.getFullYear(); })();

/* ═════ منطق الفلترة بتاريخ النهاية ═════ */ function filterActive(list){ var today=new Date(); today.setHours(0,0,0,0); return (list||[]).filter(function(e){ if(!e||!e.start) return false; var end = e.end ? new Date(e.end+'T23:59:59') : new Date(e.start+'T23:59:59'); return end >= today; }); } function sortEvents(list){ var today=new Date(); today.setHours(0,0,0,0); return list.slice().sort(function(a,b){ var as=new Date(a.start+'T00:00:00'), ae=a.end?new Date(a.end+'T23:59:59'):as; var bs=new Date(b.start+'T00:00:00'), be=b.end?new Date(b.end+'T23:59:59'):bs; var aOn=(as<=today&&ae>=today), bOn=(bs<=today&&be>=today); if(aOn&&!bOn) return -1; if(!aOn&&bOn) return 1; return as-bs; }); } function chipFor(e){ var today=new Date(); today.setHours(0,0,0,0); var s=new Date(e.start+'T00:00:00'), en=e.end?new Date(e.end+'T23:59:59'):s; var diff=Math.round((s-today)/864e5); if(s<=today&&en>=today) return 'جارٍ الآن'; if(diff===1) return 'غداً'; if(diff===0) return 'اليوم'; return 'بعد '+diff+' يوم'; }

/* بطاقة فعالية */ function cardHTML(e){ var d=new Date(e.start+'T00:00:00'); return '

'+ '
'+d.getDate()+''+MONTHS[d.getMonth()]+'

'+ '

'+e.title+'

'+ '

'+PIN_SVG+(e.venue||'الرياض')+'

'+ '

'+chipFor(e)+(e.catLabel?''+e.catLabel+'':'')+'

'; }

/* التجميع: جارية أولاً ثم بالأشهر (استناداً إلى تاريخ البداية) */ function group(list){ var today=new Date(); today.setHours(0,0,0,0); var groups={now:[]}, order=['now']; list.forEach(function(e){ var s=new Date(e.start+'T00:00:00'), en=e.end?new Date(e.end+'T23:59:59'):s; if(s<=today&&en>=today){ groups.now.push(e); return; } var k=e.start.slice(0,7); /* YYYY-MM */ if(!groups[k]){groups[k]=[];order.push(k)} groups[k].push(e); }); /* أزل «الجارية» إن كانت فارغة */ if(!groups.now.length){order.shift();delete groups.now} return {order:order, groups:groups}; } function sectionHTML(key, evs){ var head = (key==='now') ? 'جارية الآن' : MONTHS[parseInt(key.slice(5),10)-1]+' '+key.slice(0,4); return '

'+ '

'+head+'

'+evs.length+' فعاليات

'+ '

'+evs.map(cardHTML).join('')+'

'+ '

لا توجد فعاليات مطابقة للتصفية في هذا القسم.

'; }

/* الرسم الرئيسي */ function renderEvents(raw){ var normalized=(raw||[]).map(normalizeEvent).filter(Boolean); var list=sortEvents(filterActive(normalized)); console.info('[RK] صفحة الفعاليات — استُلمت '+(raw?raw.length:0)+' • صالحة '+normalized.length+' • جارية/قادمة '+list.length); document.getElementById('ev-count').textContent=list.length;

if(!list.length){ var hint; if(!raw||!raw.length){ hint='لم يُستلَم أي فعالية. تحقّق من eventsApi أو eventsFallback في rk-config.js.'; }else if(!normalized.length){ hint='وصلت '+raw.length+' فعالية، لكن لم أعثر على حقلَي العنوان وتاريخ البداية (start) بأسماء مألوفة. افتح DevTools ← Console لرؤية عيّنة من البيانات، ثم عدّل أسماء الحقول في مصدر REST.'; console.warn('[RK] عيّنة من الفعالية الأولى كما وصلت:', raw[0]); }else{ hint='وصلت '+raw.length+' فعالية، '+normalized.length+' صالحة، لكن تاريخ نهايتها كلها قد مضى (end < اليوم). تأكّد أن REST يعيد حقل end.'; console.warn('[RK] كل الفعاليات منتهية. عيّنة:', normalized[0]); } document.getElementById('events-root').innerHTML= '

'+ 'لا توجد فعاليات جارية أو قادمة
'+hint+'

'; updateSchema([]); return; } var g=group(list); document.getElementById('events-root').innerHTML= g.order.map(function(k){return sectionHTML(k, g.groups[k])}).join(''); updateSchema(list); renderFilters(); wireFilters(); }

/* حدّث JSON-LD ديناميكياً بالفعاليات النشطة */ function updateSchema(list){ var items=list.slice(0,20).map(function(e,i){ var o={"@type":"Event","position":i+1,"name":e.title,"startDate":e.start, "url":e.link.indexOf('http')===0?e.link:'https://riyadhkey.com'+e.link, "location":{"@type":"Place","name":e.venue||"الرياض","address":"الرياض، السعودية"}}; if(e.end)o.endDate=e.end; return o; }); var s=document.getElementById('ld-events'); var doc=JSON.parse(s.textContent); doc["@graph"].push({"@type":"ItemList","name":"فعاليات الرياض القادمة","itemListElement":items}); s.textContent=JSON.stringify(doc); }

/* الفلاتر — تُبنى تلقائياً من CAT_MAP لكل تصنيف بلونه */ function renderFilters(){ var el=document.getElementById('filter-chips'); if(!el) return; var allLabel = LANG==='en' ? 'All' : 'الكل'; var html = ''; Object.keys(CAT_MAP).forEach(function(k){ var m=CAT_MAP[k]||{}; var color=m.color||'#6C756F'; var label=tt(m.label)||k; html += ''; }); el.innerHTML=html; }

function wireFilters(){ var btns=document.querySelectorAll('#filter-chips button'); btns.forEach(function(b){ b.onclick=function(){ btns.forEach(function(x){x.setAttribute('aria-pressed','false')}); b.setAttribute('aria-pressed','true'); var f=b.dataset.filter; document.querySelectorAll('.ev-card').forEach(function(c){ c.hidden=(f!=='all'&&c.dataset.cat!==f); }); document.querySelectorAll('.ev-section').forEach(function(sec){ var visible=sec.querySelectorAll('.ev-card:not([hidden])').length; var total=sec.querySelectorAll('.ev-card').length; sec.querySelector('.ev-grid').style.display = visible?'':'none'; var note=sec.querySelector('.empty-note'); note.style.display = (total && !visible) ? 'block' : 'none'; }); }; }); }

/* المصدر: eventsApi أولاً، وإلا eventsFallback */ if(C.eventsApi){ fetch(C.eventsApi).then(function(r){if(!r.ok)throw 0;return r.json()}) .then(renderEvents) .catch(function(){renderEvents(C.eventsFallback||[])}); }else{ renderEvents(C.eventsFallback||[]); }

/* ══════════════════════════════════════════════════════════ القائمة والتذييل — تُبنى من rk-config.js بحسب window.RK_LANG ══════════════════════════════════════════════════════════ */ var LANG = window.RK_LANG || 'ar'; function tt(v){if(v==null)return '';if(typeof v==='object'&&!Array.isArray(v)&&(v.ar||v.en))return v[LANG]||v.ar||v.en||'';return v} function ee(s){return String(s==null?'':s).replace(/[&<>"']/g,function(c){return {'&':'&','<':'<','>':'>','"':'"',"'":'''}[c]})}

(function renderNav(){ var el=document.getElementById('rk-nav'); if(!el) return; var nav=(C.nav&&C.nav[LANG])||[]; var path=window.location.pathname.replace(/\/+$/,'')||'/'; var html=nav.map(function(it){ var url=(it.url||'').replace(/\/+$/,'')||'/'; var cur=(url===path)?' aria-current="page"':''; return '

  • '+ee(it.label)+'
  • '; }).join(''); var ls=C.languageSwitch&&C.languageSwitch[LANG]; if(ls) html+='

  • '+ee(ls.label)+'
  • '; el.innerHTML=html; })();

    (function renderFooter(){ var F=(C.footer&&C.footer[LANG])||{}, brandEl=document.getElementById('footer-brand'); if(!brandEl) return; brandEl.textContent = tt(C.siteName); document.getElementById('footer-about').textContent = F.about||''; document.getElementById('footer-contact-label').textContent = F.contactLabel||''; var em=document.getElementById('footer-email'); em.href='mailto:'+(F.email||''); em.textContent = F.email||''; document.getElementById('footer-links-title').textContent = F.linksTitle||''; document.getElementById('footer-links').innerHTML=(F.links||[]).map(function(l){ var extra=''; if(l.extra) for(var k in l.extra) extra+=' '+k+'="'+ee(l.extra[k])+'"'; return '

  • '+ee(l.label)+'
  • '; }).join(''); var yr=new Date().getFullYear(); document.getElementById('footer-copyright').textContent = (F.copyright||'').replace('{year}',yr); var pr=document.getElementById('footer-privacy'), cn=document.getElementById('footer-contact'); pr.href=(F.privacy&&F.privacy.url)||'#'; pr.textContent=(F.privacy&&F.privacy.label)||''; cn.href=(F.contact&&F.contact.url)||'#'; cn.textContent=(F.contact&&F.contact.label)||''; })();

    /* ══════════════════════════════════════════════════════════ تتبّع النقرات — أي رابط عليه data-track يُرسِل حدث GA ══════════════════════════════════════════════════════════ */ document.addEventListener('click',function(e){ var el=e.target.closest('[data-track]'); if(!el||!window.gtag) return; window.gtag('event','select_content',{ content_type: el.dataset.track, item_id: el.href || el.getAttribute('data-track-id') || '', lang: LANG }); },{capture:true});