it-swarm.asia

الهدف أفضل الممارسات لتطوير البرنامج المساعد؟

بدء مجتمع ويكي لجمعهدفأفضل الممارسات لتطوير البرنامج المساعد. هذا السؤال مستوحى من @ EAMann's comments on wp-hackers .

تكمن الفكرة في التعاون بشأن أفضل الممارسات الموضوعية التي قد تكون حتى نتمكن من استخدامها في نهاية المطاف في عملية مراجعة تعاون المجتمع.

UPDATE: بعد الاطلاع على الإجابات القليلة الأولى ، يصبح من الواضح أننا بحاجة إلى وجود فكرة/اقتراح/أفضل ممارسة واحدة فقط لكل إجابة ويجب على الناس مراجعة القائمة للتأكد من عدم وجود تكرارات قبل النشر.

131
MikeSchinkel

استخدام الإجراءات والمرشحات

إذا كنت تعتقد أن الأشخاص يرغبون في إضافة أو تغيير بعض البيانات: تقديم apply_filters () قبل العودة .

ملاحظة هناك شيء واحد أجده محبطًا بعض الشيء وأن عناوين سؤالك هي النسبة المئوية للمكونات الإضافية التي تم تصميمها فقط للمستخدمين النهائيين ، أي لا تحتوي على روابط خاصة بهم. تخيل لو تم تصميم ووردبريس مثل معظم الإضافات؟ سيكون غير مرن وحل مناسب للغاية.

ربما تكون الأمور مختلفة إذا كان لدى WordPress القدرة على تثبيت المكونات الإضافية التي تعتمد عليها المكونات الإضافية الأخرى؟ نظرًا لأنني عادةً ما يجب علي كتابة الكثير من الوظائف التي أحتاجها من البداية لأن العملاء يريدون الأشياء بطريقة معينة والمكونات الإضافية المتاحة ، بينما 90٪ هناك ، لا تسمح لي بالمرونة لتحديث الـ 10٪ المتبقية.

أتمنى حقًا أن يحدد أولئك الذين يقودون مجتمع WordPress طريقة للتأكد من أن الإضافات تتم مكافأتها لاتباع أفضل الممارسات (مثل إضافة عوامل ربط للمطورين الآخرين) تشبه إلى حد كبير الإجابات الجيدة على موقع StackExchange.

لنأخذ مثالا من سؤال آخر :

مثال: أريد أن أفعل شيئًا في المكون الإضافي الخاص بي عندما يقوم شخص ما بإعادة تغريد مقال إذا كان هناك ربط مخصص في أي مكون إضافي لإعادة تغريد شعبية هو أنه يمكنني ربطه وإطلاقه ، فسيكون ذلك رائعًا. لا يوجد ، لذلك يمكنني تعديل المكوّن الإضافي الخاص به لتضمينه ، لكن هذا لا ينطبق إلا على نسختي ، ولا أريد محاولة إعادة توزيع ذلك.

ذات صلة

69
Arlen Beiler

قم بتحميل البرامج النصية/CSS باستخدام wp_enqueue_script و wp_enqueue_style

لا يجب تحميل/محاولة تحميل إصدارات مكررة من ملفات JS/CSS ، وخاصة jQuery وملفات JS الأخرى المضمنة في WP Core.

يجب أن تستخدم الإضافات دائمًا wp_enqueue_script و wp_enqueue_style عند ربط ملفات JS و CSS وليس مباشرة عبر علامات <script>.

ذات صلة

53
Rick Curran

دعم I18n

يجب ربط جميع سلاسل الإخراج بنطاق نص مناسب للسماح للتدويل من قبل الأطراف المهتمة ، حتى لو لم يكن للمطور أي مصلحة في ترجمة المكوّن الإضافي الخاص به.

لاحظ أنه من المهم جدًا تحميل ملفات اللغة أثناء الإجراء init حتى يتمكن المستخدم من ربط الإجراء.

انظر المخطوطة: I18n لمطوري WordPress

وأيضا هذه المقالة: تحميل WP ملفات اللغة بشكل صحيح .

منذ وورد 4.6+

قام WP 4.6 بتغيير ترتيب التحميل وتحديد المواقع ، مما جعله أسهل بكثير للمطورين والمستخدمين.

