ربط WordPress LMS بـ xAPI و NELC — الدليل الشامل

ربط WordPress LMS بـ xAPI و NELC — الدليل الشامل

المؤلف: فريق Bzzix التقني
آخر تحديث: 2026
المستوى: متوسط
المتطلبات: WordPress 5.8+، صلاحية Admin
الوقت المقدر للقراءة: 25 دقيقة


مقدمة

WordPress هو النظام الأكثر مرونة وانتشاراً لبناء مواقع التعليم الإلكتروني، خاصةً مع إضافات LMS مثل LearnDash وLifterLMS وTutor LMS. لكن WordPress بحد ذاته لا يدعم xAPI — يأتي هذا الدعم من خلال إضافات متخصصة.

هذا الدليل يشرح كيفية تحقيق التوافق الكامل مع معيار xAPI ومتطلبات NELC على منصة WordPress.


1. الإضافات المدعومة لـ xAPI على WordPress

1.1 خيارات الإضافات المتاحة

الإضافة LMS المتوافق مجانية؟ مستوى الدعم
GrassBlade xAPI Companion LearnDash, LifterLMS, Tutor مدفوعة ✅ ممتاز
LearnDash xAPI Plugin LearnDash فقط مدفوعة ✅ جيد
WP Courseware xAPI WP Courseware مدفوعة ⚠️ محدود
بناء مخصص (Custom) أي LMS حسب المشروع ✅ الأفضل

1.2 الملحقات الرسمية المعتمدة من المركز الوطني (NELC Open Source Plugins)

يوفر المركز الوطني للتعليم الإلكتروني (NELC) إضافات مفتوحة المصدر مجانية لربط أشهر أنظمة إدارة التعلم (LMS) في ووردبريس (مثل LearnDash و Tutor LMS) مباشرة مع LRS الخاص بالمركز:

تسهل هذه الإضافات إرسال إفادات xAPI المتوافقة مع اشتراطات المركز بشكل تلقائي ودون الحاجة للاستعانة بإضافات تجارية خارجية.


2. GrassBlade xAPI Companion — الإعداد الكامل

2.1 ما هي GrassBlade؟

GrassBlade xAPI Companion هي الإضافة الأشهر والأكثر شمولاً لدعم xAPI على WordPress. تتميز بـ:

  • دعم أي محتوى xAPI/Tin Can
  • LRS مدمج (GrassBlade LRS)
  • توافق مع LearnDash وLifterLMS وأكثر
  • دعم SCORM داخل WordPress

2.2 تثبيت GrassBlade

الطريقة الأولى: من WordPress.org

WordPress Dashboard
    → Plugins
        → Add New
            → Search "GrassBlade"
                → Install → Activate

الطريقة الثانية: رفع مباشر

  1. حمّل ملف ZIP من grassblade.com
  2. انتقل إلى: Plugins → Add New → Upload Plugin
  3. ارفع الملف وانقر "Install Now"
  4. فعّل الإضافة

2.3 إعداد الاتصال بـ LRS الخارجي (NELC)

بعد التفعيل، انتقل إلى:

WordPress Dashboard
    → GrassBlade
        → Settings
            → LRS Settings

أدخل بيانات NELC:

الحقل القيمة
LRS Type External LRS
Endpoint https://lrs.nelc.gov.sa/xapi/
Key (Username) مفتاح الحساب من NELC
Secret (Password) كلمة السر من NELC
xAPI Version 1.0.3

2.4 اختبار الاتصال

بعد الإعداد، انقر "Test Connection":

  • نجاح: "Successfully connected to LRS"
  • فشل: "Connection failed" — راجع بيانات الاعتماد

3. LearnDash xAPI Plugin — الإعداد الكامل

3.1 ما يفعله Plugin

يحوّل أحداث LearnDash إلى جمل xAPI ويرسلها إلى LRS:

حدث LearnDash فعل xAPI
إكمال الدورة completed
اجتياز اختبار passed
رسوب في اختبار failed
إكمال الدرس completed
بدء الدورة launched
الإجابة على سؤال answered

3.2 تثبيت LearnDash xAPI

