أسوأ خمسة أخطاء في تطوير WordPress
نشرت: 2022-03-11أو ، إلى جميع الخوادم التي قمت بتخزينها من قبل: نظرة رعب إلى الوراء في أسوأ خمسة أخطاء في WordPress ارتكبتها
كمطورين ، نرتكب أنواعًا مختلفة من الأخطاء في مراحل مختلفة من حياتنا المهنية. في تطوير WordPress ، على وجه الخصوص ، نرتكب أنواعًا مختلفة من الأخطاء مع نمو معرفتنا بقاعدة أكواد WordPress.
منذ بضع سنوات ، سمعت مات مولينويج يعلن شيئًا مفاده أن معظم الناس يكررون أخطائهم ، ويتعلم الأشخاص الأكثر ذكاءً من أخطائهم ، ويتعلم أذكى الناس بيننا من أخطاء الآخرين. أفضل هذا ، وأضيف نتيجة طبيعية: الجميع يرتكب أخطاء ، والأشخاص المتواضعون يشاركون هذه الأخطاء على انفراد ، والأجرأ بيننا يكتبونها وينشرونها في مدونة!
لكن هناك وقت للتفكير لاحقًا. أنت تقرأ هذا المقال لأنك تريد أن تسمع عن حادث قطار وأنا المهندس. بدون مزيد من الديباجة ، انضم إلي لإلقاء نظرة رعب على الأخطاء الخمسة الأكثر إحراجًا التي ارتكبتها كمطور WordPress.
الوقت الذي قمت فيه بتحديث نسخة مخترقة من WordPress Core
كنت أتخرج للتو من القيام بعربات تشفير CraigsList شديدة الغموض ، إلى العمل الفعلي في وكالة حقيقية. لقد وصلت! كنت متوترة لأن أعمل من مكان آخر غير أريكتي ، في شيء آخر غير البيجامة. ولكن حتى في ذلك الوقت ، كنت أعرف بشكل عام WordPress مباشرة من WordPress وهو القيام بذلك بشكل خاطئ ، ووجدت أنه من دواعي التعظيم الذاتي التباهي بأفضل ممارسات WordPress ، مثل عدم استخدام "جوهر القرصنة".
كانت مهمتي الأولى في تطوير WordPress في هذه الوكالة هي استئناف مشروع متوقف - وهو مشروع معقد نوعًا ما بالنسبة لمهاراتي المحددة في ذلك الوقت. لقد اشتمل على الكثير من التخصيصات لتسجيل ووردبريس وتدفق تسجيل الدخول. اشتهر المطور السابق بأنه حقق تقدمًا كبيرًا عن طريق تحرير ملفات wp-login
الأساسية.
كنت أعلم أن هذا لم يكن مستدامًا ، لذلك كان أول طلب في عملي هو تثبيت مكون إضافي للنسخ الاحتياطي / الاستعادة واستبدال WordPress core بإصدار تم تنزيله حديثًا. كنت واثقًا من أنه لم يتم تنفيذ أي شيء مثير للإعجاب حتى الآن في المشروع ، وأنني سأكون قادرًا على محاكاة مجموعة الميزات الحالية عبر المرشحات.
مهما كانت قدرة الترميز التي قد تكون لدي أو لم تكن لدي في تلك المرحلة ، سرعان ما أصبحت غير ذات صلة ، حيث كان صاحب العمل الجديد يغلي. لم تفهم أهمية "نواة القرصنة" ولم أكن ناضجة بما يكفي لشرحها بطريقة سهلة الهضم. الشيء الوحيد الذي أدى إلى تبريد جبينها مؤقتًا كان عندما أكدت لها أنه يمكنني العودة عبر المكوّن الإضافي للنسخ الاحتياطي / الاستعادة الذي قمت بتثبيته.
هل يمكنك تخمين إلى أين يتجه هذا؟
هذا المكون الإضافي ، كما سيحصل عليه المصير ، قام فقط بعمل نسخة احتياطية wp-content
. مهما كانت اختراقات WordPress في تلك الملفات الأساسية ، فقد ولت إلى الأبد. ما زلت أتذكر رسالتي الإلكترونية التي أرسلتها إليها (لقد طردتني منذ فترة طويلة إلى مكتبي في المنزل في هذه المرحلة):
يا رفاق ، لا يمكنني عمل النسخ الاحتياطي.
لقد كنت مستعدًا حقًا لإكمال مجموعة الميزات التي تريدها عبر المرشحات والإجراءات ، لكنها لن تسمعها. لقد طردتني على الفور ، وهددت بمقاضاتي ، ولم تدفع لي أبدًا مقابل أسبوعين من العمل الشاق. لقد تعرضت للإذلال الشديد.
هناك العديد من الأشياء (الواضحة الآن) التي كان بإمكاني تعلمها من هذه التجربة. الدرس العام ، أن النسخة الاحتياطية ليست نسخة احتياطية حتى يتم التدريب عليها وتأكيدها ، هو درس جيد. لكن الشيء الذي علقني أكثر هو درس محدد حول كيفية إجراء النسخ الاحتياطية بالضبط في WordPress - خاصة مع WordPress core.
لقد تعلمت أن أعتز حقًا بالبيئات المدارة مثل WP-Engine ، مع نظام نسخ احتياطي / استعادة قوي. يمتلك العديد من مضيفي البوتيك أدوات سطر أوامر متنوعة وميزات أخرى تركز على المطورين لإجراء النسخ الاحتياطية ، لكن WP-Engine هو المفضل لدي. إنه سريع جدًا ما لم يكن لديك شبكة كبيرة جدًا. واجهة المستخدم بسيطة. لها واجهة مستخدم ، فترة: يمكن لأي شخص يعرف كيفية استخدام WordPress العمل مع هذا. أي ، على عكس بعض أساليب CLI التي ربما تكون أسرع بكثير ، أو بعض الأشياء الغامضة المدفونة في Plesk ، يمكن لعملائي استخدام هذا ، وفهمه ، ومراقبته ، والتحقق من أنني أستخدمه. انا من أشد المعجبين.
الوقت الذي قمت فيه بسحب نظامنا الأساسي بالكامل إلى دليل الأشقاء
كنت ما زلت جديدًا إلى حد ما في مكان العمل الاحترافي وكنت دائمًا شخصًا يعمل بنظام Windows. ومع ذلك ، كانت وظيفتي الجديدة في متجر Mac وتعلمت أن أحب كل شيء يتعلق به بسرعة كبيرة. حسنًا ، كل شيء تقريبًا. يبدو أنني أواجه الكثير من المشاكل مع "الفأر السحري". كنت أميل إلى فقد اتصال Bluetooth الخاص بي ، مما أدى إلى إجراءات السحب والإفلات العرضية والمخيفة في كثير من الأحيان بمجرد إعادة الاتصال. أكثر من ذلك ، لقد كنت مجرد أخرق مع مهارة حركية جديدة.
في هذه الأيام ، كان تدفق تطوير WordPress الخاص بنا لا يزال يشمل النشر إلى الإنتاج عبر FTP. لم يكن من غير المألوف بالنسبة لي أن أقضي أيام العمل بأكملها في كتابة التعليمات البرمجية والدردشة والرد على رسائل البريد الإلكتروني ، وعمومًا يتنقل ذهابًا وإيابًا عبر الماوس السحري الجديد ، مع فتح Cyberduck للإنتاج على سطح المكتب. يا إلهي هل هذا الصوت سيء! لكن هذا ما كان عليه الأمر.
في يوم من الأيام ، اختفت منصتنا بالكامل. سارع مسؤول النظام لدينا إلى افتراض أنه كان نوعًا من DDoS أو شيء على مستواه بشكل عام. أما بالنسبة لنا كمطورين ، فقد وثقنا في غرائزه وافترضنا أنه سيكتشفها قريبًا.
مرت الساعات. جاء اليوم وذهب. ما زال في الأسفل.
بحلول صباح اليوم التالي ، تمت استعادة الأشياء ، وطلب مني مدير التكنولوجيا لدينا بلطف الانضمام إليها في غرفة الاجتماعات. حدد مسؤول النظام لدينا المشكلة. لقد سحب سجلات FTP ولاحظ أن المستخدم الخاص بي قد نقل نظامنا الأساسي بالكامل إلى دليل الأشقاء. وهذا يعني أن wp-content
قد أصبح متداخلًا ضمن wp-includes
.
لقد شعرت بالإحباط ، لكن كبير موظفي التكنولوجيا لدينا كان رائعًا حيال ذلك. استطاعت أن ترى أنني كنت موظفًا مفيدًا وخاضعًا للمساءلة بشكل عام ، لكنها تحدتني أن أتجاوز مجرد الندم والتوصل إلى طرق لمنع حدوث ذلك مرة أخرى. لقد وجدت شيئين مفيدين حقًا.
الأول هو تحديد موقع أمر CLI لمنع Cyberduck من السماح بتحركات الملفات من بعيد إلى بعيد على الإطلاق. كان هذا إجراء أمانًا جيدًا وقد اعتمدناه كسياسة للشركة على الفور.
والثاني هو أنني اهتممت بشدة بالانتشار عبر جيت. في النهاية ، انتهيت من كتابة مكون إضافي لبرنامج WordPress لنسج إصدارات Bitbucket الخاصة بنا في تدفق تحديث wp-admin
العادي. منذ ذلك الحين ، لم يكن لدينا أي سبب تقريبًا حتى للوصول إلى FTP للإنتاج. هذا البرنامج المساعد هو أحد إنجازاتي المهنية المفضلة. بالطبع ، يعد التقارب مع Git شرطًا أساسيًا للمطورين اليوم.
الوقت الذي قمت فيه بإزالة كل محتوى الواجهة الأمامية عبر add_filter()
لقد اعتقدت حقًا أنني أصبحت ذكيًا جدًا مع ممارسات WordPress الخاصة بي بحلول هذه المرحلة. كان الطلب لإلحاق "شارة" بمشاركات من فئة معينة. لسبب ما كنت أفكر في أن noobs فقط من شأنه أن يضيف شرطيًا آخر إلى ملف قالب لشيء كهذا ، لذلك بفخر كبير ، قمت بتطبيق الفلتر التالي:
add_filter( 'the_content', 'myprefix_add_a_badge' ); function myprefix_add_a_badge( $content ) { global $post; if( ! has_category( 'sponsored', $post ) ) { return false; } $out = $content . myprefix_get_badge(); return $out; }
ترى أي شيء خطأ في هذا؟ لقد اختبرت ذلك بسرعة في التدريج للتأكد من أن المنشورات المطلوبة قد تم تطبيق شاراتها. ثم قمت بنشره وتركت العمل لهذا اليوم. كما قد تتخيل ، انفجر الكون.
على وجه التحديد ، كانت النتيجة أن المشاركات التي لا تحمل الشارة كانت تُعرض في الواجهة الأمامية مع عدم وجود محتوى على الإطلاق! هل تستطيع أن ترى لماذا؟ كانت المشكلة أنه بدلاً من إرجاع $content
في حالة الحارس ، كنت أعيد القيمة false
. لكن في الحقيقة هناك طبقات كثيرة من الأخطاء هنا.
لماذا كنت مقتنعًا فقط باختبار المشاركات التي حصلت على شارة؟ لماذا لم أختبر أيضًا أن المنشورات الأخرى ظلت سليمة؟ لماذا تم النشر في الإنتاج في وقت متأخر جدًا من اليوم؟ لماذا كانت مراقبة الجودة لدينا تتكون بالكامل من النقر قليلاً على الصفحة وتحديث الصفحة؟

