تعارض إضافتين في ووردبريس رغم عمل كل واحدة وحدها: تجربة مصفوفة
إضافتان كل واحدة بتشتغل لحالها، لكن لما تفعلهم مع بعض الموقع يتعطل؟ هذا تعارض حقيقي، وممكن يضيع اذا جربت تعطيل مجموعة كبيرة مرة واحدة. لازم تعمل مصفوفة: A وحدها، B وحدها، A+B، وبعد الاصلاح A+B مرة ثانية.
إضافة المختبر A حولت قيمة فلتر من string إلى array. الإضافة B القديمة افترضت ان القيمة دايما string وشغلت عليها strtoupper(). A وحدها رجعت 200، وB وحدها رجعت 200، لكن الاثنين معا رجعوا TypeError وHTTP 500. عدلنا B لتفحص النوع وتحافظ على بنية A، فعاد الرد 200.
التعارضات تظهر في دعم ووردبريس عن تعارض اعتماد بين إضافتين، ونقاش ريديت عن صعوبة اكتشاف زوج متعارض يوضح لماذا التقسيم النصفي وحده قد يخفي المشكلة. دليل اخطاء ووردبريس الشائعة الرسمي يوصي بعزل الإضافات عند مشاكل التوافق.
مصفوفة النتيجة
- A وحدها: HTTP 200 ونوع array.
- B وحدها: HTTP 200 ونوع string وقيمة BASE.
- A+B قبل الاصلاح: HTTP 500 وTypeError.
- A+B بعد فحص النوع: HTTP 200 وarray فيها normalized=PLUGIN-A.
A وحدها سليمة

B وحدها سليمة

لو وقف الاختبار هون، كل مطور رح يقول إضافته شغالة. المشكلة ما ظهرت الا لما مر ناتج A إلى B عبر نفس الفلتر.
الاثنتان معا

الخطأ سمى strtoupper لكنه ما يعني ان PHP هي المشكلة. السبب هو عقد بيانات غير موثق بين مرشحين على نفس hook. ترتيب الاولويات جعل A تعمل اولا، ثم وصلت نتيجتها إلى B.
بعد اصلاح العقد

فيديو توثيق التجربة الفعلية
هذا تسجيل شاشة صامت ومتواصل للاختبار وهو يحدث داخل بيئة محلية معزولة. تظهر الخطوات والنتائج الفعلية لحظة التنفيذ، من غير تركيب صور ثابتة.
كيف تعزل تعارضا بدون اسقاط الإنتاج؟
- خذ نسخة واشتغل على staging او troubleshooting mode.
- حدد الوظيفة المكسورة وطلبا واحدا يعيدها.
- سجل نسخ PHP وWordPress والقالب والإضافات.
- جرب الإضافة المشتبه بها وحدها.
- جرب كل طرف وحده ثم الزوج معا.
- اقرأ اول fatal او console error او request فاشل.
- ثبت النتيجة بعد الاصلاح بنفس المصفوفة.
- رجع قائمة الإضافات الاصلية وتأكد من الكاش وCron.
ليش تعطيل النصف ممكن يخدعك؟
اذا التعارض يحتاج A وB معا، ووضع التقسيم كل واحدة في نصف مختلف، تعطيل اي نصف يزيل طرفا ويختفي الخطأ. بتعرف ان المشكلة في مجموعة كبيرة لكن ما بتعرف الزوج. بعد العزل العام، اعمل اختبار pairwise للمشتبه بهم.
انواع تعارض شائعة
- نسختان مختلفتان من مكتبة Composer بنفس namespace.
- اسم دالة او class عام مكرر.
- فلتر يغير نوع البيانات من غير توثيق.
- إضافتا كاش او تحسين تعدلان نفس HTML.
- JavaScript global او CSS selector مشترك.
- ترتيب hooks يخلي واحدا يعمل قبل تهيئة الثاني.
- REST route او Cron hook بنفس الاسم لكن عقد مختلف.
شو ترسل لمطوري الإضافتين؟
ارسل المصفوفة والنسخ وstack trace والطلب الذي يعيد المشكلة. وضح ان A فقط pass وB فقط pass والزوج fail. اذا عندك سطر ونوع متوقع ونوع فعلي، اذكرهم. هاي معلومات اقوى بكثير من جملة الإضافات متعارضة.
namespace وscoping
اذا المشكلة اعتماد مشترك، تحديث المكتبة او prefixing/scoping قد يمنع تحميل نسختين تحت نفس الاسم. اذا المشكلة فلتر، وثق الشكل المتوقع ولا تغير النوع من غير توافق خلفي. الحل يعتمد على سبب التعارض، مش وصفة واحدة.
لا تصلحها بتعطيل الأخطاء
اخفاء display_errors يحمي الزوار من التفاصيل لكنه ما يحل TypeError. لازم يبقى الخطأ في log وتصلح العقد او ترتيب التحميل. وكذلك رفع الذاكرة ما له علاقة بتعارض نوع البيانات.
حدود تجربتنا
الإضافتان مصممتان للمختبر والتعارض مقصود. المواقع الحقيقية قد تتعارض في JavaScript او CSS او SQL بدل PHP. القيمة هي طريقة المصفوفة والاثبات ان كل إضافة سليمة منفردة والزوج وحده يفشل.
الخلاصة
A رجعت 200 وحدها، وB رجعت 200 وحدها، لكنهما معا رجعتا 500 لان B توقعت string. بعد فحص النوع والحفاظ على بنية الفلتر عاد الزوج إلى 200. اثبات التعارض يحتاج مصفوفة، مش تخمينا باسم آخر إضافة حدثت.