دليل تعليمي لبدء تطوير الإضافات في ووردبريس.
إن إضافات ووردبريس (WordPress Plugins) تمثل الآلية الأساسية لتوسيع الميزات الأساسية لنظام ووردبريس. فهي تتيح للمطورين إضافة ميزات جديدة إلى الموقع أو تعديل السلوكيات الحالية دون الحاجة إلى تعديل الكود الأساسي لووردبريس نفسه. سواء كانت الميزات بسيطة مثل استخدام الأكواد المختصرة (shortcodes) أو أنظمة تجارية معقدة، يمكن تحقيقها جميعًا من خلال الإضافات. فهم كيفية عمل الإضافات يعتبر الخطوة الأولى الضرورية لأي مطور ووردبريس.
إن إضافة (Plugin) لووردبريس (WordPress)، في جوهرها، عبارة عن ملف أو أكثر من ملفات بلغة PHP تحتوي على كود يتبع معايير ترميز ووردبريس. يتم وضع هذه الملفات في دليل (Directory) محدد داخل نظام ووردبريس، وتتفاعل مع الجزء الأساسي (Core) من النظام من خلال واجهة برمجة التطبيقات الخاصة بالإضافات (Plugin API). يتطلب تطوير إضافات لووردبريس ليس فقط معرفة بلغة PHP، ولكن أيضًا إلمامًا بمكتبة الدوال الضخمة المتاحة في ووردبريس، ونظام الخطافات (Hooks)، بالإضافة إلى طرق التعامل مع قواعد البيانات.
قم بإنشاء ملف الإضافة (plugin) الخاص بك الأول.
كل إضافة (plugin) لبرنامج ووردبريس (WordPress) تحتاج إلى ملف رئيسي، وهذا الملف يمثل نقطة الدخول إلى الإضافة. يحتوي هذا الملف على معلومات فوقية (metadata) عن الإضافة، بالإضافة إلى المسؤولية عن تهيئة (تشغيل) الوظائ
القراءة الموصى بها دليل كامل لتطوير الإضافات في ووردبريس: من الصفر إلى النشر على المتجر.。
هيكل الملف الرئيسي للإضافة (Plugin Main File)
جوهر الإضافة (البرنامج الإضافي) هو الملف الرئيسي، والذي عادةً ما يحمل اسم الإضافة نفسها. على سبيل المثال: my-first-plugin.phpالتعليقات الموجودة في بداية هذا الملف ذات أهمية قصوى، حيث توفر معلومات هوية الإضافة لنظام ووردبريس (WordPress). التعليقات الأساسية الخاصة بملف الإضافة الأساسي تبدو كما يلي:
<?php
/**
* Plugin Name: 我的第一个插件
* Plugin URI: https://example.com/my-first-plugin
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://example.com
* License: GPL v2 or later
* Text Domain: my-first-plugin
*/ الحقل “اسم الإضافة” (Plugin Name) إلزامي في هذه التعليقات؛ فقد يعتمد ووردبريس عليه لتحديد وعرض إضافتك في واجهة الإدارة الخلفية. أما المعلومات الأخرى مثل رقم الإصدار والوصف فهي تساعد المستخدمين على فهم تفاصيل الإضافة بشكل أفضل.
بعد تحديد معلومات الإضافة (البرنامج الإضافي)، عادةً ما نبدأ في إضافة كود الوظائف المطلوبة. على سبيل المثال، أبسط وظيفة يمكن تنفيذها هي إضافة سطر نصي مخصص في أسفل الموقع الإلكتروني. ويم wp_footer يتم تنفيذ ذلك باستخدام "خطاف الإجراء" (Action Hook).
تنفيذ دالة وظيفية بسيطة
فيما يلي مثال كامل على ملف رئيسي لإضافة إضافة (plugin)، وهو يقوم بتنفيذ وظيفة إضافة نص في أسفل الصفحة:
<?php
/**
* Plugin Name: 页脚问候插件
*/
// 防止直接访问文件
if ( ! defined( 'ABSPATH' ) ) {
exit;
}
/**
* 在网站页脚输出一条自定义问候语
*/
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">شكرًا لزيارتكم لهذا الموقع!</p>';
}
// 将函数挂载到`wp_footer`钩子上
add_action( 'wp_footer', 'myplugin_add_footer_text' ); في هذا الكود،myplugin_add_footer_text هذه الدالة معرفة من قبلنا، وهي مسؤولة عن تنفيذ عمليات الإخراج المحددة.add_action() إنها دالة من ووردبريس (WordPress)، وتقوم بـ “توصيل” (hooking) دوالنا الخاصة بالوظائف بنواة ووردبريس الأساسية. wp_footer في نقطة التنفيذ هذه، كلما قام ووردبريس بتنفيذ جزء القائمة السفلية (الفوتر)، سيتم استدعاء دالتنا تلقائيًا.
القراءة الموصى بها من المبتدئ إلى الخبير: دليل كامل لتطوير الإضافات في ووردبريس مع دروس عملية.。
فهم آلية الخطافات (Hooks) في ووردبريس (WordPress)
الخطافات (Hooks) هي جوهر وروح تطوير إضافات ووردبريس (WordPress plugins)، حيث توفر القدرة على تعديل أو توسيع الوظائف الأساسية لووردبريس. تنقسم الخطافات إلى نوعين رئيسيين: خطافات الإجراءات (Action Hooks) وخطافات المرشحات (Filter Hooks).
تطبيق مُعلقات الحركة.
تسمح خيوط الأعمال (Action Hooks) بتنفيذ كود مخصص في أوقات محددة أو عند حدوث أحداث معينة. على سبيل المثال، عند نشر مقالة…publish_post)، أو عندما يقوم المستخدم بتسجيل الدخول (wp_loginاستخدمه. add_action() يمكن للدالة أن تربط دالتك الاستدعائية (callback function) بخيط عمل معين (action hook).
توضح الأمثلة أدناه كيفية إضافة إعلان حقوق النشر تلقائيًا بعد محتوى المقال:
function myplugin_add_post_copyright( $content ) {
if ( is_single() ) {
$copyright = '<div class="post-copyright"><p>هذا المقال محتوى أصلي؛ يرجى ذكر المصدر عند إعادة نشره.</p></div>';
$content .= $copyright;
}
return $content;
}
add_filter( 'the_content', 'myplugin_add_post_copyright' ); ملاحظة: لقد استخدمنا هنا… add_filter() بدلاً من ذلك add_action()لأن تعديل محتوى المقال يعتبر نوعًا من “التصفية” (أي إزالة بعض العناصر أو المعلومات من المقال). وهذا يثير مسألة مهمة أخرى.
وظيفة خطافات المرشحات (Filter Hooks)
تسمح خيوط المرشحات (filter hooks) بتعديل البيانات التي يتم تمريرها أثناء التنفيذ. الفرق الأكبر بينها وبين خيوط الإجراءات (action hooks) هو أن دوال المرشحات يجب أن تعيد قيمة ما (عادةً ما تكون القيمة المعدلة). على سبيل المثالthe_content تسمح لك أداة التصفية بتعديل محتوى المقال الذي سيتم عرضه لاحقًا., the_title يُسمح لك بتعديل عنوان المقال.
توضح الأمثلة أدناه كيفية استخدام المرشحات (filters) لتعديل طول مقتطفات المقالات:
القراءة الموصى بها دليل للبدء في تطوير إضافات ووردبريس: كيفية بناء أول إضافة مخصصة الخاصة بك من الصفر。
function myplugin_custom_excerpt_length( $length ) {
// 将默认的55个词改为20个词
return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' ); في هذا المثال، دالتنا… myplugin_custom_excerpt_length تم استلام القيمة الافتراضية لطول المقتطف، وتم إرجاع قيمة جديدة مخصصة من قبلنا. سيقوم ووردبريس لاحقًا باستخدام هذه القيمة الجديدة لإنشاء المقتطفات.
تدويل الإضافات (Plugins) وحقول النصوص (Text Fields)
لكي يتمكن مستخدمو العالم أجمع من استخدام إضافتك، فإن عملية التدويل (i18n) خطوة ضرورية للغاية. يوفر ووردبريس مجموعة كاملة من الدوال لتنفيذ ترجمة الإضافات إلى لغات متعددة.
حقل نصوص تحميل الإضافات (Plugin Text Field)
الخطوة الأولى نحو التدويل هي ضبط حقول النصوص (Text Fields) بشكل صحيح داخل الإضافة (Plugin)، وتحميل ملفات الترجمة في الوقت المناسب. يجب أن يتطابق حقل النصوص تمامًا مع “حقل النصوص” (Text Domain) المحدد في تعليقات بداية ملف الإضافة الرئيسي.
عادةً ما نستخدم هذا الأمر عند تهيئة المكونات الإضافية (البرامج الإضافية). load_plugin_textdomain دالة لتحميل الترجمات. الممارسة القياسية هي وضع الكود التالي في الملف الرئيسي:
function myplugin_load_textdomain() {
load_plugin_textdomain( 'my-first-plugin', false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
}
add_action( 'plugins_loaded', 'myplugin_load_textdomain' ); هذا القطعة من الكود تحدد دالة (function). myplugin_load_textdomainواستخدم أيضًا… add_action قم بتثبيته (أو توصيله) هناك. plugins_loaded موجود على الخطاف. هذا يضمن تحميل ملفات الترجمة قبل تنفيذ كود وظائف الإضافة. الوسيط الثالث يحدد مسار ملفات اللغة (ملفات بامتداد .mo)، وعادة ما تكون موجودة في دليل الإضافة. languages موجود في المجلد.
استخدم دالة الترجمة لتغليف السلسلة النصية.
في كود الإضافات (plugins), يجب أن تُغلف جميع النصوص الموجهة للمستخدمين التي تحتاج إلى ترجمة باستخدام دوال معينة. أكثر هذه الدوال استخدامًا هما: __() و _e()。
__() تعيد الدالة السلسلة النصية المترجمة، و… _e() تقوم الدالة ببساطة بعرض النتيجة مباشرةً (عن طريق استخدام الأمر `echo`). في المثال السابق الذي تم فيه إضافة نص القائمة السفلية، كان يجب أن نكتب الكود بطريقة تدعم عملية الترجمة.
function myplugin_add_footer_text() {
$text = __( '感谢您访问本网站!', 'my-first-plugin' );
echo '<p style="text-align:center;">'`. esc_html($text)`.'</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); هنا، تم استخدام السلسلة النصية “شكرًا لزيارتكم لهذا الموقع!” __() تم تغليف الدالة، وتم تحديد مجال النص (text field). my-first-pluginيمكن لمترجمين محترفين إنشاء ملفات ترجمة بلغات مختلفة لهذا النص. في الوقت نفسه، نستخدم… esc_html() تقوم الدوال بتهريب (escaping) النتائج المُنتجة، وهذه ممارسة أمنية مهمة للغاية.
أمان الإضافات وأفضل الممارسات
يجب أن يتم تطوير إضافة (plugin) شائعة الاستخدام بحيث تكون الأمان وجودة الكود مهمين بنفس القدر الذي تكون عليه الوظائف نفسها. اتباع أفضل الممارسات يمكن أن يحمي مواقع المستخدمين، ويعزز من مو
التحقق من صحة البيانات، تهريب القيم (escaping values)، وتنظيف البيانات (data cleaning)
لا تثق أبدًا بالبيانات القادمة من المستخدمين أو المصادر الخارجية. قبل معالجة أي بيانات مدخلة (مثل $_GET، $_POST، $_COOKIE) أو إرسال بيانات إلى المتصفح أو قاعدة البيانات، يجب إجراء فحوصات مناسبة عليها.
بالنسبة للبيانات المُعرضة على صفحات HTML، يجب استخدام دوال التهجئة (escaping functions) المتوفرة في ووردبريس (WordPress) لضمان عرضها بشكل صحيح ودون أي مشاكل. esc_html(), esc_attr(), esc_url()بالنسبة للبيانات التي سيتم تخزينها قريبًا في قاعدة البيانات، يجب استخدام… wp_strip_all_tags() أو sanitize_text_field() يتم إجراء عملية تنظيف. يوضح المثال التالي طريقة آمنة لمعالجة مدخلات النموذج:
// 假设我们接收一个名为`user_bio`的POST字段
$raw_bio = $_POST['user_bio'] ?? ''; // 使用空合并运算符提供默认值
// 清理数据:移除标签,清理额外空格和特殊字符
$clean_bio = sanitize_textarea_field( $raw_bio );
// 在存入数据库前,还可以使用`wp_kses_post`允许安全的HTML标签
$safe_bio_for_db = wp_kses_post( $clean_bio );
// 现在$safe_bio_for_db可以安全地存入数据库了 استخدام طرق غير مرتبطة ببروتوكول CE (Common Edge) وعمليات التحقق من الصلاحيات
إذا كان لدى الإضافة الخاصة بك واجهة إدارة أو كانت تتعامل مع إرسال النماذج، فيجب استخدام آلية “nonce” (رقم يتم استخدامه مرة واحدة) الخاصة بووردبريس لمنع هجمات تزوير الطلبات بين المواقع (CSRF). بالإضافة إلى ذلك، يجب استخدام عمليات التحقق من الصلاحيات (Capability Checks) للتأكد من أن المستخدم الحالي لديه الصلاحيات اللازمة لتنفيذ العملية المطلوبة.
عند إنشاء قائمة إدارية أو نموذج، قم بإنشاء حقل غير من نوع “CE” (Non-CE field).
// 在表单中输出一个非ce字段
wp_nonce_field( 'myplugin_save_action', 'myplugin_nonce_field' ); عند معالجة إرسال النموذج، يجب التحقق من أن القيمة المقدمة لا تحتوي على كلمة “ce”.
// 验证非ce
if ( ! isset( $_POST['myplugin_nonce_field'] ) || ! wp_verify_nonce( $_POST['myplugin_nonce_field'], 'myplugin_save_action' ) ) {
wp_die( __( '安全校验失败,操作已终止。', 'my-first-plugin' ) );
}
// 检查用户权限(例如,检查是否有`manage_options`权限)
if ( ! current_user_can( 'manage_options' ) ) {
wp_die( __( '您没有执行此操作的权限。', 'my-first-plugin' ) );
}
// 通过所有安全检查,开始处理数据... اتباع هذه المعايير الأمنية هو الأساس الذي يبني عليه إنشاء إضافة (plugin) موثوقة.
الملخصات
تطوير إضافات ووردبريس (WordPress plugins) هو عملية تحويل الأفكار إلى وظائف عملية، ويعتمد ذلك على فهم عميق للبنية الأساسية لنظام ووردبريس. يبدأ المطورون هذه العملية بإنشاء ملف رئيسي يحتوي على التعليقات الرأسية (header comments) الصحيحة. من المهم جدًا إتقان الفرق بين مخالب الأفعال (action hooks) ومخالب المرشحات (filter hooks) وكيفية استخدامها لتوسيع وظائف الإضافة. كما أن تدويل الإضافات (plugin localization) يسمح لها بخدمة مستخدمين من جميع أنحاء العالم. أما الممارسات الأمنية المتبعة طوال عملية التطوير، مثل التحقق من البيانات، ومعالجتها بشكل صحيح، وتنظيف البيانات، بالإضافة إلى التحقق من صلاحيات المستخدمين، فهي الأساس الذي يضمن استقرار وموثوقية الإضافة ويكسب ثقة المستخدمين. باتباع هذه الخطوات وأفضل الممارسات، ستتمكن من إنشاء إضافات ووردبريس قوية وآمنة وسهلة الصيانة.
الأسئلة الشائعة الأسئلة المتداولة
ما هي الحد الأدنى لعدد الملفات المطلوبة لإضافة (plugin) في ووردبريس (WordPress)؟
يمكن أن يتكون أبسط إضافة (Plugin) لبرنامج ووردبريس (WordPress) من ملف واحد فقط مكتوب بلغة PHP. يجب أن يحتوي هذا الملف على تعليقات في بدايته تتوافق مع المعايير المحددة للإضافات (مثل اسم الإضافة، ومعلومات أخرى ضرورية)، بالإضافة إلى الكود الذي يقوم بتنفيذ وظائف الإضافة. مع تعقيد وظائف الإضافة، عادةً ما يتم تقسيمها إلى عدة ملفات، تشمل ملفات CSS وJavaScript وصور، بالإضافة إلى ملفات لترجمة النصوص إلى لغات مختلفة.
هل يجب أن أكتب كود الإضافة مباشرةً داخل ملف functions.php الخاص بالقالب (theme)?
بالنسبة للكود الذي يتعلق بشكل مباشر بالموضوع الحالي فقط وله وظائف مرتبطة ارتباطًا وثيقًا، فيمكن كتابته ضمن نطاق ذلك الموضوع نفسه.functions.phpنعم. ولكن، بالنسبة للميزات التي تتمتع بالعمومية والتي يمكن استخدامها في مواضيع مختلفة، ننصح بشدة بتطويرها كإضافات (plugins) مستقلة. فالفائدة من الإضافات أنها مستقلة عن الموضوعات المحددة، لذا لن تفقد عند تغيير الموضوع، كما أنها تسهل عمليات الإدارة والت
كيف يمكنني إنشاء صفحة لإدارة الإعدادات للإضافة (البرنامج الإضافي) الخاصة بي؟
يمكنك استخدام الدوال المتاحة في ووردبريس لإضافة قوائم الإدارة والصفحات. أكثر هذه الدوال شيوعًا هي… add_menu_page() أو add_options_page() يجب عليك إنشاء دالة تعاقدية (callback function) لعرض محتوى HTML للصفحة ومعالجة عمليات إرسال النماذج (form submissions)، بما في ذلك التحقق من صحة البيانات (non-CE validation) وفحوصات الصلاحيات (permission checks). عادةً ما يتطلب هذا الأمر استخدام واجهة برمجة التطبيقات الخاصة بإعدادات ووردبريس (WordPress Settings API)، والتي تساعدك على إنشاء وإدارة خيارات الإعدادات بطريقة أكثر تنظيمًا وأمانًا.
عند تطوير إضافات (plugins)، كيف يمكن تصحيح الأخطاء (debugging) وتسجيلها؟
أولاً، تأكد من أن كل شيء جاهز في بيئة التطوير…wp-config.phpتفعيل خاصية WP_DEBUG في الملف:define( 'WP_DEBUG', true );سيتم عرض أخطاء PHP وتحذيراتها على الصفحة. بالنسبة لعمليات التصحيح الأكثر تعقيدًا، يمكن استخدام…error_log()تقوم الدالة بتسجيل المعلومات في سجل الأخطاء الخاص بالخادم، أو باستخدام أدوات ووردبريس (WordPress) لذلك.wp_debugالدوال ذات الصلة… بالإضافة إلى ذلك، هناك العديد من إضافات التصحيح (debugging plugins) الممتازة من جهات خارجية، مثل Query Monitor، والتي يمكن أن تساعدك في تحليل استعلامات قواعد البيانات والأكواد المختلفة (مثل الهوكات والسكريبتات)، وتعتبر أدوات قوية ل
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- كيفية اختيار وتخصيص تصميم ووردبريس المثالي الذي يناسب احتياجاتك؟
- دليل تطوير إضافات ووردبريس: كيف تبني إضافتك المخصصة الأولى من الصفر
- كيف تصبح مطورًا لإضافات ووردبريس: دليل شامل من الصفر إلى النهاية
- من الصفر إلى الواحد: دليل شامل وخطوات عملية لبناء مواقع إلكترونية مهنية باستخدام WordPress
- البدء من الصفر: العملية الكاملة لتطوير مواقع ووردبريس الحديثة وأفضل الممارسات