LearnDash Dashboard
    → LearnDash LMS
        → Add-Ons
            → xAPI Integration
                → Download & Install

3.3 إعداد LRS في LearnDash

LearnDash LMS
    → Settings
        → xAPI
            → Enable xAPI [✓]
            → LRS Endpoint: https://lrs.nelc.gov.sa/xapi/
            → Username: [من NELC]
            → Password: [من NELC]

4. إعداد Actor Identification في WordPress

4.1 طريقة التعريف الافتراضية

GrassBlade تستخدم البريد الإلكتروني للمستخدم تلقائياً:

{
  "actor": {
    "objectType": "Agent",
    "name": "أحمد المحمدي",
    "mbox": "mailto:ahmed@example.sa"
  }
}

4.2 استخدام Account بدلاً من mbox

// في functions.php أو Custom Plugin
add_filter('grassblade_actor', function($actor, $user) {
    return [
        'objectType' => 'Agent',
        'name'       => $user->display_name,
        'account'    => [
            'homePage' => home_url(),
            'name'     => (string) $user->ID
        ]
    ];
}, 10, 2);

5. اختبار xAPI من WordPress

5.1 أداة اختبار مدمجة في GrassBlade

GrassBlade
    → Tools
        → Send Test Statement
            → Click "Send"

5.2 اختبار يدوي عبر cURL

curl -X POST https://lrs.nelc.gov.sa/xapi/statements \
  -H "Authorization: Basic $(echo -n 'username:password' | base64)" \
  -H "Content-Type: application/json" \
  -H "X-Experience-API-Version: 1.0.3" \
  -d '{
    "actor": {
      "name": "WordPress Test User",
      "mbox": "mailto:test@bzzix.com"
    },
    "verb": {
      "id": "http://adlnet.gov/expapi/verbs/launched",
      "display": { "ar": "بدأ" }
    },
    "object": {
      "id": "https://your-wordpress.com/test",
      "definition": {
        "name": { "ar": "اختبار WordPress xAPI" }
      }
    }
  }'

الاستجابة المتوقعة:

["xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"]

6. استكشاف الأخطاء وإصلاحها

خطأ 401: Unauthorized

السبب: بيانات الاعتماد خاطئة
الحل:

1. تحقق من Username وPassword في إعدادات LRS
2. تأكد من صحة الـ Endpoint URL
3. جرّب الاتصال مباشرةً من Postman

الـ Statements لا تُرسل

الأسباب المحتملة:

  1. WordPress Cron معطّل
  2. GrassBlade غير مفعّلة
  3. المستخدم غير مسجّل Enrollment

الحل:

// في wp-config.php، تأكد من:
define('DISABLE_WP_CRON', false);

// أو أضف Cron حقيقي في cPanel/Server:
*/5 * * * * wget -q -O /dev/null https://your-site.com/wp-cron.php

خطأ SSL/HTTPS

Error: SSL certificate verify failed

الحل:

// مؤقتاً في التطوير فقط:
add_filter('https_ssl_verify', '__return_false');
// ⚠️ لا تستخدم في الإنتاج!

Statement تصل ناقصة

الحل: تحقق من إعدادات Actor في GrassBlade:

GrassBlade → Settings → Actor Settings → Check "Include Email"

7. قائمة امتثال NELC لـ WordPress

التحقق الكامل قبل الإطلاق

إعدادات الإضافة:

  • GrassBlade أو LearnDash xAPI مثبّتة ومفعّلة
  • LRS Endpoint يشير إلى NELC
  • بيانات الاعتماد صحيحة
  • اختبار الاتصال ناجح

بيانات المتعلم:

  • Actor يحتوي على mbox أو account صالح
  • اسم المتعلم يُرسل مع كل Statement
  • كل مستخدم WordPress له بريد إلكتروني فريد

الأفعال والأنشطة:

  • الأفعال تستخدم URIs معتمدة من ADL
  • Object ID هو URL كامل وفريد لكل نشاط
  • الدورات والدروس والاختبارات لها IDs مميزة

الأداء:

  • Batch sending مفعّل
  • Retry logic مُعدَّ
  • WordPress Cron يعمل بشكل منتظم
  • Logs مراقبة بانتظام