النظر في مكون إضافي مع textdomain "my-plugin" ، سيبحث WordPress الآن أولاً عن ملف الترجمة في:
(/wp-content/languages/plugins/my-plugin-en_US.mo}

إذا فشلت في العثور على واحدة هناك ، فسوف تبحث عن واحدة حيث يخبرها المكون الإضافي بالبحث (عادةً في مجلد "لغة" pluigns في حالة اتباع المخطوطة):
(/wp-content/plugins/my-plugin/languages/my-plugin-en_US.mo}

أخيرًا إذا لم يتم العثور على ملف لغة ، فسيتم التحقق من الموقع الافتراضي لـ:
(/wp-content/languages/my-plugin-en_US.mo}

تمت إضافة الاختيار الأول في 4.6 وتمنح المستخدمين مكانًا محددًا لإضافة ملف اللغة ، كما كان من قبل سيحتاجون إلى معرفة أين أضاف المطور ملف اللغة ، والآن يحتاج المستخدم فقط إلى معرفة مجال النص الإضافي للمالك: / wp -المحتوى/اللغات/الإضافات/TEXTDOMAIN-LOCAL.mo


أدناه هي الطريقة القديمة (غير مناسبة لأن WP 4.6+)

[...]
أخيرًا ، أود أن أوضح أنه من المهم تحميل ملفات لغة المستخدم المخصصة من WP_LANG_DIR قبل تحميل ملفات اللغة التي تأتي مع البرنامج المساعد. عندما يتم تحميل ملفات mo متعددة لنفس المجال ، سيتم استخدام الترجمة التي تم العثور عليها لأول مرة. وبهذه الطريقة ، ستكون ملفات اللغة التي يوفرها البرنامج المساعد بمثابة نسخ احتياطي للسلاسل التي لا يترجمها المستخدم.

public function load_plugin_textdomain()
{
    $domain = 'my-plugin';
    // The "plugin_locale" filter is also used in load_plugin_textdomain()
    $locale = apply_filters( 'plugin_locale', get_locale(), $domain );

    load_textdomain( 
            $domain, 
            WP_LANG_DIR . '/my-plugin/' . $domain . '-' . $locale . '.mo' 
    );
    load_plugin_textdomain( 
            $domain, 
            FALSE, 
            dirname( plugin_basename(__FILE__) ) . '/languages/' 
    );
}
49
EAMann

تأكد من إنشاء مكونات إضافية بدون أخطاء مع WP_DEBUG

اختبر دائمًا المكوّنات الإضافية مع WP_DEBUG قيد التشغيل ومن الأفضل تشغيلها طوال عملية التطوير. لا ينبغي أن يلقي المكون الإضافي أي أخطاء باستخدام WP_DEBUG. يتضمن هذا الإشعارات المهملة والفهارس غير المحددة.

لتشغيل تصحيح الأخطاء ، قم بتحرير ملف wp-config.php الخاص بك بحيث يتم تعيين ثابت WP_DEBUG على true. راجع Codex على Debug لمزيد من التفاصيل.

47
John P Bloch

أول استخدام الوظائف الموجودة في وورد الأساسية

إذا استطعت: استخدام الوظائف الموجودة المضمنة في WordPress core بدلاً من كتابة ما لديك. فقط قم بتطوير وظائف مخصصة [PHP) عندما لا توجد وظيفة مناسبة مسبقًا في WordPress الأساسية.

إحدى المزايا هي أنه يمكنك استخدام "سجل إخطارات السجل" لمراقبة الوظائف التي يجب استبدالها بسهولة. فائدة أخرى هي أنه يمكن للمستخدمين عرض وثائق الوظيفة في المخطوطة وفهم ما يفعله البرنامج المساعد بشكل أفضل حتى لو لم يكن مطورًا ذو خبرة PHP.

ذات صلة

41
kaiser

يجب أن تؤدي إزالة التثبيت إلى إزالة جميع بيانات المكون الإضافي

عند إزالته من تثبيت WordPress ، يجب أن يحذف البرنامج المساعد جميع الملفات والمجلدات وإدخالات قاعدة البيانات والجداول التي أنشأها بالإضافة إلى قيم الخيار تم إنشاؤه.

قد تقدم الإضافات خيارًا لتصدير/استيراد إعدادات ، بحيث يمكن حفظ الإعدادات خارج WordPress قبل الحذف.

