بدء مجتمع ويكي لجمعهدفأفضل الممارسات لتطوير البرنامج المساعد. هذا السؤال مستوحى من @ EAMann's comments on wp-hackers .
تكمن الفكرة في التعاون بشأن أفضل الممارسات الموضوعية التي قد تكون حتى نتمكن من استخدامها في نهاية المطاف في عملية مراجعة تعاون المجتمع.
UPDATE: بعد الاطلاع على الإجابات القليلة الأولى ، يصبح من الواضح أننا بحاجة إلى وجود فكرة/اقتراح/أفضل ممارسة واحدة فقط لكل إجابة ويجب على الناس مراجعة القائمة للتأكد من عدم وجود تكرارات قبل النشر.
إذا كنت تعتقد أن الأشخاص يرغبون في إضافة أو تغيير بعض البيانات: تقديم apply_filters () قبل العودة .
ملاحظة هناك شيء واحد أجده محبطًا بعض الشيء وأن عناوين سؤالك هي النسبة المئوية للمكونات الإضافية التي تم تصميمها فقط للمستخدمين النهائيين ، أي لا تحتوي على روابط خاصة بهم. تخيل لو تم تصميم ووردبريس مثل معظم الإضافات؟ سيكون غير مرن وحل مناسب للغاية.
ربما تكون الأمور مختلفة إذا كان لدى WordPress القدرة على تثبيت المكونات الإضافية التي تعتمد عليها المكونات الإضافية الأخرى؟ نظرًا لأنني عادةً ما يجب علي كتابة الكثير من الوظائف التي أحتاجها من البداية لأن العملاء يريدون الأشياء بطريقة معينة والمكونات الإضافية المتاحة ، بينما 90٪ هناك ، لا تسمح لي بالمرونة لتحديث الـ 10٪ المتبقية.
أتمنى حقًا أن يحدد أولئك الذين يقودون مجتمع WordPress طريقة للتأكد من أن الإضافات تتم مكافأتها لاتباع أفضل الممارسات (مثل إضافة عوامل ربط للمطورين الآخرين) تشبه إلى حد كبير الإجابات الجيدة على موقع StackExchange.
لنأخذ مثالا من سؤال آخر :
مثال: أريد أن أفعل شيئًا في المكون الإضافي الخاص بي عندما يقوم شخص ما بإعادة تغريد مقال إذا كان هناك ربط مخصص في أي مكون إضافي لإعادة تغريد شعبية هو أنه يمكنني ربطه وإطلاقه ، فسيكون ذلك رائعًا. لا يوجد ، لذلك يمكنني تعديل المكوّن الإضافي الخاص به لتضمينه ، لكن هذا لا ينطبق إلا على نسختي ، ولا أريد محاولة إعادة توزيع ذلك.
wp_enqueue_script
و wp_enqueue_style
لا يجب تحميل/محاولة تحميل إصدارات مكررة من ملفات JS/CSS ، وخاصة jQuery وملفات JS الأخرى المضمنة في WP Core.
يجب أن تستخدم الإضافات دائمًا wp_enqueue_script
و wp_enqueue_style
عند ربط ملفات JS و CSS وليس مباشرة عبر علامات <script>
.
يجب ربط جميع سلاسل الإخراج بنطاق نص مناسب للسماح للتدويل من قبل الأطراف المهتمة ، حتى لو لم يكن للمطور أي مصلحة في ترجمة المكوّن الإضافي الخاص به.
لاحظ أنه من المهم جدًا تحميل ملفات اللغة أثناء الإجراء init
حتى يتمكن المستخدم من ربط الإجراء.
انظر المخطوطة: I18n لمطوري WordPress
وأيضا هذه المقالة: تحميل WP ملفات اللغة بشكل صحيح .
قام 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_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/'
);
}
اختبر دائمًا المكوّنات الإضافية مع WP_DEBUG
قيد التشغيل ومن الأفضل تشغيلها طوال عملية التطوير. لا ينبغي أن يلقي المكون الإضافي أي أخطاء باستخدام WP_DEBUG
. يتضمن هذا الإشعارات المهملة والفهارس غير المحددة.
لتشغيل تصحيح الأخطاء ، قم بتحرير ملف wp-config.php
الخاص بك بحيث يتم تعيين ثابت WP_DEBUG
على true
. راجع Codex على Debug لمزيد من التفاصيل.
إذا استطعت: استخدام الوظائف الموجودة المضمنة في WordPress core بدلاً من كتابة ما لديك. فقط قم بتطوير وظائف مخصصة [PHP) عندما لا توجد وظيفة مناسبة مسبقًا في WordPress الأساسية.
إحدى المزايا هي أنه يمكنك استخدام "سجل إخطارات السجل" لمراقبة الوظائف التي يجب استبدالها بسهولة. فائدة أخرى هي أنه يمكن للمستخدمين عرض وثائق الوظيفة في المخطوطة وفهم ما يفعله البرنامج المساعد بشكل أفضل حتى لو لم يكن مطورًا ذو خبرة PHP.
عند إزالته من تثبيت WordPress ، يجب أن يحذف البرنامج المساعد جميع الملفات والمجلدات وإدخالات قاعدة البيانات والجداول التي أنشأها بالإضافة إلى قيم الخيار تم إنشاؤه.
قد تقدم الإضافات خيارًا لتصدير/استيراد إعدادات ، بحيث يمكن حفظ الإعدادات خارج WordPress قبل الحذف.
البرنامج المساعد should قم بتعقيم كل مدخلات المستخدم التي تم استرجاعها بشكل مباشر أو غير مباشر (على سبيل المثال عبر $_POST
أو $_GET
) قبل استخدام قيم الإدخال للاستعلام من قاعدة بيانات MySQL.
راجع: تنسيق عبارات SQL .
ليس هناك سبب لعدم كتابة رمز 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
}
}
يجب أن يضاف المكوّن الإضافي بشكل صحيح جميع عناصر مساحة الاسم العالمية (الثوابت والوظائف والفئات والمتغيرات وحتى أشياء مثل التصنيفات المخصصة وأنواع المنشورات والحاجيات وما إلى ذلك). على سبيل المثال ، لا تقم بإنشاء دالة تسمى init()
؛ بدلاً من ذلك ، قم بتسمية شيء مثل jpb_init()
.
من الشائع أن يستخدم بادئة من ثلاثة أو أربعة أحرف أمام الأسماء أو للاستفادة من PHP ميزة مساحة الاسم . قارن: بادئة ذات حرف واحد لـ PHP ثوابت الصف؟
البرنامج المساعد لا ينبغي حذف أي من بياناته عند إلغاء تنشيط.
فقط تضمين الملفات التي تحتاجها ...
إذا كنت في المقدمة ، فلا تقم بتضمين كود يتعلق بمنطقة المشرف.
عند إلغاء التثبيت مكون إضافي should مطالبة المستخدم بحذف بياناته / وتلقي تأكيد بأن المستخدم بخير بحذف البيانات قبل القيام بذلك و البرنامج المساعد should أيضًا اسمح للمستخدم بخيار حفظ البيانات عند إلغاء التثبيت. (هذه الفكرة منEAMann.)
لا فقط 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()
من هناك وستتبعها تذكرة أخرى. التعليقات والنقاد ومثل هذا هو موضع تقدير.
/ الإضافات/pluginname/{مختلف}
يجب أن يكون "البرنامج المساعد" المستخدم للمجلد دائمًا قابل للتغيير.
يتم التعامل مع هذا عادة عن طريق تحديد الثوابت واستخدامها باستمرار في جميع أنحاء البرنامج المساعد.
وغني عن القول أن العديد من الإضافات الشائعة هي مذنبون.
plugins_url()
لسهولة الربط بالموارد ، المضمنة مع البرنامج المساعد.البرنامج المساعد should تقليل تأثيره قدر الإمكان بواسطة تقليل عدد الأسماء التي يضيفها إلى مساحة الاسم العالمية .
يمكن القيام بذلك عن طريق تضمين وظائف المكون الإضافي في فصل دراسي أو باستخدام PHP ميزة مساحات الأسماء . بادئة كل شيء يمكن أن تساعد كذلك ولكن ليست بهذه المرونة.
بجانب الوظائف والفئات ، يقدم البرنامج المساعد لا ينبغي _ المتغيرات العامة. إن استخدام الفصول الدراسية يتفادىها عادةً ويبسط صيانة البرنامج المساعد.
أفضل ممارسة قريبة من أسلوب PhpDoc. إذا كنت لا تستخدم IDE مثل "Eclipse" ، يمكنك فقط إلقاء نظرة على PhpDoc Manual .
ليس عليك أن تعرف بالضبط كيف يعمل هذا. يمكن للمطورين المحترفين قراءة الكود على أي حال ويحتاجون فقط إلى هذا كملخص. قد يقدر مقدمو هواية ومستخدمي هواية الطريقة التي تشرحونها بها على نفس مستوى المعرفة.
بدلاً من إضافة خيارات إلى قاعدة البيانات عبر وظيفة add_option ، يجب تخزينها كصفيف باستخدام Settings API التي تهتم بكل شيء لك.
التعديلات API هي بنية بسيطة جدا وطريقة آمنة تسمح بخيارات إضافة واسترداد. يتم حفظ كل شيء كقيمة متسلسلة في قاعدة البيانات الخاصة بك. سهل وآمن وبسيط.
(سابقًا: اتصال API مجهول)
إذا كان المكوّن الإضافي يتصل بنظام خارجي أو واجهة برمجة التطبيقات (مثل بعض خدمات الويب) ، فيجب أن يفعل ذلك بشكل مجهول أو يزود المستخدم بخيار مجهول يضمن عدم تسرب أي بيانات متعلقة بمستخدم البرنامج المساعد إلى جهة خارجية دون رقابة.
في العديد من الحالات ، قد لا يرغب المستخدمون في أن يتمكن الجميع من الوصول إلى المناطق التي أنشأها المكون الإضافي الخاص بك ، لا سيما مع المكونات الإضافية التي تقوم بعمليات معقدة متعددة ، وقد لا يكون التحقق من قدرة القرص الثابت واحدًا كافيًا.
على الأقل ، قم بفحص القدرات المناسبة لجميع أنواع الإجراءات المختلفة التي يمكن أن يستخدمها البرنامج المساعد.
استخدم SVN repository المتوفرة في WordPress.org لاستضافة المكونات الإضافية. إنه يجعل تجربة مستخدم التحديث أسهل ، وإذا لم تستخدم SVN من قبل ، فسوف يجعلك تفهم فعليًا باستخدامه في سياق يبرره.
من الصعب دائمًا قراءة التعليمات البرمجية التي لم تتم كتابتها بالترتيب الذي يتم به تنفيذه. قم أولاً بتضمين/طلب ، وتحديد ، wp_enqueue_style & _script ، وما إلى ذلك ، ثم الوظائف التي يحتاجها البرنامج المساعد/السمة وأخيراً الباني (مثل شاشة المسؤول ، والأشياء التي تدمج في السمة ، إلخ).
حاول فصل أشياء مثل css و js في مجلداتهم الخاصة. حاول أيضًا القيام بذلك باستخدام الوظائف التي لا تعدو أن تكون مساعداً ، مثل flatteners array وما شابه ذلك. إن إبقاء الملف "الرئيسي" نظيفًا وسهل القراءة قدر الإمكان هو طريقة تساعد المستخدمين والمطورين وأنت ، عند محاولة التحديث خلال عام ولم تشاهد الكود لفترة أطول.
من الجيد أيضًا أن يكون لديك هيكل تكرره كثيرًا ، لذلك تجد طريقك دائمًا. إن التطوير في بنية معروفة على مشاريع مختلفة سيمنحك الوقت لجعله أفضل ، وحتى لو تحول عميلك إلى مطور آخر ، فلن تسمع أبدًا "لقد ترك الفوضى". هذا يبني سمعتك وينبغي أن يكون هدفا على المدى الطويل.
ليس هذا شائعًا بين المكونات الإضافية ، ولكن إذا كان المكون الإضافي الخاص بك به (بعض) إعدادات ، فهو {should يوفر استيراد/تصدير البيانات مثل التكوين وإدخال المستخدم .
الاستيراد/التصدير يحسن قابلية استخدام البرنامج المساعد.
مثال على المكوّن الإضافي الذي يحتوي على وظيفة الاستيراد والتصدير (وكذلك آلية التراجع) هو Breadcrumb NavXT (Wordpress Plugin) (الكشف الكامل: بعض الكود القليل من قبلي هناك ، وقد تم معظمه بواسطة mtekk) .
تموت بطريقة لائقة يجب أن تستخدم جميع وظائف الوظائف الإضافية (وحتى السمات) wp_die()
في الأماكن الحرجة لتزويد المستخدم بمعلومات قليلة عما حدث. أخطاء php مزعجة ويمكن wp_die
أن تمنح المستخدم رسالة نصية رائعة بشأن الخطأ الذي قام به البرنامج المساعد (أو هم). بالإضافة إلى ذلك ، إذا قام المستخدم بإلغاء تنشيط إلغاء تنشيط المكوّن الإضافي ، فسوف ينهار.
يساعد استخدام wp_die()
أيضًا على أن تكون الإضافات/السمات الخاصة بك متوافقة مع ووردبريسسويتي .
من الأفضل أن تقول 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): المثال أعلاه هو لاستخدامه في الفصل
عندما يوفر المكون الإضافي إمكانية إدخال البيانات ، يجب أن يكون هناك دائمًا ربط في النهاية ، قبل الزر "إرسال" و/أو "إعادة التعيين" مباشرةً ، بحيث يمكن للمطورين تمديد النموذج بسهولة ليس فقط مع الحقول ، ولكن الأزرار أيضًا.
راجع: إعدادات API
تشمل وظيفة دائما عن طريق هوك ، وليس مباشرة.
مثال:
لا تستخدم لتضمين فئة البرنامج المساعد عبر جديدة دون ربط
استخدم 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 أنا أستخدم هذا كثيرًا جدًا وليس بجد ومبكّر ، أفضل كفئة جديدة صعبة () ؛
يجب أن يصف وصف المكون الإضافي الخاص بك وظائف البرنامج المساعد بدقة. هناك 10 وظيفة إضافية مميزة. كلهم يعرضون مشاركات مميزة ، لكن العديد منهم لديهم ميزات مختلفة. يجب أن يكون من السهل مقارنة المكوّن الإضافي بالمكونات الإضافية المماثلة من خلال قراءة الوصف.
يجب عليك تجنب المفاخرة حول مدى بساطة البرنامج المساعد الخاص بك ما لم يكن حقا الأساسية للغاية. يجب عليك تضمين روابط مفيدة في الوصف مثل رابط الإعدادات.
المكونات الإضافية والسمات should / يتم ترخيصها بموجب ترخيص متوافق مع WordPress. يمكّنهم ذلك من إعادة التوزيع باستخدام WordPress كـ "برنامج". الترخيص الموصى به هو GPL . احرص على أن تكون جميع مكتبات الشفرات المضمنة في المكون الإضافي متوافقة مع نفس الترخيص.
(هذه كانت مشكلة وخطيرة نقطة نقاش سواء في الماضي و الحاضر .)
مكون إضافي ينبغي خدمة Cache/Shield Webservice و/أو طلبات XMLRPC/SOAP من خلال طبقة موفر للتخزين المؤقت/البيانات إذا كنت تستخدمها حتى لا تجعل الطلبات الأمامية في انتظار ( بطيئة) استجابة خدمة الويب.
يتضمن تنزيل موجز ويب RSS وصفحات أخرى. صمم المكونات الإضافية التي يطلبونها في الخلفية.
STEP واحد ممكن (خذ النشر إلى ping.fm كمثال): قم بإنشاء جدول مؤقت ، دعنا نقول: ping_fm_buffer_post (التاريخ ، الوقت ، الرسالة ، وقت الإرسال ، الحالة)
يجب أن يكون لدينا بالتأكيد بعض أدوات الاختبار في بيئة تطوير البرنامج المساعد لدينا.
بناءً على هذه الإجابة بواسطة إيثان سيفرت على سؤال اختبار ، هذه ممارسات جيدة يجب اتباعها:
حدد الخطافات والفلاتر (الفصول والوظائف والفوارق) ، بحيث يمكن للناس تحديدها خلال عام واحد ، عندما لا يتذكرون أي شيء آخر ، من أين تأتي هذه الكعكة أو الكود. لا يهم إذا كانت أسماء الخطاف/عامل التصفية طويلة. السابق. youruniquename_hook/filter_whatitdoes.
dbdbInit.class.php
".dbdbInit
- صنف ، وظيفة تسجل السابقين. custom_post_types ، ثم نسميها register_custom_post_types()
.$custom_post_type_names
.function array_handler( $array ) { // handle the array}
..شيء آخر: إذا كان عليك تصحيح الأخطاء في ذلك الحين ، في 99 ٪ من جميع الحالات ، يمكنك الحصول على جميع رسائلك ليس فقط لرمزك ، ولكن لورد أيضا. لذلك حاول استخدام نفس البادئة السابقة. "dbdb
" للفئات والوظائف العامة والمتغيرات/الكائنات. بهذه الطريقة يمكنك العثور عليها بسهولة بين مئات الملفات. (يقوم Wordpress بتحميل 64 ملفًا قبل موضوعك وحوالي 1،550 وظيفة ، وليس الحديث عن الخطافات والفلاتر.)
ملاحظة: بعد إعادة قراءة هذه النصيحة ، أعود الآن إلى هذه الممارسة لأن التحقق من كل وظيفة لوجودها قد يؤدي إلى إبطاء موقعك.
تحقق من إهمال الوظائف مباشرة في نسختك.
هذا مثال "يمكن أن يكون هكذا".
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
يمكنك إسقاط حتى $ السبب في الوظيفة. هذا سيساعدك أنت ومستخدميك على متابعة المسار من خلال وظائف أو فئات قد تتغير.
استخدم معايير الترميز في WordPress
http://codex.wordpress.org/WordPress_Coding_Standards
هل تعرف مدى سهولة تحديث التعليمات البرمجية التي عملت عليها مقابل التعليمات البرمجية التي وضعها شخص آخر معًا؟ تسهل معايير الترميز على أي مطور يعمل في مشروع ما أن يرى ما يحدث.
نحن نعلم أن المكون الإضافي الخاص بك أو السمة الخاصة بك هي طريقة خاصة بك ، والطريقة التي تكسر بها الخطوط وتضيف الأقواس المعقوفة هي تعبير عن شخصيتك. كل مسافة بادئة عبارة مدروسة بعناية. ولكن مع الكود المخصص ، فأنت تساهم في WordPress ، حتى لو لم يكن الكود الخاص بك في التطبيق الأساسي. تساعد معايير الترميز المطورين في الحصول على ما يصل إلى سرعة مع التعليمات البرمجية الخاصة بك.
البرنامج المساعد should قلل من تأثير واجهة برمجة تطبيقات WordPress إلى الحد الأدنى المطلوب لذلك لفصل رمز المكون الإضافي من رمز WordPress. هذا يقلل من تأثير التغييرات داخل قاعدة بيانات WordPress على البرنامج المساعد. بالإضافة إلى ذلك ، يعمل هذا على تحسين توافق الإصدار المتبادل لرمز البرنامج المساعد.
هذا لا يعني عدم استخدام وظائف WordPress (استخدمها ، مثل إعادة استخدام الوظائف الحالية تشير) ، ولكن لا يعني ربط الكود الخاص بك مع وظائف WordPress أكثر من اللازم ولكن لفصل منطق الأعمال في الإضافات من وظائف وورد.
من أجل جعل البرنامج المساعد سهل الاستخدام وقابل للتخصيص ، يجب أن تكون جميع سلاسل الإخراج قابلة للتعديل. أفضل طريقة للقيام بذلك هي استخدام خيارات wp لتخزين سلاسل الإخراج وتوفير الواجهة الخلفية لتغيير القيم الافتراضية. يجب ألا يستخدم البرنامج المساعد السلاسل المعروضة التي لا يمكن تغييرها بسهولة باستخدام الواجهة الخلفية للمكون الإضافي.
على سبيل المثال: مؤنس - يمنحك القدرة على تغيير الجملة التي تظهر قبل جزء "مشاركة والتمتع:"
هناك ثلاث خطافات مختلفة لهذا:
register_uninstall_hook();
register_deactivation_hook();
register_activation_hook();