الامتثال:

  • تم إرسال Statement تجريبي بنجاح
  • NELC استقبل وأكّد الـ Statements
  • التوثيق التقني جاهز للمراجعة

8. تكامل WooCommerce مع xAPI

إذا كنت تبيع الدورات عبر WooCommerce، يمكن تتبع عمليات الشراء:

8.1 إرسال Statement عند الشراء

// في functions.php
add_action('woocommerce_order_status_completed', function($order_id) {
    $order = wc_get_order($order_id);
    $user  = get_user_by('id', $order->get_user_id());
    
    foreach ($order->get_items() as $item) {
        $product = $item->get_product();
        
        $statement = [
            'actor' => [
                'name'  => $user->display_name,
                'mbox'  => 'mailto:' . $user->user_email
            ],
            'verb' => [
                'id'      => 'http://activitystrea.ms/schema/1.0/purchase',
                'display' => ['ar' => 'اشترى', 'en-US' => 'purchased']
            ],
            'object' => [
                'id'         => get_permalink($product->get_id()),
                'definition' => [
                    'name' => [
                        'ar'    => $product->get_name(),
                        'en-US' => $product->get_name()
                    ],
                    'type' => 'http://adlnet.gov/expapi/activities/course'
                ]
            ],
            'result' => [
                'extensions' => [
                    'https://bzzix.com/xapi/extensions/order-id'    => $order_id,
                    'https://bzzix.com/xapi/extensions/price'       => $order->get_total(),
                    'https://bzzix.com/xapi/extensions/currency'    => 'SAR'
                ]
            ]
        ];
        
        // إرسال إلى LRS
        bzzix_send_xapi_statement($statement);
    }
});

8.2 تتبع دورة حياة المتعلم الكاملة

[اشترى الدورة] → [سجّل الدخول] → [بدأ الدرس] → [أجاب على اختبار] → [أكمل الدورة]
      ↓                ↓               ↓                 ↓                   ↓
  purchased         logged-in       launched           answered           completed
      ↓                ↓               ↓                 ↓                   ↓
                              [كل هذا في LRS NELC]

9. تحسين الأداء

9.1 Async Sending

لتجنب إبطاء WordPress، أرسل الـ Statements بشكل غير متزامن:

// استخدم Action Scheduler من WooCommerce
as_enqueue_async_action('bzzix_send_xapi', ['statement' => $statement]);

9.2 Queue Management

// احتفظ بـ Queue محلية للـ Statements الفاشلة
function bzzix_queue_statement($statement) {
    $queue = get_option('bzzix_xapi_queue', []);
    $queue[] = [
        'statement' => $statement,
        'attempts'  => 0,
        'created'   => time()
    ];
    update_option('bzzix_xapi_queue', $queue);
}

10. [PREMIUM] — طلب خدمة الإعداد الكامل

🔒 خدمة PREMIUM من Bzzix

هل تريد فريق Bzzix يتولى إعداد WordPress مع xAPI وNELC بشكل كامل؟

ما يشمله الإعداد:

  • ✅ تثبيت وتكوين GrassBlade/LearnDash xAPI
  • ✅ الربط الكامل بـ NELC LRS
  • ✅ تطوير Integration مخصصة إذا لزم
  • ✅ ربط WooCommerce مع xAPI
  • ✅ اختبار شامل للامتثال مع NELC
  • ✅ تدريب الفريق التقني
  • ✅ دعم فني لمدة 30 يوماً

زمن التسليم: 2-5 أيام عمل

📧 تواصل معنا: bzzix.com/contact
📞 أو اتصل: +966-XX-XXXXXXX


11. مصادر مفيدة


الخطوة التالية

لمعرفة كيفية تكامل xAPI في مشاريع Laravel المخصصة، انتقل إلى:
05_laravel_xapi.md


© 2026 Bzzix — جميع الحقوق محفوظة. هذه الوثيقة جزء من مجموعة وثائق xAPI الرسمية لمنصة Bzzix.

هل تحتاج مساعدة في تنفيذ ما في الدليل؟ فريق Bzzix متاح لخدمتك.
تواصل معنا الآن