السلام عليكم،
لما بحاول تصدير الـ user quiz data من learndash reports يواجهني الخطأ ده ومش عارف انزل الملف وانا محتاجه ضروري، ممكن لو حد واجه المشكلة دي قبل كده يقولي اقدر احلها ازاي؟
تسجيل الدخول لعرض الكودالسلام عليكم،
لما بحاول تصدير الـ user quiz data من learndash reports يواجهني الخطأ ده ومش عارف انزل الملف وانا محتاجه ضروري، ممكن لو حد واجه المشكلة دي قبل كده يقولي اقدر احلها ازاي؟
تسجيل الدخول لعرض الكودعليكم السلام، ومرحبا بك في مجتمع عرب ووردبريس.
إذن مشكلتك هي ظهور هذا الخطأ عند محاولة تصدير تقارير الاختبارات، بالضغط على Export User Quiz Data من داخل إضافة Learndash تاب التقارير.
لنوضح المشكلة التي تظهر لك بالتفصيل؛ فمعرفة السبب هو بداية الحل، وبعدها أذكر لك طريقة حل هذه المشكلة.
عندما تضغط على زر Export user quiz data، يتم تشغيل ملف الـ PHP المسؤول، ويتم تنفيذ عدة خطوات متتالية لمعالجة طلبك. وعندما وصل الكود للسطر رقم 140 في الملف التالي:
تسجيل الدخول لعرض الكودواجه خطأ قاتل (Fatal error)، لم يتم التعامل معه (Uncaught Error)؛ مما أدى إلى توقف سلسلة الخطوات عند هذه النقطة.
الرسالة التي تظهر لك توضح بأسلوب مبسط سبب حدوث هذا الخطأ القاتل، وهو Undefined constant (ثابت غير معرف)؛ حيث يبحث الـ PHP عن ثابت اسمه DB_CHARSET ولكنه غير معرف؛ مما أدى إلى توقف تنفيذ الكود من هذه النقطة.
إذن المطلوب لحل هذه المشكلة أن يتم تعريف الثابت DB_CHARSET.
وفقًا لتعليمات ووردبريس، يتم تعريف الـ DB_CHARSET في الملف wp-config.php، وذلك بالتأكد من وجود أو إضافة السطر التالي:
تسجيل الدخول لعرض الكودطريقة تعريف الثابت DB_CHARSET التي أخبرتك عنها في الأعلى ينقصها خطوات، هذه الخطوات أحيانا تكون ضرورية وأحيانا لا نحتاج للتركيز معها، سنوضحها إن شاء الله في رد منفصل.
المهم الآن أن تجرب عرض الموقع بعد تنفيذ الحل السابق، فإذا ظهرت أي مشاكل غريبة، فافعل التالي:
الحل المؤقت معتمد على تعريف الثابت DB_CHARSET في ملفات إضافة Learndash نفسها، وهذا يعني أنه حل مؤقت، وبمجرد تحديث الإضافة ستعود نفس المشكلة.
الحل المؤقت هو: افتح الملف class-learndash-admin-settings-data-reports.php.
افتح فودلر الإضافات ثم فولدر sfwd-lms ثم فولدر includes ثم فولدر admin وستجد فيه الملف المطلوب.
احذف السطر التالي (رقم 140):
تسجيل الدخول لعرض الكوداستبدله بالسطر التالي:
تسجيل الدخول لعرض الكودلا تنسى مشاركتنا نتيجة تنفيذ الخطوات عندك.
وعليكم السلام ورحمة الله وبركاته.
سبب المشكلة كما تفضل الأخ صلاح وهو أن الإضافة تحاول استخدام ثابت لم يتم تعريفه، وهذا الثابت هو DB_CHARSET الذي يعرف عادة في ملف wp-config.php.
أول خطوة عليك تنفيذها هو الحل الذي ذكره الأخ صلاح، وهو التأكد من وجود السطر التالي الذي يعرف الثابت في ملف [سجل الدخول لترى الرابط]:
تسجيل الدخول لعرض الكودويجب أن تتأكد أيضًا أن يكون التعريف قبل السطر التالي:
تسجيل الدخول لعرض الكودإذا لم يكن الثابت معرفًا، فعرفه بإدخال سطر التعريف، أما إذا كان معرفًا والمشكلة لا تزال تحدث، فعليك التأكد مما يلي:
كذلك هناك شيء قد يكون من المفيد معرفته، هل تستخدم استضافة WP Engine؟
صلاح سلامة وفقًا لتعليمات ووردبريس، يتم تعريف الـ DB_CHARSET في الملف wp-config.php، وذلك بالتأكد من وجود أو إضافة السطر التالي:
تأكدت من ملف wp-config.php عندي ولاحظت أن السطر المذكور غير موجود فيه. فأضفته وتم حل المشكلة بنجاح ️ .
أشكرك جدًا على مجهودك الواضح، فهمت أمور ما كنت أعرفها من قبل.
علي ملص تحديث ووردبريس إلى أحدث إصدار.
تعطيل الإضافات الأخرى مؤقتًا، وتنفيذ المهمة التي تريدها، وذلك للتأكد من عدم وجود تعارض.
التأكد من أن إصدار PHP لديك حديث وتدعمه إضافة LearnDash.
شكرا أستاذ علي. تم حل المشكلة بإضافة الكود الذي نصح به الأستاذ صلاح. انا لا استخدم wp engine.
صلاح سلامة أخبرنا هنا في تعليق لنزودك بخطوات التعريف الكاملة أو تابعها إذا كانت منشورة.
المشكلة انحلت الحمد لله من ساعتها، ولكن هذا التعليق اثار فضولي عن الطريقة الصحيحة والكاملة لتعريف الثابت DB_CHARSET. تابعت كذا شرح عنه والصراحة عاوز اتأكد ان كل الأمور تمام عندي.
أعتقد أن الأخ صلاح ذكر هذا في إشارة إلى وجود خطوات مطلوبة أحيانًا لتلافي وقوع مشاكل في استرجاع البيانات بشكل صحيح. قد يكون ترميز جداول قاعدة البيانات مختلفًا عن الترميز في الثابت، وقد يكون ترميز البيانات نفسها مختلفًا. في مثل هذه الحالات قد يتوجب عليك تغيير ترميز جداول قاعدة البيانات، و/أو البيانات نفسها.
إذا لم تكن تعاني من مشاكل في عرض البيانات في موقعك في أي مكان، مثلًا لا تظهر بعض البيانات بطريقة غير مفهومة، فهذا يعني أنه لا توجد مشاكل، لكن إذا أردت التأكد من أن ترميز جداول قاعدة البيانات صحيح، فانتقل إلى PHPMYADMIN واقرأ ما هو موجود في حقل التجميع، فإذا كان يبدأ بـ utf8mb4 فهذا يعني أن الترميز صحيح.
بالنسبة للبيانات نفسها فإذا كان ترميزها مختلفًا ستظهر بطريقة غير مفهومة عند استدعائها.
يونس محمد المشكلة انحلت الحمد لله من ساعتها، ولكن هذا التعليق اثار فضولي عن الطريقة الصحيحة والكاملة لتعريف الثابت DB_CHARSET. تابعت كذا شرح عنه والصراحة عاوز اتأكد ان كل الأمور تمام عندي.
بما أن مشكلتك انحلت بتعريف الـ charset في ملف wp-config.php، فلا يوجد داعي لاستكمال الخطوات إلا إن ظهرت لديك مشاكل في عرض النصوص كظهور علامات استفهام غريبة او نصوص غير مفهومة. لكن إن كنت تريد معرفة كامل الخطوات وتريد تطبيقها فتأكد من أخذ نسخة احتياطية من قاعدة البيانات أولا قبل تنفيذ الخطوات التالية.
الفكرة: كان ووردبريس يستخدم utf8، ومع الإصدار 4.2 بدأ يعتمد على utf8mb4 بصفته charset أكثر تكاملا من utf8 السابق، ومميزاته أنه يدعم 4 بايت لكل حرف؛ وهذا يعني إمكانية تخزين الرموز التعبيرية والأحرف الخاصة بشكل صحيح؛ مما يجعلها تظهر بشكل صحيح في الواجهة بدلا من ظهورها كعلامات استفهام.
الهدف:
الخطوات:
يمكنك استخدام أداة SQL Query Builder المدمجة في [سجل الدخول لترى الرابط]، إذا لم تتمكن من الوصول إلى قاعدة البيانات نفسها حيث التنفيذ من الـphpmyadmin أيسر وأسهل.
المهم نفذ الكود التالي بالخطوات المشروحة في الصورة السابقة وسيظهر لك كلا من الــ charset وكذلك الـ collation الافتراضي المستخدم حاليًا في قاعدة البيانات عندك.
تسجيل الدخول لعرض الكودالنتيجة: اسم قاعدة البيانات هو local، والـ charset الافتراضي لقاعدة البيانات هو utf8 والـ collation الافتراضي لقاعدة البيانات هو utf8_unicode_ci.
استخدم الكود السابق لعرض النتيجة الإجمالية فقط.
النتيجة: كما تلاحظ في الصورة السابقة، يظهر لدي 3 اختلافات.
بناء على الخطوات السابقة ستتمكن من معرفة أن الـ collation الافتراضي الصحيح في حالة موقعي هو utf8mb4_unicode_520_ci مع الـ charset الصحيح وهو utf8mb4.
استخدم الكود السابق بنفس الطريقة السابقة مع ضرورة تغيير اسم قاعدة البيانات فيه من Local إلى اسم قاعدة البيانات الخاصة بك.
النتيجة: يمكنك اعادة استخدام أول كود للتأكد من أن كلا من الـ charset والـ collation لقاعدة البيانت قد تم تصحيحه.
لاحظ: ضرورة تغيير utf8mb4_unicode_520_ci بالـ collation الذي اخترته انت في الخطوة رقم 3.
الكود السابق يعرض لك الجداول التي يجب تحويلها فقط، ويضع كل جدول في سطر منفرد. كما تلاحظ في الصورة التالية أن لدى 13 جدول يجب أن نحولهم للـ charset والـ collation الجديد.
والخطوات هي نسخ الأسطر الـ 13 الناتجة (دفعة واحدة أو سطر سطر) وتنفيذها بنفس الطريقة.
بعد توحيد الـ charset والـ collation، امسح الكاش وجرب أكثر من صفحة في موقعك للتأكد أن كل شيء تمام وأنه لا تظهر أي مشاكل في عرض النصوص.