لماذا يتم اختيار تطوير إضافات (Plugins) لمنصة ووردبريس (WordPress)؟
ووردبريس، كأكثر أنظمة إدارة المحتوى شيوعًا على مستوى العالم، يعزى قدرته الكبيرة على التوسع إلى حد كبير إلى بنيته المبنية على الإضافات (البرامج الإضافية). تطوير إضافاتك الخاصة يعني أنك لم تعد مقيدًا بوظائف الإضافات المتوفرة مسبقًا، ويمكنك تلبية احتياجات موقعك الإلكتروني أو عملائك بدقة. سواء كان الأمر يتعلق بإضافة كود قصير بسيط أو بناء واجهة إدارة معقدة، فإن الإضافات تسمح لك بفصل منطق الوظائف عن القوالب (التصاميم الأساسية للموقع)، مما يضمن عدم تأثر الوظائف عند تح
من وجهة نظر التعلم، فإن فهم تطوير الإضافات (Plugins) يعتبر طريقًا ضروريًا للغوص في جوهر نظام ووردبريس (WordPress). يتيح لك ذلك التعرف على مفهومي “خطافات الإجراءات” (Action Hooks) و“خطافات المرشحات” (Filter Hooks)، والتي تعتبر الأساس الذي يقوم عليه نظام ووردبريس في تحقيق القابلية للتوسعة والتقسيم إلى وحدات منفصلة. إتقان تطوير الإضافات لا يساعد فقط على تحسين مهاراتك التقنية، بل يفتح أمامك أيضًا فرصًا وظيفية جديدة، وقد يمكنك حتى إنشاء منتجات رقمية قابلة للبيع.
الاستعدادات اللازمة قبل البدء في التطوير
قبل كتابة أول سطر من الكود، تحتاج إلى بيئة تطوير مناسبة. عادةً ما تشمل هذه البيئة خادمًا محليًا (مثل Local by Flywheel أو XAMPP أو MAMP)، ومحرر كود (مثل VS Code أو PhpStorm)، بالإضافة إلى موقع اختبار مثبت عليه نظام ووردبريس (WordPress). تأكد من أن بيئة الاختبار الخاصة بك تستخدم نفس إصدار لغة PHP المستخدم في البيئة الإنتاجية عبر الإنترنت لتجنب مشاكل التوافق.
القراءة الموصى بها اكتساب المهارات الأساسية لـ WordPress: دليلًا شاملًا للممارسة العملية، من الإعداد إلى التحسين.。
فهم البنية الأساسية للإضافات.
يمكن أن يحتوي أبسط إضافة (plugin) لـ WordPress على ملف واحد فقط من نوع PHP. لكن الإضافات ذات الهيكل الجيد عادةً ما تحتوي على عدة مجلدات وملفات لتحقيق تنظيم أفضل. قد يتضمن مجلد الإضافة النموذجي الهيكل التالي:
ملف المكون الرئيسي (على سبيل المثال، my-first-plugin.phpهذا هو نقطة الدخول إلى الإضافة (البرنامج الإضافي)، والتي تحتوي على معلومات رأس الإضافة (header information of the plugin).
- includes/ الدليل: يحتوي على ملفات الكلاسات أو الدوال الأساسية.
- admin/ المحتويات: يحتوي على الكود المتعلق بواجهة الإدارة الخلفية.
- public/ المحتويات: يحتوي على الكود المخصص لواجهة المستخدم الأمامية للموقع الإلكتروني.
- assets/ الدليل: يحتوي على ملفات JavaScript وCSS والصور وغيرها من الموارد الثابتة.
- languages/ المجلد: يحتوي على ملفات الترجمة الدولية (بصيغة .po و .mo).
معلومات رأس الإضافة الضرورية
يجب على كل إضافة (plugin) لـ WordPress أن تحتوي في بداية ملف PHP الرئيسي الخاص بها على تعليقات رأس الإضافة (plugin header comments) القياسية، وهذا أمر أساسي لكي يتمكن نظام WordPress من التعرف على الإضافة. فيما يلي مثال بسيط جدًا:
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于学习插件开发的简单示例插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
* Domain Path: /languages
*/
من بينها،Plugin Name هذا الحقل إلزامي، بينما باقي الحقول اختيارية. ومع ذلك، من أجل سلامة وقابلية صيانة الإضافة (البرنامج الإضافي)، ننصحك بملء جميع المعلومات ذات الصلة.Text Domain مخصص للتدويل (Internationalization).Domain Path يشير إلى مجلد ملفات اللغة.
بناء أول إضافة (plugin) الخاصة بك: وظيفة تحية بسيطة
دعونا نبدأ بممارسة عملية التطوير من خلال مثال عملي. سنقوم بإنشاء إضافة (plugin) تعرض رسالة تحية قابلة للتخصيص في أعلى محتوى المقالات على الموقع الإلكتروني.
إنشاء ملفات الإضافات (plugins) والمجلدات الخاصة بها
أولاً، في مجلد تثبيت WordPress الخاص بك، wp-content/plugins/ داخل المجلد، قم بإنشاء مجلد جديد وأطلق عليه الاسم التالي: my-greeting-pluginثم قم بإنشاء ملف PHP رئيسي داخل هذا المجلد، وأطلق عليه اسم my-greeting-plugin.phpوقم بنسخ معلومات رأس الإضافة (plugin header) المذكورة أعلاه إلى المكان المناسب.
القراءة الموصى بها كيف تختار وتطور إضافات WordPress عالية الجودة: من الأساسيات إلى المهارات المتقدمة.。
استخدام الخطافات (hooks) لإضافة الميزات
يعمل ووردبريس (WordPress) من خلال نظام الخطافات (Hook System). إذا أردنا إضافة معلومات قبل محتوى المقالات، فيجب علينا استخدام هذا النظام. the_content مخالب المرشحات (Filter Hooks): في ملف الإضافة الرئيسي الخاص بك، أضف الدالة التالية واستدعاءات المخالب المطلوبة.
/**
* 在文章内容前添加问候语
*
* @param string $content 原始的文章内容。
* @return string 修改后的文章内容。
*/
function mgp_add_greeting_to_content( $content ) {
$greeting_text = get_option( 'mgp_greeting_text', '欢迎阅读!' ); // 从数据库获取设置,默认为“欢迎阅读!”
$custom_greeting = '<div class="mgp-greeting"><p><strong>'`. esc_html($greeting_text)`.'</strong></p></div>';
// 仅对主循环中的单篇文章页面生效
if ( is_single() && in_the_loop() && is_main_query() ) {
return $custom_greeting . $content;
}
return $content;
}
// 将函数挂载到 `the_content` 过滤器
add_filter( 'the_content', 'mgp_add_greeting_to_content' );
هذا القطعة من الكود تحدد دالة (function). mgp_add_greeting_to_contentيقوم هذا النظام بتلقي محتوى المقالات، ثم يضيف إلى بداية المحتوى عنصرًا من نوع DIV يحتوي على تحية. add_filter() الدوال: سنقوم بتخصيص دوال وتثبيتها في نظام ووردبريس (WordPress). the_content المرشح (الفلتر) مُطبق بشكل صحيح. التحكم المنطقي داخل الدالة يضمن أن عبارات التحية تظهر فقط في الحلقة الرئيسية لصفحة المقال الفردي على الواجهة الأمامية، دون أن تؤثر على صفحات الملفات أو الأدوات
إنشاء صفحة إعدادات إدارية بسيطة
لكي يتمكن المستخدمون من تخصيص نصوص التحيات الخاصة بهم، نحتاج إلى إضافة صفحة إعدادات بسيطة. هذا يتطلب استخدام واجهة برمجة التطبيقات (API) الخاصة بقائمة إدارة ووردبريس. استمر في إضافة الكود التالي إلى ملف الإضافة الرئيسي:
/**
* 注册插件设置菜单和页面
*/
function mgp_register_admin_menu() {
add_options_page(
'问候语设置', // 页面标题
'问候语插件设置', // 菜单标题
'manage_options', // 所需权限
'my-greeting-plugin', // 菜单slug
'mgp_render_settings_page' // 用于输出页面内容的回调函数
);
}
add_action( 'admin_menu', 'mgp_register_admin_menu' );
/**
* 渲染设置页面的内容
*/
function mgp_render_settings_page() {
?>
<div class="wrap">
<h1>إعدادات إضافة رسائل التحية</h1>
<form method="post" action="/ar/options.php/" data-trp-original-action="options.php">
<?php
settings_fields( 'mgp_settings_group' ); // 输出设置组和非ce字段
do_settings_sections( 'my-greeting-plugin' ); // 输出设置区域
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
<?php
}
/**
* 初始化插件设置
*/
function mgp_initialize_settings() {
// 注册一个设置
register_setting(
'mgp_settings_group', // 设置组名
'mgp_greeting_text', // 选项名,对应数据库中的键
array( // 可选的验证回调函数
'sanitize_callback' => 'sanitize_text_field',
'default' => '欢迎阅读!'
)
);
// 添加一个设置区域
add_settings_section(
'mgp_main_section', // 区域ID
'主要设置', // 区域标题
null, // 区域介绍的回调函数(此处不需要)
'my-greeting-plugin' // 页面slug
);
// 向区域中添加一个字段
add_settings_field(
'mgp_greeting_field', // 字段ID
'问候语文本', // 字段标签
'mgp_greeting_field_callback', // 用于输出字段HTML的回调函数
'my-greeting-plugin', // 页面slug
'mgp_main_section' // 区域ID
);
}
add_action( 'admin_init', 'mgp_initialize_settings' );
/**
* 渲染问候语文本输入字段
*/
function mgp_greeting_field_callback() {
$greeting = get_option( 'mgp_greeting_text', '欢迎阅读!' );
echo '<input type="text" name="mgp_greeting_text" value="' . esc_attr( $greeting ) . '" class="regular-text" />'echo '<p class="description">سيتم عرض هذا النص في أعلى كل مقالة على موقعك الإلكتروني.</p>';
}
يقوم هذا الكود بإنجاز المهام التالية:
1. استخدم add_action( 'admin_menu', ... ) تم إضافة صفحة قائمة فرعية تحت قائمة “الإعدادات”.
2. الاستخدام add_action( 'admin_init', ... ) إعدادات البدء، والتي تشمل خيار لتسجيل قاعدة بيانات، منطقة للإعدادات، وحقل للإدخال.
٣. تم تعريف دوال لتحديد إعدادات تصميم صفحات النماذج والحقول.
الآن، قم بتسجيل الدخول إلى واجهة خلفية WordPress الخاصة بك، وستجد خيار “إعدادات إضافة التحيات” تحت قائمة “الإعدادات”. يمكنك تعديل نص التحية هناك، وسترى التغييرات فورًا في المقالات المنشورة على الواجهة الأمامية لموقعك.
أفضل الممارسات والخطوات المتقدمة في تطوير الإضافات (Plugins)
بعد إكمال الميزات الأساسية، اتباع أفضل الممارسات سيجعل الإضافة الخاصة بك أكثر احترافية وأمانًا وسهولة في الصيانة.
الأمان هو المهمة الأولى.
لا تثق أبدًا بمدخلات المستخدمين. في الإضافات (plugins)، يجب أن تعتبر جميع البيانات المسترجعة من المصادر الخارجية كمعلومات غير موثوقة، ويجب التعامل معها بحذر شديد. $_GET、$_POST、$_COOKIE يجب التحقق من صحة البيانات (سواء كانت من استعلامات قاعدة البيانات أو مصادر أخرى)، وتنظيفها، وتنفيذ عمليات التهريب (escaping) قبل إظهارها أو استخدامها.
الإخراج الهارب: استخدم - Escape output: Use < esc_html()、esc_attr()、esc_url() و wp_kses_post() وغيرها من الدوال.
تنظيف الإدخال: استخدم sanitize_text_field()、sanitize_email()、intval() وغيرها من الدوال.
أمن قاعدة البيانات: استخدام $wpdb يمكن استخدام طرق الفئة لإجراء الاستعلامات، أو استخدام… prepare() يتم استخدام هذه الطريقة لإجراء عمليات استعلام مع تعيين المعاملات (parameters) لمنع هجمات الإدخال الزائف في كود SQL (SQL injection attacks).
فحص الأذونات: قبل الوصول إلى صفحة الإدارة أو تنفيذ إجراءات حساسة، استخدم current_user_can() قم بفحص صلاحيات المستخدم، ثم استخدمها حسب الحاجة. check_admin_referer() يتم التحقق من حقل “nonce” لمنع تزوير الطلبات بين المواقع (Cross-Site Request Forgery – CSRF).
القراءة الموصى بها إتقان المهارات الأساسية لبرنامج ووردبريس (WordPress) سيمكنك من إنشاء مواقع إلكترونية مهنية تجمع بين الوظائف العملية والجمال البصري.。
تحقيق التدويل (i18n – Internationalization)
لكي يتمكن مستخدمو العالم أجمع من استخدام إضافتك، من الضروري دعم الترجمة إلى لغات متعددة. يتطلب ذلك منك استخدام دوال الترجمة المتوفرة في ووردبريس (WordPress) لتغليف جميع النصوص الموجهة للمستخدمين. قم بتعديل طريقة عرض النصوص في الكود الحالي.
// 在插件头信息中已定义 Text Domain: my-first-plugin
$greeting_text = get_option( 'mgp_greeting_text', __( '欢迎阅读!', 'my-first-plugin' ) );
// 在管理菜单函数中
add_options_page(
__( '问候语设置', 'my-first-plugin' ),
__( '问候语插件设置', 'my-first-plugin' ),
'manage_options',
'my-greeting-plugin',
'mgp_render_settings_page'
);
ثم، يمكنك استخدام أداة مثل Poedit لاستخراج السلاسل النصية من مصدر كود الإضافة (البرامج الإضافية) ومن ثم إنشاء ما تحتاجه. .pot ملفات القوالب؛ يمكن للمترجمين استخدامها لإنشاء نسخ بلغات مختلفة من المحتوى. .po و .mo قم بتحميل الملفات ووضعها داخل الإضافة (البرنامج الإضافي). /languages الفهرس.
تنظيم الكود وتحسين الأداء
مع نمو وظائف الإضافات (البرامج الإضافية)، من الحكمة تقسيم الكود إلى ملفات منفصلة. استخدام برمجة الكائنات (Object-Oriented Programming – OOP) والفئات (Classes) لتنظيم الكود يمكن أن يحسن من قابلية القراءة وإعادة الاستخدام. أما بالنسبة للموارد مثل CSS وJS، فيجب استخدام… wp_enqueue_style() و wp_enqueue_script() الدالة تعمل في النقطة المناسبة من العملية (مثل…). wp_enqueue_scripts أو admin_enqueue_scriptsيتم تحميل المحتوى حسب الحاجة، ويتم تحديد إصدارات المكتبات المعتمدة. يجب تجنب إجراء عمليات استعلامات قواعد البيانات المكلفة مباشرة داخل الإضافات، ويُنصح باستخدام واجهة برمجة التطبيقات (API) Transients لتخزي
الملخصات
بدأت بإنشاء ملف PHP بسيط وإضافة معلومات رأس البرنامج الإضافي (plugin header) القياسية، ثم استخدمت مخالب الأفعال (action hooks) ومخالب المرشحات (filter hooks) لدمج البرنامج الإضافي في دورة حياة ووردبريس (WordPress’s lifecycle)، وبعد ذلك قمت ببناء واجهة إدارة للبرنامج الإضافي واتبعت أفضل الممارسات فيما يتعلق بالأمان والتدويل (security and localization). لقد مررت بالخطوات الأساسية اللازمة لبناء برنامج إضافي كامل لووردبريس. هذا البرنامج الإضافي البسيط الذي يقوم بعرض رسالة تحية يوضح بشكل كامل العملية الأساسية لتطوير البرامج الإضافية: التخطيط للميزات، تثبيت المخالب اللازمة، معالجة البيانات، وإنشاء واجهة المستخدم. تذكر أن المواصلة في التعلم من الدليل الرسمي لووردبريس، دراسة كود البرامج الإضافية المفتوحة المصدر عالية الجودة، والممارسة المستمرة هي أفضل الطرق لتحسين مهاراتك في تطوير البرامج الإضافية. قد يكون برنامجك الإضافي التالي قادرًا على حل مشكلة ع
الأسئلة الشائعة الأسئلة المتداولة
ما هي الحد الأدنى لعدد الملفات المطلوبة لإضافة (plugin) في ووردبريس (WordPress)؟
أي إضافة (plugin) لمنصة ووردبريس (WordPress) متكاملة الوظائف تحتاج في الحد الأدنى إلى ملف واحد من نوع PHP. كل ما عليك فعله هو تضمين معلومات رأس الإضافة (plugin header) الصحيحة في بداية هذا الملف، والتي تشمل ع Plugin Nameعند استخدام هذا الملف، يمكن لبرنامج ووردبريس (WordPress) التعرف عليه وتفعيله من خلال قائمة الإضافات (plugins) في الواجهة الخلفية. يمكن أن يحتوي هذا الملف على جميع أكواد الوظائف وأكواد صفحات الإدارة وما إلى ذلك. بالطبع، بالنسبة للإضافات المعقدة، من الأفضل تقسيم الكود إلى عدة ملفات ومجلدات من أجل سهولة الصيانة.
كيف يمكنني تجنب حدوث تعارض بين الإضافة (plugin) التي قمت بتطويرها والإضافات الأخرى؟
المفتاح لتجنب الصراعات يكمن في استخدام بادئات فريدة لتسمية جميع الدوال (functions) والفئات (classes) والمتغيرات (variables) وأسماء الخيارات (option names) ومخالب الإجراءات/المرشحات (action/filter hooks). على سبيل المثال، لا تستخدم… add_greeting() يجب استخدام أسماء دوال عامة وموحدة، بدلاً من أسماء غير متناسقة أو غير واضحة. mgp_add_greeting() مثل هذه الأسماء (التي…) mgp (هذا اختصار لإحدى الإضافات الخاصة بك). بالنسبة للخيارات المخزنة في قاعدة البيانات، يجب أيضًا استخدام بادئة فريدة لكل منها، مثل… mgp_greeting_textهذا يمكن أن يقلل إلى أقصى حد من احتمالية حدوث تعارضات في أسماء المساحات (namespaces).
ما الذي يجب القيام به عند تفعيل أو تعطيل الإضافات (plugins)؟
عند تفعيل الإضافة، غالبًا ما يلزم تنفيذ بعض المهام المرة واحدة، مثل التحقق من إصدار PHP أو WordPress، أو إنشاء جداول قاعدة البيانات، أو تهيئة الإعدادات الافتراضية، وما إلى ذلك. يمكن القيام بذلك عن طر register_activation_hook() يتم تنفيذ ذلك باستخدام دوال. وبالمثل،register_deactivation_hook() يُستخدم لتحديد العمليات التي يتم تنفيذها عند تعطيل الإضافة، مثل إلغاء المهام المخططة. لكن يرجى ملاحظة أن ميزة تعطيل الإضافة عادةً لا تُستخدم لحذف البيانات؛ حيث يتم تنظيف البيانات عادةً عن طريق ميزة
كيف يمكنني إضافة صفحة إعدادات لإضافتي؟
إضافة صفحة إعدادات للإضافة يتطلب استخدام واجهتي برمجة التطبيقات (APIs) الخاصتين بووردبريس: واجهة برمجة التطبيقات للقوائم (Menu API) وواجهة برمجة التطبيقات للإعدادات (Settings API). أولاً، استخد add_action( 'admin_menu', ... ) قم بتثبيت دالة، ثم استخدمها داخل تلك الدالة. add_menu_page() أو add_submenu_page() قم بالتسجيل لصفحة قائمة رئيسية (top-level menu) أو قائمة فرعية (sub-level menu)، ثم استخدمها بعد ذلك. add_action( 'admin_init', ... ) قم بتثبيت دالة أخرى، ثم استخدمها داخل الدالة الأصلية. register_setting()、add_settings_section() و add_settings_field() لتحديد خيارات الإعدادات المحددة وحقول النموذج، أولاً… ثم، قم بكتابة دالة استدعاء (callback function) لعرض نموذج HTML الخاص بصفحة الإعدادات.
ما هي إصدارات ووردبريس التي يجب أن يكون الإضافة الخاصة بي متوافقة معها؟
يعتمد الأمر على مجموعة المستخدمين المستهدفين. عادةً، يُنصح بالتوافق مع آخر 3 إلى 4 إصدارات رئيسية من ووردبريس. يمكنك استخدام هذا المعيار في معلومات رأس الإضافة (plugin header information). Requires at least: لتحديد الإصدار الأدنى المطلوب من ووردبريس (WordPress)، يجب أن يتم تجنب استخدام الدوال الجديدة جدًا التي تتوفر فقط في أحدث إصدارات ووردبريس أثناء عملية التطوير. function_exists() قم بإجراء فحوصات شرطية لتوفير بدائل تتوافق مع الإصدارات السابقة من نظام ووردبريس (backward-compatible alternatives). بالإضافة إلى ذلك، من الطرق الجيدة لضمان التوافق إجراء اختبارات دورية على الإصدارات القديمة من ووردبريس.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- كيفية اختيار وتخصيص تصميم ووردبريس المثالي الذي يناسب احتياجاتك؟
- من الصفر إلى الواحد: دليل شامل وخطوات عملية لبناء مواقع إلكترونية مهنية باستخدام WordPress
- دليل شامل لتحسين أمان ووردبريس
- التعرف العميق على أفضل ممارسات الأمان في ووردبريس: الحماية الشاملة لموقعك الإلكتروني
- دليل شامل لتطوير إضافات ووردبريس: من المبتدئين إلى الخبراء في إنشاء إضافات متخصصة