نظام الإضافات (Plugins) في ووردبريس (WordPress) هو جوهر قدرته الكبيرة على التوسعة. من خلال الإضافات، يمكن للمطورين إضافة ميزات متنوعة إلى المواقع الإلكترونية، بدءًا من نماذج الاتصال البسيطة وحتى وظائف التجارة الإلكترونية المعقدة. سيقوم هذا المقال بإرشادك خلال كامل عملية إنشاء إضافة وظيفية شاملة، مع شرح عميق لهيكلها الأساسي، وآليات الربط (Hooks)، ومسائل الأمان، بالإضافة إلى أفضل الممارسات. في النهاية، ستمتلك إضافة جاهزة للنشر أ
بيئة التطوير والاستعدادات الأساسية
قبل كتابة أول سطر من الكود، من الضروري توفير بيئة تطوير مستقرة وفعالة. هذا لا يسمح لك فقط بالتركيز على بناء المنطق البرمجي، بل يساعد أيضًا في تجنب العديد من الأخطاء الشائعة.
إعداد بيئة التطوير المحلية.
ننصح باستخدام مجموعات بيئات الخوادم المحلية مثل XAMPP أو MAMP، أو الخيار الأكثر احترافية وهو Local by Flywheel. تأكد من أن إصدار PHP الخاص بك (يُفضل 7.4 أو أعلى) متوافق مع بيئة WordPress التي ستقوم بنشرها، وقم بتفعيل وضع التصحيح (debugging mode).wp-config.phpفي الوثيقة، يتم تعيين الإعدادات.WP_DEBUGلأجلtrueسيعرض هذا جميع الأخطاء والتحذيرات أثناء مرحلة التطوير، مما يساعدك على تحديد المشكلات بسرعة.
القراءة الموصى بها دليل البدء في تطوير إضافات ووردبريس: من الصفر إلى بناء وحدات وظيفية متخصصة。
تخطيط هيكل ملفات الإضافات (Plugins)
يحتاج أي إضافة (plugin) قياسية إلى ملف رئيسي واحد على الأقل. الممارسة الشائعة هي إنشاء مجلد خاص بالإضافة وتسميته باسم الوظيفة الأساسية لها، على سبيل المثال:my-first-pluginفي هذا المجلد، يكون الملف الرئيسي عادةً بنفس اسم المجلد، مع امتداد معين في نهايته..phpوهيmy-first-plugin.phpيساعد وجود هيكل واضح في إضافة ملفات JavaScript وCSS وحزم اللغات (language packs) أو ملفات الكلاسات (class files) لاحقًا بسهولة.
إنشاء ملف رئيسي للإضافة (plugin) ومعلومات الرأس الأساسية (basic header information)
تعتمد “نقاط الدخول” إلى الإضافات (plugins) وعمليات التحقق من هوية المستخدمين على المعلومات الموجودة في بداية الملف الرئيسي (الملف الذي يحتوي على كود الووردبريس). هذه المعلومات هي المفتاح لكي يتمكن ووردبريس
كتابة رأس ملف إضافة (plugin header) قياسي
في بداية الملف الرئيسي للغة PHP، يجب استخدام كتلة تعليقات خاصة بلغة PHP لتوفير معلومات الإضافة (البرنامج الإضافي). ستظهر هذه المعلومات في صفحة إدارة الإضافات في واجهة ووردبريس الخلفية.
<?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هذا الحقل إلزامي، بينما الحقول الأخرى اختيارية. حقل النص (Text Field).Text Domainمخصص لدعم الترجمة الدولية (Internationalization).
منع الوصول المباشر إلى الملفات
لحماية أمان كود الإضافات ومنع الوصول المباشر إلى الملفات الرئيسية عبر عناوين URL، مما قد يؤدي إلى تسرب المعلومات أو حدوث أخطاء، من الضروري إضافة فحص للوصول المباشر بعد معلومات الرأس (header information) وقبل أي كود آخر.
القراءة الموصى بها دليل التطوير المخصص لإضافات WooCommerce: إنشاء متجر إلكتروني خاص بك。
// 防止直接访问
if ( ! defined( 'ABSPATH' ) ) {
exit;
} ثابتة.ABSPATHهذا هو المسار المطلق لمجلد الجذر (root directory) في ووردبريس، ويتم تحديده أثناء تشغيل ووردبريس. تضمن هذه الشرطة أن الكود الموجود بعد ذلك سيتم تنفيذه فقط في بيئة ووردبريس.
تنفيذ الوظائف الأساسية واستخدام مكونات الارتباط (hooks) في ووردبريس (WordPress)
يتيح لـ WordPress، من خلال آليتين قويتين وهما “خطافات الأفعال” (Action Hooks) و“خطافات المرشحات” (Filter Hooks)، إمكانية تدخل كودك في العمليات الأساسية للنظام أو تعديل البيانات في أوقات محددة. فهم واستخدام هاتين الآليتين أمر أساسي لتطوير الإضافات (
استخدم خطافات الحركة لإضافة وظائف.
تسمح خطافات الأفعال (Action Hooks) بتنفيذ كود مخصص عند حدوث أحداث معينة. على سبيل المثال، يمكننا استخدامها لإنشاء ميزة تضيف ترخيص النشر تلقائيًا في نهاية محتوى المقال.the_contentالمرشحات (والتي في جوهرها عبارة عن "خطافات مرشحات"، لكن طريقة استخدامها مشابهة لطريقة استخدام "خطافات الإجراءات") و...wp_enqueue_scriptsاستخدم خطافات الإجراءات (action hooks) لتحميل الموارد.
أولاً، دعونا نكتب دالة.mfp_add_copyright_noticeوقم بتثبيته (mount it) هناك.the_contentعلى الخطاف.
/ / إضافة إشعار حقوق الطبع والنشر بعد محتوى المقالة
function mfp_add_copyright_notice( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$copyright_text = '<p><em>جميع حقوق هذا المقال محفوظة لهذا الموقع الإلكتروني؛ يرجى ذكر المصدر عند إعادة نشره.</em></p>';
$content .= $copyright_text;
}
return $content;
}
add_filter( 'the_content', 'mfp_add_copyright_notice' ); تضمن عمليات التحكم في الشروط أن يتم عرض إعلان حقوق النشر فقط ضمن الدورة الرئيسية لكل مقال على الواجهة الأمامية، دون أن يؤثر ذلك على الصفحة الرئيسية أو الملخص أو الجزء الخلفي من النظام.
استخدم مُعلقات الفلتر لتعديل البيانات.
تُستخدم “خطافات المرشحات” (filter hooks) لتعديل أي بيانات يتم تمريرها إليها. لنفترض أننا نريد تعديل أجزاء معينة من عنوان الموقع الإلكتروني؛ في هذه الحالة، يمكننا إنشاء دالة وإضافتها إلى نظام إwp_titleأو أكثر حداثةdocument_title_partsمرشحات.
القراءة الموصى بها شرح مفصل لكامل عملية تطوير إضافات ووردبريس: دليل عملي من المبتدئين إلى المحترفين。
// 修改网站标题后缀
function mfp_modify_title_suffix( $title ) {
if ( is_home() ) {
$title['suffix'] = ' | 我的精彩博客';
}
return $title;
}
add_filter( 'document_title_parts', 'mfp_modify_title_suffix' ); إدخال البرامج النصية والأنماط بشكل آمن.
لإضافة أنماط جمالية أو تفاعلات للإضافة (plugin)، يجب استخدام الطرق الموصى بها من قبل ووردبريس (WordPress).wp_enqueue_style()وwp_enqueue_script()الوظيفة، ومن خلالwp_enqueue_scriptsاستدعاء الخطاف (Hook Call).
// 注册并排队插件的前端样式
function mfp_enqueue_frontend_assets() {
// 获取插件目录的URL
$plugin_url = plugin_dir_url( __FILE__ );
// 排队一个CSS文件
wp_enqueue_style(
'mfp-frontend-style',
$plugin_url . 'assets/css/frontend.css',
array(),
'1.0.0'
);
// 排队一个JS文件,并依赖jQuery
wp_enqueue_script(
'mfp-frontend-script',
$plugin_url . 'assets/js/frontend.js',
array( 'jquery' ),
'1.0.0',
true // 在页脚加载
);
}
add_action( 'wp_enqueue_scripts', 'mfp_enqueue_frontend_assets' ); إنشاء صفحة إدارة وخيارات تهيئة
تحتاج العديد من الإضافات (البرامج الإضافية) إلى توفير خيارات تكوين للمستخدمين. يوفر ووردبريس (WordPress) واجهة برمجة تطبيقات (API) لإنشاء قوائم الإدارة وصفحات الخيارات بطريقة آمنة وموحدة.
إضافة قائمة الإدارة
أولاً، استخدم.add_action( ‘admin_menu’, … )لتسجيل عنصر جديد في قائمة الإدارة أو عنصر فرعي في القائمة، استخدم الدالة التالية:mfp_create_admin_menuسيتم إضافة صفحة قائمة فرعية تحت القائمة الرئيسية “الإعدادات”.
// 创建插件管理菜单
function mfp_create_admin_menu() {
add_options_page(
‘我的插件设置’, // 页面标题
‘我的插件’, // 菜单标题
‘manage_options’, // 权限要求
‘mfp-settings’, // 菜单slug
‘mfp_settings_page_html’ // 用于输出页面内容的回调函数
);
}
add_action( ‘admin_menu’, ‘mfp_create_admin_menu’ ); إنشاء صفحة إعدادات وحقول
بعد ذلك، من الضروري تعريف دالة الاستدعاء العكسي (callback function).mfp_settings_page_htmlلتحميل محتوى الصفحة واستخدام واجهة برمجة التطبيقات (API) المحددة، قم بتسجيل مجموعة إعدادات واحدة، وخيار واحد، بالإضافة إلى حقول محددة.
\n// إعداد إخراج HTML للصفحة
function mfp_settings_page_html() {
// التحقق من أذونات المستخدم
if ( ! current_user_can( ‘manage_options’ ) ) {
return;
}
?>
<div class="“wrap”">
<h1></h1>
<form action="/ar/“options.php”/" method="“post”" data-trp-original-action="“options.php”">
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
‘mfp_field_copyright_text’ )
);
}
add_action( ‘admin_init’, ‘mfp_settings_init’ );
// 渲染版权文本文档字段
function mfp_field_copyright_text_html() {
$options = get_option( ‘mfp_options’ );
$value = $options[‘copyright_text’] ?? ‘默认版权文本’; // PHP 7.0+ 空合并运算符
?>
<input type="“text”"
id="“mfp_field_copyright_text”"
name="“mfp_options[copyright_text]”"
value="“NO NUMERIC NOISE KEY" 1000”
class="“regular-text”">
أنا لا أعرف ماذا أقول. الآن، يمكنك القيام بما كنت تريد القيام به من قبل.mfp_add_copyright_noticeفي الدالة، يتم استخدام…get_option( ‘mfp_options’ )[‘copyright_text’]للحصول بشكل ديناميكي على النصوص الخلفية المحددة من قبل المستخدم، مما يسمح بتكوين وظائف الإضافة (البرامج الإضافية).
الملخصات
يقدم هذا المقال شرحًا مفصلًا للعملية الكاملة لتطوير إضافة وظيفية لـ WordPress من الصفر. نبدأ بإنشاء بيئة التطوير وإنشاء الملف الرئيسي الذي يحتوي على معلومات الرأس القياسية، مع التأكيد على أهمية الحماية الأمنية. بعد ذلك، نناقش بعمق آلية الأزرار (hooks) الأساسية في تطوير إضافات WordPress، بما في ذلك كيفية استخدام أزرار الإجراءات (action hooks) لتنفيذ الكود وأزرار المرشحات (filter hooks) لتعديل البيانات، ونوضح طرق تحميل موارد الواجهة الأمامية بشكل آمن. وأخيرًا، نستخدم واجهة برمجة التطبيقات (API) الخاصة بـ WordPress لإنشاء صفحة إعدادات إدارية ذات مستوى مهني، مما يتيح للمستخدمين تخصيص وظائف الإضافة حسب احتياجاتهم.
تم اتباع معايير وممارسات البرمجة الخاصة بووردبريس (WordPress) طوال عملية التطوير، وذلك يشمل استخدام أسماء دوال فريدة معينة، والتحقق من صحة البيانات وتنفيذ عمليات تهريب (escaping) للبيانات، بالإضافة إلى توفير الدعم اللازم للترجمة (التدويل). بعد إتقان هذه المعرفة الأساسية، يمكنك توسيع وظائف الإضافة (plugins) الخاصة بك بشكل لا نهائي من خلال دمج مختلف الأدوات المساعدة (hooks)، أو إنشاء جداول قوا
الأسئلة الشائعة الأسئلة المتداولة
كيف يمكن اختيار البادئات المناسبة لدوال وفئات الإضافات (plugins)؟
يجب أن تستخدم جميع الدوال العامة والفئات والمتغيرات والثوابت الموجودة في الإضافات (plugins) بادئة فريدة لمنع حدوث تعارض في الأسماء مع إضافات أو مواضيع أخرى. عادةً ما تتكون هذه البادئة من اختصار أو اسم مختصر للإضافة؛ على سبيل المثال، إذا كان اسم الإضافة “My First Plugin”, فيمكن اختيار بادئة مثل “MfP-”.mfp_أوmyfirstplugin_من المهم جدًا الحفاظ على الاتساق.
لماذا يجب استخدام دالة `wp_enqueue_script` لإضافة السكريبتات؟
الاستفادة منwp_enqueue_script()وwp_enqueue_style()هذه الطريقة موصى بها رسميًا من قبل ووردبريس (WordPress). فهي تتعامل بشكل صحيح مع اعتمادات البرامج النصية (مثل jQuery)، وتمنع تحميل نفس البرنامج النصي مرارًا وتكرارًا، وتسمح للإضافات (plugins) أو القوالب (themes) الأخwp_deregister_script()لإزالة أو استبدال السكريبت الخاص بك بشكل آمن، استخدمه مباشرةً.عند إدخال العلامات التصنيفية، لن يتمكن المستخدمون من الاستفادة من هذه المزايا الإدارية، وقد ينتج عن ذلك حدوث تعارضات.
ما هي المعايير الأمنية المهمة عند تطوير الإضافات (plugins)؟
المبدأ الأساسي هو: لا تثق أبدًا بما يدخله المستخدمون. بالنسبة لكل شيء يأتي منهم…$_GET、$_POST、$_REQUESTأو البيانات المسترجعة من قاعدة البيانات للتحقق من صحتها وتنقيتها وتهيئتها للاستخدام (مثل تنفيذ عمليات تهريب الرموز). يتم استخدام هذه البيانات عند عرضها في صفحات HTML.esc_html()、esc_attr()للاستخدام في عنوان الرابط (URL):esc_url()في استعلامات SQL، من الضروري استخدام…$wpdb->prepare()قم بإجراء استعلامات معالجة بالمعاملات (parameterized queries) لمنع هجمات الإدخال الزائف في SQL (SQL injection attacks). وفي الوقت نفسه، استخدم…current_user_can()تحقق من صلاحيات المستخدم.
كيف يمكنني إضافة دعم للترجمة الدولية (التعددية اللغوية) إلى إضافتي (البرنامج الإضافي)؟
أولاً، قم بضبط المعلومات الخاصة برأس الإضافة (plugin header) بشكل صحيح.Text DomainوDomain Pathثم، في جميع أماكن النصوص التي تحتاج إلى الترجمة داخل الكود، استخدم…()لإجراء الترجمة الإخراجية، استخدم_e()إجراء ترجمة صدى، على سبيل المثال.( ‘Hello World’, ‘my-first-plugin’ )أخيرًا، استخدم أداة مثل Poedit لمسح الكود وإنشاء….potملفات القوالب، وإنشاء نسخ منها للغات المختلفة..poو.moقم بترجمة الملف وضعه في المكان المناسب./languagesتحت القائمة.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- تحليل متعمق لـ WooCommerce: بناء موقع تجاري إلكتروني قوي على WordPress من الصفر
- دليل شامل لتحسين أداء ووردبريس: من الجوهر إلى الواجهة الأمامية، لزيادة السرعة بشكل شامل
- كيفية تثبيت وتكوين شهادة SSL لموقعك على ووردبريس (WordPress)
- دليل تكوين تحسين ذاكرة التخزين المؤقت لموقع ووكوميرس (WooCommerce) الكامل: لزيادة سرعة مواقع التجارة الإلكترونية على ووردبريس ومعدلات التحويل
- دليل نهائي لتثبيت ووردكامرس (WooCommerce) واختيار القوالب (Themes) لعام 2026