البدء من الصفر: الاستعدادات وإعداد البيئة
قبل البدء في كتابة أول إضافة (plugin)، من الضروري القيام بالاستعدادات اللازمة بشكل كامل. وتشمل هذه الاستعدادات فهم الهيكل الأساسي لإضافات ووردبريس (WordPress plugins)، وإنشاء بيئة تطوير محلية آمنة، بالإضافة إلى فهم الفلسفة الأساسية لتطوير الإضافات.
ملحق ووردبريس نموذجي هو عبارة عن ملف يقع في المسار المحدد للملحقات في نظام ووردبريس، وعادة ما يكون بامتداد `.php`. /wp-content/plugins/ مجلد مستقل داخل المجلد الرئيسي؛ جوهر هذا المجلد هو ملف PHP رئيسي يحتوي على رأس ملف (file header) معين. هذا الملف الرئيسي لا يحتوي فقط على معلومات الوصف الخاصة بالإضافة (metadata)، بل يمثل أيضًا نقطة الدخول الرئيسية لوظائف الإضافة بأكملها. هناك طريقتان لتشغيل الإضافة: الأولى باستخدام مجموعة من الدوال البرمجية القائمة على المفهوم الإجرائي (procedural functions)، والثانية باستخدام هيكل الكلاسات القائم على المفهوم الكائني (object-oriented classes). الطريقة الثانية أكثر ش
بيئة التطوير المحلية ضرورية للغاية للتطوير الفعال. يُنصح باستخدام أدوات مثل XAMPP أو Local by Flywheel أو Docker لإنشاء بيئة تشغيل تجمع بين Apache/Nginx وMySQL وPHP. هذا يتيح لك إجراء الاختبارات والتصحيحات بحرية دون التأثير على الموقع الإلكتروني الحي.
القراءة الموصى بها من الصفر: الدليل الكامل لتطوير الإضافات في ووردبريس ومشاركة أفضل الممارسات.。
بناء هيكل الإضافة: البنية والملفات الأساسية
سيقوم هذا القسم بشرح مفصل لكيفية إنشاء هيكل أساسي للإضافة (plugin) يتوافق مع معايير ووردبريس (WordPress) من الصفر. يعتبر الهيكل الجيد أساسًا مهمًا لاستقرار الإضافة وأمانها وسهولة صيانتها.
إنشاء ملفات الإضافات الرئيسية الضرورية
تبدأ حياة الإضافة (البرنامج الإضافي) من ملف رئيسي. عادةً ما يكون اسم هذا الملف مطابقًا لاسم مجلد الإضافة الخاص بك؛ على سبيل المثال، إذا كان اسم مجلد الإضافة هو… my-custom-pluginإذًا، يمكن تسمية الملف الرئيسي… my-custom-plugin.phpفي أعلى هذا الملف، يجب عليك استخدام كتلة تعليقات تتوافق مع تنسيق معين للإعلان عن معلومات الإضافة (البرنامج الإضافي). هذا أمر أساسي لكي يتمكن WordPress من التعرف على الإضافة وعرضها في قائمة الإدارة الخلفية.
فيما يلي مثال على أبسط رأس ملف لإضافة (plugin) :
<?php
/**
* Plugin Name: 我的自定义功能模块
* Plugin URI: https://example.com/my-custom-plugin
* Description: 这是一个用于演示如何从零开始开发WordPress插件的示例模块。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-custom-plugin
* Domain Path: /languages
*/ في هذه التعليقات، “اسم الإضافة” (Plugin Name) ضروري، بينما الحقول الأخرى اختيارية ولكن يُنصح بملؤها. “نطاق النص” (Text Domain) و“مسار النطاق” (Domain Path) مستخدمان لتدويل الإضافة (i18n)، وذلك للتحضير لترجمتها إلى لغات متعددة فيما بعد.
ملفات ومجلدات الإضافات (plugins)
مع زيادة وظائف الإضافات (البرامج الإضافية)، ليس من الحكيم تجميع كل الكود في الملف الرئيسي. عادةً ما تتضمن هيكلية الإضافات المنظمة عدة دليلات فرعية (subdirectories) وملفات. إحدى الهياكل الشائعة هي كالتالي:
القراءة الموصى بها دليل شامل لتطوير إضافات ووردبريس: من الصفر إلى نشرها وتشغيلها على الخادم بشكل فعلي。
my-custom-plugin/
├── my-custom-plugin.php # 主插件文件(入口)
├── includes/ # 核心功能类文件目录
│ ├── class-core.php # 核心逻辑类
│ └── class-admin.php # 后台管理逻辑类
├── admin/ # 后台相关文件
│ ├── css/ # 后台样式表
│ ├── js/ # 后台JavaScript
│ └── partials/ # 后台模板片段
├── public/ # 前端相关文件
│ ├── css/
│ ├── js/
│ └── partials/
├── assets/ # 公共资源(如图标、图片)
├── languages/ # 国际化语言包(.po, .mo文件)
└── uninstall.php # 插件卸载清理脚本 في my-custom-plugin.php في الملف الرئيسي، عادةً ما لا نكتب المنطق التجاري مباشرةً، بل نستخدمه كـ “مُشغل” (launcher)، وهو مسؤول عن تضمين الملفات الضرورية وتهيئة الكلاسات الأساسية.
// 防止直接文件访问
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
// 定义插件路径常量,方便在其他文件中引用
define( 'MY_PLUGIN_PATH', plugin_dir_path( __FILE__ ) );
define( 'MY_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
// 包含核心类文件
require_once MY_PLUGIN_PATH . 'includes/class-core.php';
require_once MY_PLUGIN_PATH . 'includes/class-admin.php';
// 初始化插件
function my_custom_plugin_init() {
$plugin_core = new My_Plugin_Core();
$plugin_admin = new My_Plugin_Admin();
// 执行初始化操作...
}
add_action( 'plugins_loaded', 'my_custom_plugin_init' ); روابط إلى جوهر WordPress: خطافات الأفعال والمرشحات (Links to WordPress Core: Action and Filter Hooks)
السبب في قوة نظام الإضافات (Plugins) في ووردبريس (WordPress) يكمن في أنه يوفر عددًا كبيرًا من نقاط التفاعل (Event Points)، مما يسمح للمطورين بتغيير سلوك النظام أو تحسينه دون الحاجة إلى تعديل الكود الأساسي. هذه الآليات تُعرف باسم “الخطافات” (Hooks)، وتنقسم بشكل رئيسي إلى نوعين: الإجراءات (Actions) والمرشحات (Filters). هذه الخطافات تعمل كجسر للتواصل بين الإضافات وجوهر ووردبريس.
فهم واستخدام “خطافات الأفعال” (Action Hooks)
تسمح خيوط الأعمال (Action Hooks) بتنفيذ كود مخصص عند حدوث حدث معين، مثل نشر مقالة، أو تسجيل المستخدم، أو تحميل صفحة معينة في واجهة الإدارة. add_action() يمكن للدوال أن “تُركب” (تُعلق) على هذه النقاط المحددة (الـ “hooks”).
إذا أردت إضافة بيان حقوق النشر تلقائيًا في نهاية المقال، فيمكنك استخدام أداة أو كود مخصص لذلك. the_content هذا “خطاف الإجراء” (في الواقع، إنه مجرد مرشح، لكن طريقة استخدامه مشابهة لطريقة استخدام الإجراءات)؛ مثال كلاسيكي على استخدامه هو إرسال رسالة ترحيب إلى المستخدم بعد نجاح عملية التسجيل:
// 这是一个动作钩子的使用示例
function my_plugin_send_welcome_email( $user_id ) {
$user = get_userdata( $user_id );
$to = $user->user_email;
$subject = '欢迎加入我们的网站!';
$message = '亲爱的' . $user->display_name . ',感谢您注册!';
wp_mail( $to, $subject, $message );
}
// 将函数挂载到`user_register`这个动作钩子上
add_action( 'user_register', 'my_plugin_send_welcome_email' ); إتقان طريقة استخدام المرشحات (Filters)
تسمح خيوط المرشحات (Filter Hooks) بتعديل البيانات. عندما يقوم ووردبريس بتنفيذ عملية معينة، فإنه يمرر البيانات المطلوبة عبر سلسلة من المرشحات (Filters)، ويمكن للإضافات (Plugins) الخاصة بك اعتراض هذه البيانات، تعديلها، ثم إرجاعها مرة أخرى. add_filter() يتم تنفيذ ذلك باستخدام دوال (functions).
أكثر الأمثلة شيوعًا هو تعديل محتوى المقالات المنشورة. على سبيل المثال، يمكن إضافة صورة مميزة تلقائيًا في بداية كل مقال كصورة توضيحية له.
القراءة الموصى بها دليل للبدء في تطوير إضافات ووردبريس: بناء أول وحدة وظيفية مخصصة الخاصة بك من الصفر。
function my_plugin_prepend_featured_image_to_content( $content ) {
// 只在主循环的单篇文章页面生效
if ( is_single() && in_the_loop() && is_main_query() ) {
$featured_image = get_the_post_thumbnail( null, 'medium', array( 'class' => 'alignleft' ) );
if ( $featured_image ) {
$content = $featured_image . $content;
}
}
return $content;
}
// 将函数挂载到`the_content`这个过滤器钩子上
add_filter( 'the_content', 'my_plugin_prepend_featured_image_to_content' ); تنفيذ وظائف الإضافات: دمج الواجهة الخلفية مع الواجهة الأمامية
عادةً ما يحتاج البرنامج المكمل (الإضافة) الكامل إلى التفاعل مع المستخدمين، وهذا يعني أنك بحاجة إلى إنشاء واجهة إدارة للتعامل مع الإعدادات، وقد يكون من الضروري أيضًا إضافة ميزات أو محتو
إنشاء صفحة لإعدادات الخلفية
توفير صفحة إعدادات واضحة للإضافات في الواجهة الخلفية (الخادم) أمر بالغ الأهمية لتحسين تجربة المستخدم. يوفر ووردبريس عددًا من واجهات برمجة التطبيقات (APIs) لإضافة القوائم الرئيسية أو الفرعية. عادةً ما يتضمن هذا العملية خطوتين: تسجيل عناصر القائمة، وتحديد دوال الاستدعاء (callback functions) المقابلة لهذه العناصر لعرض مح
فيما يلي مثال على إضافة عنصر قائمة فرعية تحت القائمة الرئيسية “الإعدادات”:
class My_Plugin_Admin {
public function __construct() {
add_action( 'admin_menu', array( $this, 'add_admin_menu' ) );
add_action( 'admin_init', array( $this, 'register_settings' ) );
}
public function add_admin_menu() {
add_options_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'my-plugin-settings', // 菜单slug
array( $this, 'render_settings_page' ) // 回调函数
);
}
public function register_settings() {
// 注册一个设置选项
register_setting( 'my_plugin_settings_group', 'my_plugin_option_name' );
// 添加一个设置区块
add_settings_section( 'my_plugin_main_section', '主要设置', null, 'my-plugin-settings' );
// 向区块中添加一个字段
add_settings_field(
'my_plugin_text_field',
'示例文本字段',
array( $this, 'render_text_field' ),
'my-plugin-settings',
'my_plugin_main_section'
);
}
public function render_settings_page() {
?>
<div class="wrap">
<h1>إعدادات الإضافة الخاصة بي</h1>
<form action="/ar/options.php/" method="post" data-trp-original-action="options.php">
<?php
settings_fields( 'my_plugin_settings_group' );
do_settings_sections( 'my-plugin-settings' );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
<?php
}
public function render_text_field() {
$option = get_option( 'my_plugin_option_name' );
echo '<input type="text" name="my_plugin_option_name" value="' . esc_attr( $option ) . '" />';
}
} قم بعرض الميزات على واجهة الموقع الإلكتروني.
تتنوع طرق تنفيذ الميزات الأمامية (الواجهة البرمجية للمستخدم)، ويمكن أن تكون عبارة عن أكواد قصيرة (Shortcodes)، أو أدوات صغيرة (Widgets)، أو تعديلات على المحتوى الموجود عبر واجهات برمجة التطبيقات (APIs). الأكواد القصيرة هي طريقة بسيطة وفعالة تسمح للمستخدمين بتفعيل وظائف الإضافات (Plugins) داخل محررات المقالات أو الصفحات عن طريق إدخال علامة ترم
لإنشاء كود قصير، يجب استخدام أدوات أو أطر عمل متخصصة. add_shortcode() دالة:
// 定义一个简单的短代码,用于显示一个问候语
function my_plugin_greeting_shortcode( $atts ) {
// 解析短代码属性
$atts = shortcode_atts( array(
'name' => '访客',
), $atts, 'greeting' );
// 返回输出内容
return '<p class="my-plugin-greeting">مرحبًا، '. esc_html($atts['name'])'. ’!</p>'php
add_shortcode('greeting', 'my_plugin_greeting_shortcode'); يحتاج المستخدمون فقط إلى إدخال النصوص في محرر المقالات. [greeting name="张三"]سيتم عرض النص “مرحبًا، زانغ سان!” في الجزء الأمامي من الصفحة.
الملخصات
تطوير إضافات ووردبريس (WordPress plugins) يعد عملية تتمثل في إدخال أفكار مخصصة ضمن نظام بيئي ضخم، والجزء الأساسي من هذه العملية يكمن في فهم واستخدام آليات “الأكشنات” (actions) و“الفلاتر” (filters). يبدأ التطوير الناجح من هيكل ملفات واضح ومعياري ومُقسم إلى وحدات منفصلة (مودولات)، مما يوفر أساسًا متينًا للصيانة والتوسعات لاحقًا. يمكن جعل الإضافات سهلة الاستخدام والتكوين من خلال إنشاء صفحات للإعدادات في الواجهة الخلفية، كما يمكن دمج الميزات بسلاسة مع واجهة الموقع الأمامية باستخدام الكود المختصر (shortcodes)، الأدوات الإضافية (widgets)، أو واجهات برمجة التطبيقات المخصصة (custom APIs). تعتبر الأمان، التوافق مع اللغات المختلفة (التدويل)، وجودة الكود من النقاط الأساسية التي يجب الانتباه إليها طوال دورة التطوير. اتباع معايير ووردبريس للكتابة البرمجية وأفضل الممارسات لا يضمن فقط استقرار الإضافة، بل يساعد أيضًا على اندماجها بشكل
الأسئلة الشائعة الأسئلة المتداولة
ما مدى عمق المعرفة الأساسية بلغة PHP المطلوبة لتطوير إضافات (plugins) لمنصة WordPress؟
لتطوير إضافة بسيطة، يكفي امتلاك المعرفة الأساسية بلغة PHP، مثل المتغيرات (variables)، الدوال (functions)، الجمل الشرطية (conditional statements)، والحلقات (loops). لكن لتطوير إضافة تجارية ذات وظائف معقدة وآمنة وفعالة، يلزم فهم أعمق للمفاهيم البرمجية، ومن ضمنها برمجة الكائنات (Object-Oriented Programming – OOP) وواجهات برمجة التطبيقات الأساسية لـ WordPress (مثل الكلاسات المتعلقة بالتعامل مع قواعد البيانات). wpdbمثل واجهات برمجة التطبيقات (APIs) لطلبات HTTP، وأفضل الممارسات الأمنية مثل التحقق من البيانات، والتهريب (escaping)، والوقاية من هجمات SQL injection وCSRF، بالإضافة إلى بعض المعرفة الأساسية بلغات JavaScript وCSS للتفاعلات الأمامية (front-end interactions).
يُنصح بالبدء بتعديل الإضافات الصغيرة الموجودة حاليًا أو ببناء وظائف بسيطة، ثم التعمق تدريجيًا في الموضوع.
كيف يمكنني التأكد من أن الإضافة (البرنامج الإضافي) التي أطورها آمنة؟
ضمان أمان الإضافات (البرامج الإضافية) هو عملية متعددة المستويات. أولاً، يجب إجراء تحقق صارم وتنقية لجميع المدخلات القادمة من المستخدمين أو من مصادر خارجية، مثل بيانات النماذج (forms data)، ومعاملات عناوين الويب (URL parameters)، وملفات الكوكيز (Cookies). يمكن استخدام الدوال المتاحة في ووردبري sanitize_text_field(), esc_html(), esc_url() و wp_kses() إلخ.
ثانيًا، عند إجراء عمليات على قاعدة البيانات، يجب استخدام… $wpdb الطرق (methods) التي توفرها الفئة (class)… prepare() يجب استخدام تقنيات معينة (مثل التحقق من صحة البيانات والتنسيق الصحيح للكود) لمنع هجمات الاستيلاء على البيانات من خلال SQL (SQL Injection). عند إرسال أي بيانات إلى الواجهة الأمامية، يجب تنفيذ عمليات تهريب (escaping) current_user_can()بالإضافة إلى ذلك، يتم استخدام قيم غير عشوائية (nonces) للتحقق من نية الطلبات، وذلك لمنع تزوير الطلبات عبر المواقع المختلفة (Cross-Site Request Forgery – CSRF).
بعد الانتهاء من تطوير الإضافة (البرنامج الإضافي)، كيف يمكن توزيعها وتحديثها؟
هناك طريقتان رئيسيتان لتوزيع الإضافات: إما من خلال دليل الإضافات الرسمي لووردبريس، أو عن طريق توفير رابط التحميل مباشرة على موقعك الخاص. إذا كنت ترغب في أن يتم تثبيت الإضافة بنقرة واحدة في واجهة المستخدم الخلفية وأن تتلقى التحديثات التلقائية، فيجب أن تقوم بتقديم الإضافة إلى الدليل الرسمي. يتطلب ذلك أن يتبع كود الإضافة رخصة GPLv2 (أو إصدار أعلى)، وأن تخضع لمراجعات صارمة
بعد الإرسال، سيقوم WordPress بقراءة كود الإضافة الخاصة بك من مستودعه الرسمي لـ Subversion (SVN). يجب عليك تحديث رقم الإصدار (“Version”) الموجود في تعليقات بداية الملف الرئيسي في مستودع SVN، وكذلك إرسال علامة (Tag) جديدة تحتوي على رقم الإصدار، لتفعيل إشعار التحديث.
بالنسبة للإضافات التجارية، عادةً ما يتم إنشاء خدمة تحديث على الخادم الخاص بها. وهذا يتطلب كتابة أداة لفحص التحديثات، باستخدام آليات معينة (مثل الـ “hooks”) لتنفيذ عمليات التحديث تلقائيًا pre_set_site_transient_update_pluginsيتم دمج هذا النظام مع نظام التحديثات الخاص بووردبريس (WordPress)، حيث يقوم بمقارنة معلومات الإصدارات الموجودة على الخوادم البعيدة وتوفير حزم التحديثات اللازمة.
كيف يمكن تجنب تعارض أسماء الفئات (classes) والدوال (functions) الموجودة في الإضافات (plugins) مع إضافات أخرى؟
تجنب حدوث تعارض في الأسماء أمر أساسي عند تطوير الإضافات المهنية. أفضل الممارسات هي استخدام البادئات (prefixes). قم باستخدام بادئة فريدة ووصفية لجميع الفئات (classes)، الدوال (functions)، الثوابت (constants)، وحتى المتغيرات العامة (global variables) الخاصة بإضافتك (مع الحرص على تجنب استخدام المتغيرات العامة قدر الإمكان). يمكن أن تكون هذه البادئة اختصارًا لاسم شركتك
على سبيل المثال، إذا كان اسم الإضافة الخاصة بك “Awesome Gallery”, فيمكن أن يكون البادئة المستخدمة أمام الدوال (“prefix”) كالتالي: ag_ أو awesome_gallery_يمكن أن تكون أسماء الفئات (classes) كما يلي: AG_Core أو Awesome_Gallery_Admin。
الطريقة الأفضل هي تغليف الكود داخل فئة (class)، بحيث تكون معظم الدوال موجودة على شكل طرق (methods) داخل تلك الفئة. $this->method()وبذلك، يتم تجنب تلوث المساحة الاسمية العامة (global namespace). بالنسبة للدوال التي يجب تعريفها في المساحة العامة، يجب استخدام بادئات طويلة وفريدة من نوعها بالتأكيد.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- دليل تطوير إضافات ووردبريس: كيف تبني إضافتك المخصصة الأولى من الصفر
- كيف تصبح مطورًا لإضافات ووردبريس: دليل شامل من الصفر إلى النهاية
- دليل شامل لتطوير إضافات ووردبريس: من المبتدئين إلى الخبراء في إنشاء إضافات متخصصة
- تطوير الإضافات في ووردبريس: من الأساسيات إلى الاحترافية - إنشاء أول إضافة مخصصة لك.
- من الصفر إلى الواحد: دليل شامل لتطوير أول إضافة (Plugin) لموقع ووردبريس (WordPress) الخاص بك خطوة بخطوة