ذات صلة

33
Travis Northcutt

منع حقن SQL مع إدخال البيانات

البرنامج المساعد should قم بتعقيم كل مدخلات المستخدم التي تم استرجاعها بشكل مباشر أو غير مباشر (على سبيل المثال عبر $_POST أو $_GET) قبل استخدام قيم الإدخال للاستعلام من قاعدة بيانات MySQL.

راجع: تنسيق عبارات SQL .

33
MikeSchinkel

استخدم رمز PHP5 موجه للفئة والكائن

ليس هناك سبب لعدم كتابة رمز PHP5 نظيف وموجه للكائنات. سيتم التخلص التدريجي من دعم PHP4 بعد الإصدار التالي (WP 3.1). بالطبع ، يمكنك بادئة جميع أسماء الوظائف حتى ينتهي الأمر بـ endlessly_long_function_names_with_lots_of_underscores ، لكن من الأسهل بكثير كتابة فئة بسيطة وتجميع كل شيء فيها. أيضًا ، ضع فصلك في ملف منفصل وقم بتسمية ذلك وفقًا لذلك حتى يمكنك تمديده وصيانته بسهولة:

// in functions.php
require 'inc/class-my-cool-plugin.php';
new MyCoolPlugin();

// in inc/class-my-cool-plugin.php
class MyCoolPlugin {
    function __construct() {
        // add filter hooks, wp_enqueue_script, etc.

        // To assign a method from your class to a WP 
        // function do something like this
        add_action('admin_menu', array($this, "admin"));
    }

    public function admin() {
        // public methods, for use outside of the class
        // Note that methods used in other WP functions 
        // (such as add_action) should be public
    }

    private function somethingelse() {
        // methods you only use inside this class
    }
}
30
Husky

بادئة جميع عناصر مساحة الاسم العالمية

يجب أن يضاف المكوّن الإضافي بشكل صحيح جميع عناصر مساحة الاسم العالمية (الثوابت والوظائف والفئات والمتغيرات وحتى أشياء مثل التصنيفات المخصصة وأنواع المنشورات والحاجيات وما إلى ذلك). على سبيل المثال ، لا تقم بإنشاء دالة تسمى init()؛ بدلاً من ذلك ، قم بتسمية شيء مثل jpb_init().

من الشائع أن يستخدم بادئة من ثلاثة أو أربعة أحرف أمام الأسماء أو للاستفادة من PHP ميزة مساحة الاسم . قارن: بادئة ذات حرف واحد لـ PHP ثوابت الصف؟

ذات صلة

29
John P Bloch

لا ينبغي أن يؤدي إلغاء التنشيط إلى فقدان البيانات

البرنامج المساعد لا ينبغي حذف أي من بياناته عند إلغاء تنشيط.

ذات صلة

25
MikeSchinkel

فقط تضمين الملفات التي تحتاجها ...

إذا كنت في المقدمة ، فلا تقم بتضمين كود يتعلق بمنطقة المشرف.

23
Denis de Bernardy

أعلن فقدان البيانات على إلغاء تثبيت البرنامج المساعد

عند إلغاء التثبيت مكون إضافي should مطالبة المستخدم بحذف بياناته / وتلقي تأكيد بأن المستخدم بخير بحذف البيانات قبل القيام بذلك و البرنامج المساعد should أيضًا اسمح للمستخدم بخيار حفظ البيانات عند إلغاء التثبيت. (هذه الفكرة منEAMann.)

ذات صلة

21
MikeSchinkel

استخدم WordPress (مضمن) في معالجة الأخطاء

لا فقط return; إذا كان إدخال المستخدم خاطئًا. تسليمهم بعض المعلومات حول تم القيام به خطأ.

function some_example_fn( $args = array() ) 
{
    // If value was not set, build an error message
    if ( ! isset( $args['some_value'] ) )
        $error = new WP_Error( 'some_value', sprintf( __( 'You have forgotten to specify the %1$s for your function. %2$s Error triggered inside %3$s on line %4$s.', TEXTDOMAIN ), '$args[\'some_value\']', "\n", __FILE__, __LINE__ ) );

    // die & print error message & code - for admins only!
    if ( isset( $error ) && is_wp_error( $error ) && current_user_can( 'manage_options' ) ) 
        wp_die( $error->get_error_code(), 'Theme Error: Missing Argument' );

    // Elseif no error was triggered continue...
}

