استخدام خطافات WordPress لتنظيف الكود وتنشيطه وإلغاء تثبيته
نشرت: 2015-01-23يكرس مؤلفو البرنامج المساعد الكثير من الوقت والطاقة للوظائف الرئيسية لمنتجاتهم ، بحيث يسمحون للأشياء الأقل أهمية بالسقوط على جانب الطريق.
خذ التنشيط والتعطيل ، على سبيل المثال. على الرغم من انتشار خطافات التنشيط - تحتاج العديد من المكونات الإضافية إلى إضافة بعض الخيارات ، أو إعادة كتابة قواعد التدفق ، أو ربما إنشاء جدول قاعدة بيانات ، أو التحقق من اختلافات الإصدار عند التثبيت - فإن خطافات إلغاء التنشيط وإلغاء التثبيت أقل شيوعًا.
النقطة هنا؟ كثير من مؤلفي الإضافات لا يأخذون الوقت الكافي للتنظيف بعد أنفسهم. هل يحتاج تثبيت WordPress حقًا إلى الجدول المخصص الذي أنشأته بعد إزالة المكون الإضافي؟ لماذا لا تمسح بعض الخيارات الحصرية للمكوِّن الإضافي قبل حذفه؟
في هذه المقالة ، سأوضح لك كيفية استخدام التنشيط وإلغاء التنشيط وإلغاء التثبيت لتهيئة المكون الإضافي وتنظيف الأشياء بسهولة أكبر بعد انتهاء المستخدمين من منتجك.
- خطاف التنشيط
- تسلسل التثبيت
- قواعد فلاشينغ إعادة الكتابة
- إنشاء جداول قاعدة البيانات
- شيكات التبعية
- خطاف التعطيل
- خطاف إلغاء التثبيت
- أمان إضافي
- حان الوقت للتنظيف
ملاحظة: إذا كنت تخطط لتصفح هذه المقالة ، أقترح بشدة إلقاء نظرة خاطفة على قسم "الأمان الإضافي" في النهاية ، والذي يكمل الكود ببعض عمليات فحص الأمان القيمة. أيضًا ، إذا كنت بحاجة إلى مساعدة بشأن أدوات إضافة WordPress ، فإليك تجديد سريع حول استخدام خطافات WordPress وكيفية تنشيط وظيفة في WordPress.
خطاف التنشيط
على الرغم من أن خطاف التنشيط واضح تمامًا ، إلا أن تثبيته يمثل حالة خاصة إلى حد ما ، لذلك سنحتاج إلى الانتباه إلى تسلسل الأحداث. قبل الخوض في كل هذا ، إليك مثال بسيط:
مفتاح كل ذلك هو وظيفة register_activation_hook()
. المعلمة الأولى هي المسار إلى ملف البرنامج المساعد الرئيسي ؛ تحدد المعلمة الثانية الوظيفة المراد تشغيلها. داخليًا ، تعد وظيفة register_activation_hook()
غلافًا لإجراء "activ_ [plugin_name]" ، ولكن نظرًا لأنه أسهل قليلاً في الاستخدام ، فمن غير المعتاد رؤية الخطاف في المكونات الإضافية.
تسلسل التثبيت
يعد فهم تسلسل التثبيت أمرًا مهمًا لأنه يمنع استخدام الطرق التي قد تكون معتادًا عليها. يتم استدعاء register_activation_hook()
بين نقر المستخدم على رابط التنشيط وبالتالي رؤية إشعار التنشيط. يتم تشغيله على صفحة وسيطة ، والتي تعيد التوجيه مباشرة قبل أن تتاح فرصة تشغيل أي خطافات.
دعنا نلقي نظرة على مثال لنرى سبب كون هذه مشكلة كبيرة:
قواعد فلاشينغ إعادة الكتابة
يقوم عدد من المكونات الإضافية بإنشاء أنواع منشورات مخصصة. يعد مسح قواعد إعادة الكتابة عند التنشيط للتأكد من عدم تلقي المستخدمين لخطأ 404 عند زيارة منشور من نوع المنشور المخصص الجديد خطوة ذكية.
يبدو الرمز أدناه منطقيًا ولكنه سيفشل.
يبدو جيدًا تمامًا. يتم إنشاء نوع المنشور المخصص وعند التنشيط ، نقوم بمسح قواعد إعادة الكتابة. تكمن المشكلة في أن أنواع المنشورات المخصصة لم يتم إنشاؤها بعد عند مسح قواعد إعادة الكتابة.
إليك كيف يبدو تدفق العملية:
- يقوم المستخدم بتثبيت البرنامج المساعد.
- يقوم المستخدم بالنقر فوق ارتباط التنشيط.
- تقوم الصفحة الوسيطة بتشغيل خطاف التنشيط فقط ، ولا شيء آخر. هذا يزيل قواعد إعادة الكتابة.
- البرنامج المساعد نشط ويعمل الكود كالمعتاد. تم تسجيل نوع المنشور المخصص.
الحل المنشور على Stack Overflow ، والذي تم اعتماده رسميًا بواسطة WordPress Codex ، يحل مشكلتنا الصغيرة. يتضمن الحل إضافة خيار للإشارة إلى أن المكون الإضافي قد تم تثبيته للتو.
إذا كان هذا الخيار موجودًا ، فنحن نقوم بأشياء التنشيط الخاصة بنا ثم نحذفه.
شيء من هذا القبيل:
أنا شخصياً لا أحب هذا الحل كثيراً. المشكلة هي أن الفحص على السطر الثامن يعمل على كل تحميل صفحة واحدة. لا داعي للقلق ، لأنه لن يضع عبئًا كبيرًا على خوادمك ولن يبطئ موقع الويب للمستخدمين. إنه فحص سريع للغاية مع تأثير ضئيل على الأداء. ومع ذلك ، فهو غير ضروري بنسبة 99.9٪ من الوقت.
يوجد حل أفضل مذكور في الدستور الغذائي في الوثائق الخاصة flush_rewrite_rules()
. في هذا الحل ، نستخدم نمطية وظائفنا لتسجيل نوع المنشور المخصص عند التنشيط بشكل منفصل:
بدلاً من الاعتماد على التحقق الذي يجب تشغيله طوال الوقت ، نستخدم وظيفة التنشيط لتسجيل أنواع المنشورات الخاصة بنا. لاحظ أنه بمجرد تنشيط المكون الإضافي الخاص بنا ، سيتم دائمًا تسجيل أنواع المنشورات من init
.
هذا مثال محزن على وجود المخطوطات في كل مكان. بشكل عام ، يحتوي WordPress على توثيق جيد ، ولكن إذا بدا شيء ما مضيعة أو غير منطقي ، فلا تخف من إجراء بعض الأبحاث بنفسك.
إنشاء جداول قاعدة البيانات
مهمة أخرى تقوم بها بعض المكونات الإضافية هي إنشاء جداول قاعدة البيانات. في كثير من الأحيان ، هذا غير ضروري ، ولكن هناك بعض حالات الاستخدام المشروعة.
يوضح هذا المثال من مقالة الدستور الغذائي حول إنشاء الجداول كيف يمكن استخدام مكالمات التنشيط المتعددة:
الوظيفة الأولى ، jal_install()
تنشئ جدول قاعدة بيانات جديدًا. الوظيفة الثانية ، jal_install_data
تضيف البيانات الأولية إلى الجدول. بدلاً من استخدام register_activation_hook()
لإضافة دالة واحدة تحتوي على كل هذا الرمز ، يمكننا استخدام register_activation_hook
عدة مرات.