يمكن تلخيص الإجابة على كل هذه الأسئلة بالنضج . يستغرق الأمر بعض الوقت حتى تمل من ارتكاب هذه الأنواع من الأخطاء ، قبل أن نتحرك للاستثمار في أشياء مثل اختبار الانحدار البصري واختبارات الوحدة. كان هذا الخطأ عبارة عن قشة ، من بين المئات ، أدت في النهاية إلى كسر ظهر البعير وقادني إلى الاستثمار في phpUnit و xDebug. في المقابل ، علمتني تلك الأدوات كيفية كتابة تعليمات برمجية قابلة للاختبار ، والتي ربما منعت أخطاء أكثر من الاختبارات نفسها.
الوقت الذي قسمته على الصفر داخل حلقة لانهائية
كان طلب العميل هو إعادة تنسيق السطر الثانوي لمدونة WordPress بحيث يقرأ التاريخ "XYZ ago" بدلاً من "10 November ، 2011." لم أكن متأكدًا تمامًا من كيفية تحقيق ذلك ، لكنني كنت أدرك أنه تنسيق تاريخ يبدو أنه يزداد شعبيته ، وبالفعل زودني دكتور Google بمقتطف بسرعة كبيرة. عملت على بلدي المحلي! كان لديها الكثير من الرياضيات ، على وجه الخصوص ، الكثير من القسمة . لم أكن متأكدًا تمامًا من سبب نجاحها - كان هناك الكثير من الحلقات المتداخلة ، والباقي ، والتقريب ، وما إلى ذلك. لكنها كانت موجودة على Google وبدا أنها تعمل ، وكنت سعيدًا بما يكفي لنشرها في الإنتاج.
بعد حوالي 30 دقيقة ، تلقيت سكايب غير ودي من مسؤول النظام لدينا. انخفض الإنتاج. ميت في الماء. سألني إذا كنت أقسم على صفر مؤخرًا ولم يكن لدي أي فكرة عما قد يشير إليه. إليكم ما حدث.
صدق أو لا تصدق ، المقتطف غير المقروء "يعمل على بلدي المحلي" الذي وجدته ، نظرًا لحجم عينة كبير بما يكفي ، كان قادرًا على بعض السلوك الشاذ. مع بعض المجموعات المؤسفة من الأيام والساعات والدقائق ، ستحاول حلقات Rube Goldberg أحيانًا قسمة رقم على صفر. أذكر من رياضيات المدرسة الثانوية:
في الحساب العادي ، ليس للتعبير أي معنى ، حيث لا يوجد رقم ، عند ضربه في 0 ، يعطي a (بافتراض ≠ 0) ، وبالتالي فإن القسمة على الصفر غير معرَّف. - ويكيبيديا
إذن ماذا يعني هذا لأجهزة الكمبيوتر؟ عادةً ما تكون مجرد رسالة خطأ في السجلات ، ولكن في حالتي ، كان الأمر أسوأ: كان الخطأ الحسابي يتداخل مع منطق الحلقة الخاص بي ، مما تسبب في تشغيل حلقاتي المتداخلة دون إكمال - حلقة لا نهائية تؤدي إلى شاشة بيضاء للموت. ويزداد الأمر سوءًا! نظرًا لأن كل تكرار للحلقة كان يكتب خطأ للقسمة على الصفر ، فقد نما سجل الأخطاء إلى نسب رائعة وبدأ في إعاقة نظام الملفات لدينا. كان لهذا تأثير هجوم DDoS ، وإن كان هجومًا عبثيًا.
الشيء السيئ في هذا الخطأ هو أنه أزال موقعًا ذا حركة مرور عالية. الشيء الجيد في هذا الخطأ هو أنه غير مقاربتي للعمل بشكل كبير. أكثر من أي شيء آخر ، شعرت بالخجل من رغبتي في التنفيذ دون فهم. لقد تعهدت بألا ألصق مقتطفًا مرة أخرى أبدًا دون بذل كل جهد ممكن لفهم كل سطر ، حتى المتابعة مع مؤلف المقتطف إذا لزم الأمر.
أكثر من ذلك ، تعهدت بعدم إرسال الكود الذي لم يكن قابلاً للقراءة بشكل كبير للمطورين المبتدئين. لقد أصبحت مهووسًا بمعايير ترميز WordPress ، وإضافات محرر النصوص ، والتعليقات المضمنة و docblocks ، وحتى علامات التبويب مقابل المسافات ، تلك الطقوس الكلاسيكية للمرور! باختصار ، قررت أن أهتم أكثر بمدى سهولة قراءة الكود الخاص بي بدلاً من مدى سهولة كتابته . قادني هذا التمرد ضد اللصق دون فهم إلى الاهتمام باهتمام مهني عميق في إدارة تبعيات الطرف الثالث ، وهو موضوع غذى العديد من فرص الكتابة والتحدث بالنسبة لي خلال العقد التالي.
أوه ، والشيء المضحك حقًا بشأن هذا الخطأ؟ يحتوي قلب ووردبريس على حل أحادي الخط لذلك.
الوقت الذي تركت فيه مشروعًا يخرج عن نطاق السيطرة حتى سأم منه الجميع
لقد أنجزت مشروعًا رائعًا حقًا. كنت سأكون القائد التقني ومهندس تطوير WordPress ، وكان لدي مطور Amazon AWS Lambda وخبير عميق في JavaScript يقدم لي التقارير. كانت هذه هي المرة الأولى التي أطلعني فيها على عدة أشخاص ، وكانت إلى حد بعيد المشروع الأكثر تعقيدًا الذي عملت فيه على الإطلاق. حتى الإشارة إليه كمشروع WordPress كان يقلل كثيرًا من الأمر ، لكن WordPress كان هو الغراء الذي يربط كل شيء معًا ، لذلك كان من المنطقي بالنسبة لي أن أعمل كقائد تقني.
نظرًا لأن دوري الأساسي كان عادةً أن أكون تقنيًا صارمًا ، وأيضًا لأن لدي تقاربًا مع التقليلية ، لم يخطر ببالي مطلقًا تنفيذ شيء مثل Jira أو Basecamp أو أي نظام أساسي حقيقي لإدارة المهام. سارت الأمور بشكل جيد إلى حد ما بالنسبة للتكرار الأول للمشروع. لقد تمكنا من العمل على المكونات الفردية الخاصة بنا ، والإشارة إلى مستند مواصفات العميل باعتباره خارطة طريق المنتج ، وفقط ping لبعضنا البعض عبر Slack عندما احتجنا إلى الجمع بين الأشياء معًا.
بدأت المشكلة عندما بدأنا في عرض التقدم على العميل وتنفيذ ملاحظاته. ما بدأ كفريق مكون من ثلاثة أشخاص شعر على الفور أنه تم نقله إلى ترتيب جديد من حيث الحجم: لم يكن من الواضح من المسؤول عن أي جزء من التعليقات ، وما هي حالة تنفيذ هذه التعليقات ، أو حتى من كان يتحدث إلى من . لقد تجاوزنا حد Gmail البالغ 100 رد لكل سلسلة عدة مرات!
بدأت الأمور تصبح غير مريحة. أعتقد أن العميل شعر وكأنه فقد السيطرة على اتجاه المشروع ، وبنفس القدر من الأهمية ، شعر أنه فقد رؤية حالة المشروع. قال مطور موقع Amazon الخاص بي يومًا ما ، "أتساءل عما إذا كان ينبغي لنا استخدام Trello."
هاه ، اعتقدت. هل يحتاج فريق مكون من ثلاثة أشخاص إلى نظام أساسي من هذا القبيل؟ مرة أخرى ، أميل المعتادة هي تفضيل عدد أقل من الأدوات ، وأعباء أقل ، وتعقيد أقل. لكن المشروع كان بالفعل يجرنا جميعًا إلى الأوساخ ، فما الضرر من تجربته؟
لقد قمت بتمشيط جميع رسائل البريد الإلكتروني لدينا ، وجميع مستنداتنا المحددة ، وجميع سلاسل التعليقات المتباينة لدينا ، وقمت بتعيينها جميعًا على لوحات Trello. على الفور ، قام المشروع بإحياء نفسه من قبره الرقمي لأننا نستطيع التواصل مع قدر أقل بكثير من العقلية العقلية. بدلاً من البحث عن نص في صندوق البريد الإلكتروني الخاص بي أو مستند مواصفات قديم في الغالب ، كان لدينا لوحات وقوائم وبطاقات رائعة. كان من السهل رؤية حالة أي ميزة ، ودمج الملاحظات ، وتوزيع المهام الجديدة. شعرت وكأننا أصابنا بالعمى تدريجيًا ، وببطء شديد لدرجة أننا لم نلاحظ ذلك ، وفجأة استطعنا الرؤية مرة أخرى.
من المؤكد أن الكود لم يكتب بنفسه ، وكان لا يزال مشروعًا صعبًا للغاية ، ولا يزال يتعين علينا توظيف كل أوقية من مهاراتنا الفنية. لكن هذا نوع من النقطة: نظرًا لأن لدينا أخيرًا بنية تحتية لفهم المشروع ، فقد أصبحنا الآن أحرارًا في تطبيق مهاراتنا الفنية.
يسعدني أن أقول إن هذا المشروع قد اكتمل بما يرضي العميل تمامًا. في الوقت الحاضر ، أعتبر أن Trello أو Jira شرطًا فعليًا للفرق المكونة من فريقين أو أكثر.
انطلق وتعلم من أخطاء الآخرين
إليك أحد أذكى الأشياء التي سمعتها وهي تدرس خلال فترة وجودي في الجيش: "لا بأس أن يرتكب الملازمون أخطاء ملازمًا ولا بأس أن يرتكب النقباء أخطاء نقيب. ما هو غير مقبول هو أن يرتكب النقباء أخطاء الملازم ، أو أن يرتكب الملازمون أخطاء شخصية ".
بمعنى آخر ، لا بأس أن ترتكب الأخطاء الشائعة التي هي بالطبع مسألة تتعلق بمستوى مسؤوليتك الحالي. ما هو أكثر أهمية هو كيف تنمو منهم.
آمل أن نتعلم نحن كمطورين أن نكون متعاطفين مع الآخرين عندما يرتكبون أخطاء ، كما نأمل أن يكون الآخرون معنا. آمل أن أظل فضوليًا وخاضعًا للمساءلة عندما أرتكب أخطاءً حتى أواصل الابتكار في الماضي. آمل أن أكون دائمًا محاطًا بمجتمع ملهم من خبراء WordPress - الأشخاص الذين يمكنني التعلم من أخطائهم وأتجنب ارتكاب نفسي. وليس أقلها ، آمل أن يتعلم الآخرون من تجربتي ، مثل أخطاء WordPress التي شاركتها هنا.