خطأ واحد (كائن) للجميع

يمكنك إعداد كائن خطأ عمومي للموضوع أو المكون الإضافي أثناء التمهيد:

function bootstrap_the_theme()
{
    global $prefix_error, $prefix_theme_name;
    // Take the theme name as error ID:
    $theme_data = wp_get_theme();
    $prefix_theme_name = $theme_data->Name;
    $prefix_error = new WP_Error( $theme_data->Name );

    include // whatever, etc...
}
add_action( 'after_setup_theme', 'bootstrap_the_theme' );

فيما بعد يمكنك إضافة أخطاء غير محدودة عند الطلب:

function some_theme_fn( $args )
{
    global $prefix_error, $prefix_theme_name;
    $theme_data = wp_get_theme();
    if ( ! $args['whatever'] && current_user_can( 'manage_options' ) ) // some required value not set
        $prefix_error->add( $prefix_theme_name, sprintf( 'The function %1$s needs the argument %2$s set.', __FUNCTION__, '$args[\'whatever\']' ) );

    // continue function...
}

ثم يمكنك جلبهم جميعًا في نهاية نسختك. بهذه الطريقة لا تقاطع عرض الصفحة ولا يزال بإمكانك إخراج كل أخطائك في التطوير

function dump_theme_errors()
{
    global $prefix_error, $prefix_theme_name;

    // Not an admin? OR: No error(s)?
    if ( ! current_user_can( 'manage_options' ) ! is_wp_error( $prefix_error ) )
        return;

    $theme_errors = $prefix_error->get_error_messages( $prefix_theme_name );
    echo '<h3>Theme Errors</h3>';
    foreach ( $theme_errors as $error )
        echo "{$error}\n";
}
add_action( 'shutdown', 'dump_theme_errors' );

يمكنك العثور على مزيد من المعلومات في هذا Q . يتم ربط تذكرة ذات صلة لإصلاح "العمل معًا" من WP_Error و wp_die() من هناك وستتبعها تذكرة أخرى. التعليقات والنقاد ومثل هذا هو موضع تقدير.

19
kaiser

اسمحوا تغيير اسم المجلد البرنامج المساعد

/ الإضافات/pluginname/{مختلف}

يجب أن يكون "البرنامج المساعد" المستخدم للمجلد دائمًا قابل للتغيير.

يتم التعامل مع هذا عادة عن طريق تحديد الثوابت واستخدامها باستمرار في جميع أنحاء البرنامج المساعد.

وغني عن القول أن العديد من الإضافات الشائعة هي مذنبون.

ذات صلة:

  • plugins_url() لسهولة الربط بالموارد ، المضمنة مع البرنامج المساعد.
19
AndyBeard

تصغير الأسماء التي تمت إضافتها إلى مساحة الاسم العالمية

البرنامج المساعد should تقليل تأثيره قدر الإمكان بواسطة تقليل عدد الأسماء التي يضيفها إلى مساحة الاسم العالمية .

يمكن القيام بذلك عن طريق تضمين وظائف المكون الإضافي في فصل دراسي أو باستخدام PHP ميزة مساحات الأسماء . بادئة كل شيء يمكن أن تساعد كذلك ولكن ليست بهذه المرونة.

بجانب الوظائف والفئات ، يقدم البرنامج المساعد لا ينبغي _ المتغيرات العامة. إن استخدام الفصول الدراسية يتفادىها عادةً ويبسط صيانة البرنامج المساعد.

ذات صلة

18
hakre

التعليق باستخدام PhpDoc

أفضل ممارسة قريبة من أسلوب PhpDoc. إذا كنت لا تستخدم IDE مثل "Eclipse" ، يمكنك فقط إلقاء نظرة على PhpDoc Manual .

ليس عليك أن تعرف بالضبط كيف يعمل هذا. يمكن للمطورين المحترفين قراءة الكود على أي حال ويحتاجون فقط إلى هذا كملخص. قد يقدر مقدمو هواية ومستخدمي هواية الطريقة التي تشرحونها بها على نفس مستوى المعرفة.

17
kaiser

استخدم واجهة برمجة تطبيقات الإعدادات قبل add_option

بدلاً من إضافة خيارات إلى قاعدة البيانات عبر وظيفة add_option ، يجب تخزينها كصفيف باستخدام Settings API التي تهتم بكل شيء لك.

استخدم واجهة برمجة تطبيقات تعديلات السمات قبل add_option

التعديلات API هي بنية بسيطة جدا وطريقة آمنة تسمح بخيارات إضافة واسترداد. يتم حفظ كل شيء كقيمة متسلسلة في قاعدة البيانات الخاصة بك. سهل وآمن وبسيط.

17
kaiser

حماية خصوصية مستخدمي البرنامج المساعد

(سابقًا: اتصال API مجهول)

إذا كان المكوّن الإضافي يتصل بنظام خارجي أو واجهة برمجة التطبيقات (مثل بعض خدمات الويب) ، فيجب أن يفعل ذلك بشكل مجهول أو يزود المستخدم بخيار مجهول يضمن عدم تسرب أي بيانات متعلقة بمستخدم البرنامج المساعد إلى جهة خارجية دون رقابة.

16
EAMann

توفير التحكم في الوصول باستخدام أذونات

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

على الأقل ، قم بفحص القدرات المناسبة لجميع أنواع الإجراءات المختلفة التي يمكن أن يستخدمها البرنامج المساعد.

15
eddiemoya

الإضافات المضيفة على WordPress.org

استخدم SVN repository المتوفرة في WordPress.org لاستضافة المكونات الإضافية. إنه يجعل تجربة مستخدم التحديث أسهل ، وإذا لم تستخدم SVN من قبل ، فسوف يجعلك تفهم فعليًا باستخدامه في سياق يبرره.

14
pixeline

تنظيم التعليمات البرمجية الخاصة بك

من الصعب دائمًا قراءة التعليمات البرمجية التي لم تتم كتابتها بالترتيب الذي يتم به تنفيذه. قم أولاً بتضمين/طلب ، وتحديد ، wp_enqueue_style & _script ، وما إلى ذلك ، ثم الوظائف التي يحتاجها البرنامج المساعد/السمة وأخيراً الباني (مثل شاشة المسؤول ، والأشياء التي تدمج في السمة ، إلخ).

حاول فصل أشياء مثل css و js في مجلداتهم الخاصة. حاول أيضًا القيام بذلك باستخدام الوظائف التي لا تعدو أن تكون مساعداً ، مثل flatteners array وما شابه ذلك. إن إبقاء الملف "الرئيسي" نظيفًا وسهل القراءة قدر الإمكان هو طريقة تساعد المستخدمين والمطورين وأنت ، عند محاولة التحديث خلال عام ولم تشاهد الكود لفترة أطول.

من الجيد أيضًا أن يكون لديك هيكل تكرره كثيرًا ، لذلك تجد طريقك دائمًا. إن التطوير في بنية معروفة على مشاريع مختلفة سيمنحك الوقت لجعله أفضل ، وحتى لو تحول عميلك إلى مطور آخر ، فلن تسمع أبدًا "لقد ترك الفوضى". هذا يبني سمعتك وينبغي أن يكون هدفا على المدى الطويل.

12
kaiser

استيراد/تصدير إعدادات البرنامج المساعد

ليس هذا شائعًا بين المكونات الإضافية ، ولكن إذا كان المكون الإضافي الخاص بك به (بعض) إعدادات ، فهو {should يوفر استيراد/تصدير البيانات مثل التكوين وإدخال المستخدم .

الاستيراد/التصدير يحسن قابلية استخدام البرنامج المساعد.

مثال على المكوّن الإضافي الذي يحتوي على وظيفة الاستيراد والتصدير (وكذلك آلية التراجع) هو Breadcrumb NavXT (Wordpress Plugin) (الكشف الكامل: بعض الكود القليل من قبلي هناك ، وقد تم معظمه بواسطة mtekk) .

ذات صلة

12
hakre

يموت مع الاسلوب

تموت بطريقة لائقة يجب أن تستخدم جميع وظائف الوظائف الإضافية (وحتى السمات) wp_die() في الأماكن الحرجة لتزويد المستخدم بمعلومات قليلة عما حدث. أخطاء php مزعجة ويمكن wp_die أن تمنح المستخدم رسالة نصية رائعة بشأن الخطأ الذي قام به البرنامج المساعد (أو هم). بالإضافة إلى ذلك ، إذا قام المستخدم بإلغاء تنشيط إلغاء تنشيط المكوّن الإضافي ، فسوف ينهار.

يساعد استخدام wp_die() أيضًا على أن تكون الإضافات/السمات الخاصة بك متوافقة مع ووردبريسسويتي .

11
kaiser

توفير شاشات المساعدة للمستخدمين

من الأفضل أن تقول RTFM (انقر فوق "مساعدة") كإجابة من الاضطرار إلى الإجابة عن السؤال مرارًا وتكرارًا.

/**
  * Add contextual help for this screen
  * 
  * @param $rtfm
  * @uses get_current_screen
  */ 
  function ContextualHelp( /*string*/ $rtfm) 
  { 
     $current_screen = get_current_screen();
     if ($current_screen->id == $this->_pageid) 
     {
        $rtfm .= '<h3>The WordPress Plugin - Screen A</h3>';
        $rtfm .= '<p>Here are some tips: donate to me ' .
     }
     return $rtfm; 
  }
add_action('contextual_help', array($this,'ContextualHelp'),1,1);

update/note: (انظر تعليقات من kaiser): المثال أعلاه هو لاستخدامه في الفصل

11
edelwater

عرض نماذج قابلة للتمديد

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

راجع: إعدادات API

ذات صلة

10
kaiser

تشمل وظيفة دائما عن طريق هوك ، وليس مباشرة.

مثال:

  • لا تستخدم لتضمين فئة البرنامج المساعد عبر جديدة دون ربط

  • استخدم hookins_loaded

    // add the class to WP                                   
    function my_plugin_start() {                                                               
        new my_plugin();   
    }                                                        
    add_action( 'plugins_loaded', 'my_plugin_start' );
    

تحديث: مثال حي صغير: Plugin-svn-trunk-page ومثال زائف

//avoid direct calls to this file where wp core files not present
if (!function_exists ('add_action')) {
        header('Status: 403 Forbidden');
        header('HTTP/1.1 403 Forbidden');
        exit();
}

if ( !class_exists( 'plugin_class' ) ) {
    class plugin_class {

        function __construct() {
        }

    } // end class

    function plugin_start() {

        new plugin_class();
    }

    add_action( 'plugins_loaded', 'plugin_start' );
} // end class_exists

يمكنك أيضًا التحميل عبر mu_plugins_loaded على التثبيت المتعدد المواقع ، راجع المخطوطة للحصول على مرجع الإجراء: http://codex.wordpress.org/Plugin_API/Action_Reference أيضًا ، كما ترى ، كيف تضيف wP باستخدام هذا الخطاف: http://adambrown.info/p/wp_hooks/hook/plugins_loaded؟version=2.1&file=wp-settings.php أنا أستخدم هذا كثيرًا جدًا وليس بجد ومبكّر ، أفضل كفئة جديدة صعبة () ؛

9
bueltge

يجب أن يصف وصف المكون الإضافي الخاص بك وظائف البرنامج المساعد بدقة. هناك 10 وظيفة إضافية مميزة. كلهم يعرضون مشاركات مميزة ، لكن العديد منهم لديهم ميزات مختلفة. يجب أن يكون من السهل مقارنة المكوّن الإضافي بالمكونات الإضافية المماثلة من خلال قراءة الوصف.

يجب عليك تجنب المفاخرة حول مدى بساطة البرنامج المساعد الخاص بك ما لم يكن حقا الأساسية للغاية. يجب عليك تضمين روابط مفيدة في الوصف مثل رابط الإعدادات.

8
Greg

المكونات الإضافية للترخيص بموجب ترخيص متوافق مع GPL

المكونات الإضافية والسمات should / يتم ترخيصها بموجب ترخيص متوافق مع WordPress. يمكّنهم ذلك من إعادة التوزيع باستخدام WordPress كـ "برنامج". الترخيص الموصى به هو GPL . احرص على أن تكون جميع مكتبات الشفرات المضمنة في المكون الإضافي متوافقة مع نفس الترخيص.

(هذه كانت مشكلة وخطيرة نقطة نقاش سواء في الماضي و الحاضر .)

8
EAMann

تقليل الآثار الجانبية لمصادر البيانات عن بعد وخدمات الويب

مكون إضافي ينبغي خدمة Cache/Shield Webservice و/أو طلبات XMLRPC/SOAP من خلال طبقة موفر للتخزين المؤقت/البيانات إذا كنت تستخدمها حتى لا تجعل الطلبات الأمامية في انتظار ( بطيئة) استجابة خدمة الويب.

يتضمن تنزيل موجز ويب RSS وصفحات أخرى. صمم المكونات الإضافية التي يطلبونها في الخلفية.

STEP واحد ممكن (خذ النشر إلى ping.fm كمثال): قم بإنشاء جدول مؤقت ، دعنا نقول: ping_fm_buffer_post (التاريخ ، الوقت ، الرسالة ، وقت الإرسال ، الحالة)

  1. في كل مرة تريد إرسال التحديث إلى ping.fm ، أضفه إلى هذا الجدول.
  2. الآن ، نحن بحاجة إلى إنشاء مكون إضافي للتعامل مع هذه البيانات. سيتم تشغيل هذا البرنامج المساعد عبر crontab للتحقق من كل تحديث لم يتم تقديمه بعد
  3. نظرًا لأن لدينا هذا الجدول ، يمكننا أيضًا سرد كل رسالة يتم إرسالها إلى ping.fm والتحقق من حالة كل منشور. فقط في حالة وجود مشكلة على جانب ping.fm ، يمكننا إعادة تقديمها.
7
hakre

اختبار البرنامج المساعد الخاص بك

يجب أن يكون لدينا بالتأكيد بعض أدوات الاختبار في بيئة تطوير البرنامج المساعد لدينا.

بناءً على هذه الإجابة بواسطة إيثان سيفرت على سؤال اختبار ، هذه ممارسات جيدة يجب اتباعها:

  • يجب أن يختبر اختبار الوحدة أصغر قدر من السلوك يمكن للفصل القيام به.
  • عندما تصل إلى مستوى الاختبار الوظيفي ، هذا هو المكان الذي يمكنك اختبار الرمز فيه باستخدام تبعيات Wordpress.
  • اعتمادًا على ما يفعله المكون الإضافي الخاص بك - ضع في اعتبارك استخدام اختبارات تستند إلى السيلينيوم والتي تختبر وجود البيانات في DOM باستخدام المعرفات
7
Fernando Briano

استخدام الأسماء الصحيحة

حدد الخطافات والفلاتر (الفصول والوظائف والفوارق) ، بحيث يمكن للناس تحديدها خلال عام واحد ، عندما لا يتذكرون أي شيء آخر ، من أين تأتي هذه الكعكة أو الكود. لا يهم إذا كانت أسماء الخطاف/عامل التصفية طويلة. السابق. youruniquename_hook/filter_whatitdoes.

  • إذا كان الملف الخاص بك يحتوي على فئة تسمى "dbdbInit" ، فيجب تسمية الملف الذي يحتوي على الفئة "dbdbInit.class.php".
  • إذا حصلت داخل dbdbInit- صنف ، وظيفة تسجل السابقين. custom_post_types ، ثم نسميها register_custom_post_types().
  • إذا حصلت على صفيف يحتوي على أسماء custom_post_types ، فاتصل بالمتغير حيث تم تعيين المصفوفة $custom_post_type_names.
  • إذا حصلت على وظيفة تعالج صفيف ، اكتب function array_handler( $array ) { // handle the array} ..
  • كل ما عليك هو محاولة تسمية الأشياء بطريقة تعرف بها علامة/أين تنتمي إليها.

شيء آخر: إذا كان عليك تصحيح الأخطاء في ذلك الحين ، في 99 ٪ من جميع الحالات ، يمكنك الحصول على جميع رسائلك ليس فقط لرمزك ، ولكن لورد أيضا. لذلك حاول استخدام نفس البادئة السابقة. "dbdb" للفئات والوظائف العامة والمتغيرات/الكائنات. بهذه الطريقة يمكنك العثور عليها بسهولة بين مئات الملفات. (يقوم Wordpress بتحميل 64 ملفًا قبل موضوعك وحوالي 1،550 وظيفة ، وليس الحديث عن الخطافات والفلاتر.)

6
kaiser

يهتم في المستقبل وورد وإصدارات الموضوع

ملاحظة: بعد إعادة قراءة هذه النصيحة ، أعود الآن إلى هذه الممارسة لأن التحقق من كل وظيفة لوجودها قد يؤدي إلى إبطاء موقعك.

تحقق من إهمال الوظائف مباشرة في نسختك.

هذا مثال "يمكن أن يكون هكذا".

if ( ! function_exists( 'wp_some_fn' ) ) 
{
    $theme_data = wp_get_theme();
    $error = new WP_Error( 'wp_some_fn', sprintf( __( 'The function %1$s is deprecated. Please inform the author', TEXTDOMAIN ), "Theme: {$theme_data->Name}: Version {$theme_data->Version}" );

    // abort
    if ( is_wp_error( $error ) )
        return print $error->get_error_message();
} 
// else if no error - the function works and exists
wp_some_fn();

للحصول على معالجة مناسبة/لأفضل الممارسات ، راجع هذه الإجابة: link

يمكنك إسقاط حتى $ السبب في الوظيفة. هذا سيساعدك أنت ومستخدميك على متابعة المسار من خلال وظائف أو فئات قد تتغير.

6
kaiser

استخدم معايير الترميز في WordPress

http://codex.wordpress.org/WordPress_Coding_Standards

هل تعرف مدى سهولة تحديث التعليمات البرمجية التي عملت عليها مقابل التعليمات البرمجية التي وضعها شخص آخر معًا؟ تسهل معايير الترميز على أي مطور يعمل في مشروع ما أن يرى ما يحدث.

نحن نعلم أن المكون الإضافي الخاص بك أو السمة الخاصة بك هي طريقة خاصة بك ، والطريقة التي تكسر بها الخطوط وتضيف الأقواس المعقوفة هي تعبير عن شخصيتك. كل مسافة بادئة عبارة مدروسة بعناية. ولكن مع الكود المخصص ، فأنت تساهم في WordPress ، حتى لو لم يكن الكود الخاص بك في التطبيق الأساسي. تساعد معايير الترميز المطورين في الحصول على ما يصل إلى سرعة مع التعليمات البرمجية الخاصة بك.

6
gabrielk

فصل من كود وورد الأساسية

البرنامج المساعد should قلل من تأثير واجهة برمجة تطبيقات WordPress إلى الحد الأدنى المطلوب لذلك لفصل رمز المكون الإضافي من رمز WordPress. هذا يقلل من تأثير التغييرات داخل قاعدة بيانات WordPress على البرنامج المساعد. بالإضافة إلى ذلك ، يعمل هذا على تحسين توافق الإصدار المتبادل لرمز البرنامج المساعد.

هذا لا يعني عدم استخدام وظائف WordPress (استخدمها ، مثل إعادة استخدام الوظائف الحالية تشير) ، ولكن لا يعني ربط الكود الخاص بك مع وظائف WordPress أكثر من اللازم ولكن لفصل منطق الأعمال في الإضافات من وظائف وورد.

6
hakre

استخدم خيارات wp لسلاسل إخراج البرنامج المساعد

من أجل جعل البرنامج المساعد سهل الاستخدام وقابل للتخصيص ، يجب أن تكون جميع سلاسل الإخراج قابلة للتعديل. أفضل طريقة للقيام بذلك هي استخدام خيارات wp لتخزين سلاسل الإخراج وتوفير الواجهة الخلفية لتغيير القيم الافتراضية. يجب ألا يستخدم البرنامج المساعد السلاسل المعروضة التي لا يمكن تغييرها بسهولة باستخدام الواجهة الخلفية للمكون الإضافي.

على سبيل المثال: مؤنس - يمنحك القدرة على تغيير الجملة التي تظهر قبل جزء "مشاركة والتمتع:"

5
hannit cohen

استخدم إلغاء التثبيت وتنشيط وإلغاء تنشيط السنانير

هناك ثلاث خطافات مختلفة لهذا:

  • إلغاء التثبيت register_uninstall_hook();
  • التعطيل register_deactivation_hook();
  • التفعيل register_activation_hook();

تعليمات مفصلة مع مثال عملي يمكن العثور عليها هنا. .

3
kaiser