هذه ممارسة رائعة للنمطية. من ناحية ، لا يتعين عليك إضافة بيانات اختبار أولية - الأمر بسيط مثل إزالة خطاف التنشيط - حتى تتمكن من الحفاظ على الوظيفة سليمة. من ناحية أخرى ، لك مطلق الحرية في إعادة استخدام هذه الوظائف في أي مكان لأنها منفصلة.
شيكات التبعية
مهمة أخرى شائعة لوظيفة التنشيط هي التحقق من التبعيات. قد يعتمد المكون الإضافي الخاص بك على إصدار معين من WordPress ، أو مكون إضافي آخر ، أو حتى إصدار معين من PHP.
يتحقق الكود أدناه من الحد الأدنى من إصدار WP و PHP ويعيد توجيه المستخدم (بدون تنشيط المكون الإضافي) إذا لزم الأمر:
خطاف التعطيل
يتم تشغيل خطافات التعطيل عندما يقوم المستخدم بإلغاء تنشيط مكون إضافي ، ولكن قبل إلغاء تثبيته (حذفه). يتم استخدام خطافات التعطيل بنفس طريقة استخدام خطافات التنشيط:
يعني إلغاء التنشيط أن المستخدم قام فقط بإلغاء تنشيط المكون الإضافي الخاص بك ، لذلك لن ترغب في القيام بالقدر الذي تريده أثناء إلغاء التثبيت. قد ترغب في مسح إعادة كتابة القواعد ، ولكن في هذه المرحلة ، لن ترغب في التخلص من جميع الخيارات وجدول قاعدة البيانات (إذا كان لديك واحد).
هذا واضح ومباشر إلى حد ما ، لكنني سأولي اهتمامًا خاصًا لمسح قواعد إعادة الكتابة لأنها ، مرة أخرى ، تمثل مشكلة.
توصي المخطوطة بتنفيذها كما هو موضح أدناه ، لكن هذا لا يعمل :
سبب عدم نجاح هذا هو نفسه كما كان من قبل. يؤدي تشغيل إلغاء التنشيط إلى تنفيذ خطاف init
، مما يعني أنه نظرًا لأننا نقوم بإلغاء تنشيط المكون الإضافي الخاص بنا ، فإننا نسجل أيضًا نوع المنشور المخصص الخاص بنا. يتم مسح قواعد إعادة الكتابة ، لكنها تأخذ في الاعتبار نوع المنشور المخصص.
بطاقة Trac جاهزة للتعامل مع هذا الأمر ، لكن حتى ذلك الحين ، لا يمكنني إعطائك طريقة جيدة جدًا للقيام بذلك. الطريقة الوحيدة التي وجدت أنها تعمل هي حذف قواعد إعادة الكتابة تمامًا:
على الرغم من أن هذا قد نجح معي في الماضي ، إلا أنني لا أوصي به. إنه يقدم قدرًا أكبر من عدم اليقين من مشكلة وجود عدد قليل من قواعد إعادة الكتابة الإضافية. أفضل عرض ملاحظة للمستخدمين تطلب منهم زيارة إعدادات الرابط الثابت بعد إلغاء التنشيط ، مما يؤدي إلى مسح قواعد إعادة الكتابة. حتى يتم تنفيذ حل أفضل ، نحن عالقون مع هذا ... آسف!
خطاف إلغاء التثبيت
هناك طريقتان لتشغيل التعليمات البرمجية عند إلغاء تثبيت مكون إضافي. يمكنك استخدام خطاف إلغاء التثبيت عبر register_uninstall_hook()
أو يمكنك استخدام ملف uninstall.php
مخصص داخل المكون الإضافي الخاص بك. سأعرض لك كليهما ، لكن الطريقة المفضلة هي استخدام ملف إلغاء التثبيت.
تكمن المشكلة الرئيسية في ربط إلغاء التثبيت في أنه "يمنع تشغيل ملف المكون الإضافي الرئيسي أثناء إلغاء التثبيت ، مما قد يمثل مشكلة إذا كان المكون الإضافي يعمل على تشغيل التعليمات البرمجية في المساحة العامة. من الأفضل أيضًا أن يكون رمز إلغاء التثبيت مركزيًا ". - سكوت رايلي
يوضح الكود أدناه عملية إلغاء التثبيت باستخدام خطاف أساسي:
كما تمت مناقشته ، هذا ليس هو الحل الأفضل. أفضل طريقة للتعامل مع عمليات إلغاء التثبيت هي استخدام ملف uninstall.php
. كل ما عليك فعله هو إنشائه وسيتم استخدامه إذا كان متاحًا.
كما ترى ، هذا في الواقع حل أبسط. أفضل للجميع ، أنها قائمة بذاتها.
أمان إضافي
لم أرغب في المبالغة في تعقيد الأمثلة المعروضة حتى الآن مع المشكلات المتعلقة بالأمان ، ولكن يجب عليك حقًا اتخاذ بعض الخطوات لضمان عدم السماح بتشغيل هذه الإجراءات إلا لمن يُسمح لهم بذلك.
استخدم المقتطف التالي عند التنشيط وإلغاء التنشيط:
يتأكد مقطع التعليمات البرمجية هذا من أن المستخدم لديه الأذونات لتنفيذ هذا الإجراء وأن الإجراء قد تم إنشاؤه في الصفحة المناسبة. هذا يجب أن يحمي من معظم المحاولات الخبيثة.
عملية إلغاء التثبيت خاصة ، لذا سنحتاج إلى استخدام كود مختلف قليلاً:
حان الوقت للتنظيف
إذا كان المكون الإضافي الخاص بك يضيف أشياء إلى WordPress ، فمن واجبك كمطور إزالتها عندما يقرر المستخدم حذف المكون الإضافي الخاص بك.
يتيح لك استخدام طرق التنشيط وإلغاء التنشيط وإلغاء التثبيت الموضحة أعلاه إنشاء نظام يقوم بذلك بأمان وأمان. أوصي بشدة أيضًا بقراءة سلسلة Stackexchange هذه ، والتي تحدد هذه العمليات في بيئات OOP.
إذا لم تكن عضوًا في WPMU DEV بعد ، فقم بالتسجيل اليوم للحصول على نسخة تجريبية مجانية ، خالية تمامًا من المخاطر. بصفتك عضوًا ، ستتمكن من الوصول إلى جميع المكونات الإضافية الرائعة وخدمة الاستضافة السريعة ، بالإضافة إلى دعم الخبراء على مدار الساعة طوال أيام الأسبوع لجميع الأسئلة والمشكلات المتعلقة بـ WordPress.
العلامات: