الاستعدادات وإعداد البيئة.
قبل البدء في كتابة الكود، تحتاج إلى بيئة تطوير مناسبة. تشمل هذه البيئة تثبيتًا محليًا لبرنامج ووردبريس (WordPress)، محرر كود، بالإضافة إلى معرفة أساسية بلغة PHP. يُنصح باستخدام أدوات مثل XAMPP أو MAMP أو Local by Flywheel لإنشاء بيئة ووردبريس محلية بسرعة. تأكد من أن إصدار PHP الخاص بك يتوافق مع متطلبات ووردبريس الرسمية، وعادةً ما يكون PHP 7.4 أو إصدار أحدث.
في الأساس، الإضافة (plugin) عبارة عن ملف أو ملفات PHP توضع داخل نظام ووردبريس (WordPress).wp-content/pluginsالملفات موجودة في الدليل. يجب أن يحمل كل إضافة (plugin) اسمًا فريدًا، ويجب أن تتضمن رأس ملفه الرئيسي تعليقات تحتوي على معلومات قياسية عن الإضافة؛ هذه المعلومات هي الأساس الذي يعتمد عليه ووردبر
قم بإنشاء ملف الإضافة (plugin) الخاص بك الأول.
أولاً، في…wp-content/pluginsقم بإنشاء مجلد جديد داخل المجلد الحالي، على سبيل المثال:my-first-pluginثم قم بإنشاء الملف الرئيسي للغة PHP داخل هذا المجلد، وعادة ما يكون اسم هذا الملف مطابقًا لاسم المجلد نفسه.my-first-plugin.phpفي هذا الملف، يجب عليك كتابة معلومات رأس الإضافة (plugin header information).
القراءة الموصى بها دليل كامل لتطوير الإضافات في ووردبريس: بناء أول إضافة لك من الصفر إلى واحد.。
<?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
*/ بعد حفظ الملف، ادخل إلى صفحة “الإضافات” (Plugins) في واجهة ووردبريس الخلفية، ويجب أن ترى إضافتك “My First Plugin” مدرجة في قائمة الإضافات. قم بتفعيلها الآن؛ على الرغم من أنها لا تحتوي على أي وظائف بعد، إلا أن هذا يعني أن إضافتك قد تم تحميلها بنجاح في ووردبريس.
فهم آليات قلب نظام ووردبريس (WordPress): الخطافات (Hooks) والمرشحات (Filters)
تعود القدرة الكبيرة على التوسعة في ووردبريس إلى بنيتها المبنية على الأحداث (event-driven architecture)، والتي تعتمد بشكل أساسي على ما يُعرف بـ “الخطافات” (Hooks). تنقسم الخطافات إلى نوعين: الإجراءات (Actions) والمرشحات (Filters). فهم هذين النوعين من الخطافات أمر أساسي لتطوير الإضافات (plugins) بشكل فعال.
تسمح خطافات الأعمال (Action Hooks) بإدخال وتنفيذ الكود الخاص بك في نقاط زمنية محددة، مثل عند نشر مقال أو تحميل صفحة ويب. على سبيل المثال، يمكنك إرسال بريد إلكتروني عند نشر مقال ما. يمكنك استخدام هadd_action()تقوم الدالة بتثبيت الدالة المخصصة الخاصة بك على الخطاف (hook) المحدد للإجراء (action).
تسمح خيوط الفلاتر (filter hooks) بتعديل البيانات. قبل أن تُستخدم البيانات (مثل حفظها في قاعدة البيانات أو عرضها في المتصفح)، يمكنك اعتراضها وتعديلها. على سبيل المثال، يمكنك تعديل عنوان المقالة أو محتوى التعليقات. يمكنك استخدام هذهadd_filter()دالة لتطبيق عامل التصفية.
استخدم خطافات الحركة لإضافة وظائف.
لنفترض أننا نريد إضافة سطر نصي مخصص في أسفل صفحة الإدارة الخاصة بموقعنا الإلكتروني. يوفر ووردبريس أداة تسمى…admin_footerمكونات الاستجابة للأحداث (Event Response Hooks). يمكننا إضافة الكود التالي إلى الملف الرئيسي للإضافة (Plugin Main File):
القراءة الموصى بها دليل للمبتدئين في تطوير الإضافات في ووردبريس: بناء أول إضافة وظيفية لديك من الصفر.。
// 定义一个在管理后台页脚显示信息的函数
function myplugin_display_admin_footer_text() {
echo '<p>شكرًا لاستخدامك “أول إضافة لي”!</p>';
}
// 将函数挂载到 admin_footer 动作钩子
add_action( 'admin_footer', 'myplugin_display_admin_footer_text' ); قم بحفظ الملف ثم قم بتحديث صفحة ووردبريس الخلفية (الواجهة الإدارية). انزلق إلى أسفل الصفحة (إلى القسم السفلي من الصفحة)، ويجب أن تتمكن من رؤية النص الذي تم إضافته. هذا هو التطبيق الأساسي لـ “مخالب ال
استخدم المرشحات لتعديل المحتوى.
الآن، دعونا نحاول تعديل عناوين جميع المقالات وإضافة رمز العلامة التجارية في نهاية كل عنوان بشكل موحد. يمكننا استخدام…the_titleمرشحات.
// 定义一个修改文章标题的函数
function myplugin_modify_post_title( $title, $post_id ) {
// 确保只在主循环且非管理后台中修改
if ( ! is_admin() && in_the_loop() ) {
$title = $title . ' ™';
}
return $title;
}
// 将函数挂载到 the_title 过滤器钩子,参数2表示接受2个参数
add_filter( 'the_title', 'myplugin_modify_post_title', 10, 2 ); سيقوم هذا الكود بفحص ما إذا كانت البيئة الحالية ضمن الدورة الرئيسية لعرض المقالات في واجهة المستخدم الأمامية (frontend) أم لا؛ وإذا كان الأمر كذلك، فسيتم إضافة رمز “™” بعد العنوان.10إنها تمثل ترتيب الأولويات (كلما كان الرقم أصغر، كان التنفيذ أسرع).2يعني ذلك أن الدالة التي لدينا تقبل معلمتين كوسائط (البيانات الأصلية).$titleو$post_id)。
بناء وظائف الإضافات: إنشاء قائمة إدارة وصفحة إعدادات
عادةً ما يحتاج الإضافة (البرامج الإضافية) الناضجة إلى توفير خيارات تكوين في واجهة ووردبريس الخلفية (الواجهة الإدارية). وهذا يتطلب إنشاء صفحة قائمة إدارية خاصة بالإضافة. توفر ووردبريس مجموعة واسعة من دوال واجهة برمجة التطبيقات (API) لتحقيق هذه الوظيفةadd_menu_page()وadd_options_page()。
إضافة قائمة إدارة عليا
سنقوم بإضافة قائمة رئيسية مستقلة للإضافة (plugin). هذا يتم عادةً…admin_menuتم إكمال العملية داخل خطافات الأوامر (action hooks). سنقوم بإنشاء دالة لتعريف القوائم (menus) والصفحات (pages).
// 定义添加管理菜单的函数
function myplugin_add_admin_menu() {
add_menu_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限(管理员)
'myplugin-settings-page', // 菜单slug(唯一标识)
'myplugin_display_settings_page', // 用于显示页面内容的回调函数
'dashicons-admin-generic', // 菜单图标(Dashicons)
30 // 菜单位置
);
}
// 将函数挂载到 admin_menu 钩子
add_action( ‘admin_menu’, ‘myplugin_add_admin_menu’ ); بعد ذلك، نحتاج إلى تعريف دالة الاستدعاء العكسي (callback function).myplugin_display_settings_page()لعرض محتوى HTML الخاص بصفحة الإعدادات.
القراءة الموصى بها تطوير إضافات ووردبريس: دليل شامل من المبتدئين إلى الخبراء لبناء وظائف مخصصة。
// 定义设置页面的显示内容
function myplugin_display_settings_page() {
?>
<div class="wrap">
<h1>إعدادات الإضافة الخاصة بي</h1>
<form method="post" action="/ar/options.php/" data-trp-original-action="options.php">
<?php
// 输出设置字段、安全nonce等
settings_fields( ‘myplugin_settings_group’ );
do_settings_sections( ‘myplugin-settings-page’ );
submit_button();
?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
أنا لا أعرف ماذا أقول. إعدادات التسجيل، الحقول، والتقسيمات (Registration settings, Fields, and Partitions)
لمعالجة بيانات النماذج بشكل آمن، نحتاج إلى استخدام واجهة برمجة التطبيقات (API) الخاصة بإعدادات ووردبريس (WordPress). وهذا يشمل تسجيل الإعدادات الجديدة، وإضافة أقسام وحقول إعدادات إضافية.
// 初始化插件设置
function myplugin_settings_init() {
// 1. 注册一个设置(存储在wp_options表中)
register_setting(
‘myplugin_settings_group’, // 设置组名,与 settings_fields() 对应
‘myplugin_options’ // 存储在数据库中的选项名
);
// 2. 添加一个设置分区
add_settings_section(
‘myplugin_section_basic’, // 分区ID
‘基础设置’, // 分区标题
‘myplugin_section_basic_callback’, // 分区介绍的回调函数
‘myplugin-settings-page’ // 所属页面的slug
);
// 3. 为分区添加一个字段
add_settings_field(
‘myplugin_field_message’, // 字段ID
‘欢迎信息’, // 字段标签
‘myplugin_field_message_callback’, // 渲染字段HTML的回调函数
‘myplugin-settings-page’, // 所属页面的slug
‘myplugin_section_basic’ // 所属分区的ID
);
}
add_action( ‘admin_init’, ‘myplugin_settings_init’ );
// 分区介绍的回调函数
function myplugin_section_basic_callback() {
echo ‘<p>تهيئة المعلومات الأساسية للإضافة (البرنامج الإضافي).</p>’;
}
// 字段渲染的回调函数
function myplugin_field_message_callback() {
// 从数据库获取现有值
$options = get_option( ‘myplugin_options’ );
$value = $options[‘message’] ?? ‘’; // PHP 7.0+ 空合并运算符
// 输出输入框
echo ‘<input type="“text”" name="“myplugin_options[message]”" value="“‘" . esc_attr( $value ) ‘” class ="“regular-text”" />‘;
} الآن، أصبح لدى الإضافة الخاصة بك صفحة إعدادات إدارية كاملة ومتوافقة مع معايير ووردبريس، مما يسمح بحفظ وقراءة خيارات التكوين بشكل آمن.
أفضل الممارسات لتدويل الإضافات وضمان أمانها
لكي يتمكن مستخدموك حول العالم من استخدام إضافتك، فإن الترجمة الدولية (i18n) خطوة ضرورية للغاية. في الوقت نفسه، اتباع المعايير الأمنية هو الأساس الذي يحميك ومواقع المستخدمين من الهجمات.
تحقيق تدويل النصوص (Text Internationalization)
استخدام ووردبريس (WordPress)__()、_e()يتم استخدام دوال مثل هذه لتنفيذ عمليات الترجمة. أولاً، يجب التأكد من أن التكوينات اللازمة قد تم إعدادها بشكل صحيح في بداية ملف الإضافة (الplugin).Text Domain(مثل:my-first-pluginثم، قم بتغليف جميع النصوص الموجهة للمستخدمين باستخدام دالة الترجمة.
// 在插件代码中,将硬编码的文本替换
// 修改前:echo ‘<p>شكرًا لاستخدامك “أول إضافة لي”!</p>’;
// 修改后:
function myplugin_display_admin_footer_text() {
echo ‘<p>‘ . esc_html__( ‘感谢使用“我的第一个插件”!’, ‘my-first-plugin’ ) . ‘</p>’;
} بعد ذلك، ستحتاج إلى استخدام أداة مثل Poedit لإنشاء المحتوى المطلوب..potملف (قالب)، موجود داخل الإضافة (البرنامج الإضافي).languagesفي المجلد. يمكن للمترجم إنشاء المحتوى المطلوب بناءً على ذلك..poوالمُجمَع (المُترجم) بعد عملية التجميع (الترجمة)..moالملف. وأخيرًا، استخدم عند تهيئة المكون الإضافي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’ ); اتباع معايير الترميز الأمني (Security Coding Standards)
الأمان هو الأمر الأكثر أهمية. أولاً، لا تثق أبدًا بالبيانات التي يدخلها المستخدمون. جميع البيانات القادمة من المستخدمين أو المصادر الخارجية…$_GET, $_POST, $_COOKIEيجب أن يتم التحقق من صحة جميع البيانات، وتنظيفها، وتهيئتها بشكل مناسب (عن طريق استخدام علامات التهريب – escape characters) قبل استخدامها.
- عند إخراج البيانات إلى HTML أو JavaScript أو عناوين URL (URLs)، يجب استخدام الدوال المناسبة للتهريب (escaping functions).
// 输出到HTML属性
echo ‘<input value="“‘" . esc_attr( $value ) ‘“ />‘;
// 输出到HTML内容
echo ‘<p>‘ . esc_html($text) . ‘</p>’;
// 输出到JavaScript变量
echo ‘<script>var msg = “‘ . esc_js( $message ) . ‘“;</script>’;
// 输出到URL
echo ‘<a href="/ar/“‘/" . esc_url( $url ) ‘“>رابط</a>’; - التحقق من المدخلات: فحص ما إذا كانت البيانات تتوافق مع الصيغة المتوقعة (مثل ما إذا كانت عناوين بريد إلكتروني أو أرقام، وما إلى ذلك).
if ( ! filter_var( $email, FILTER_VALIDATE_EMAIL ) ) {
// 不是有效的邮箱地址
wp_die( ‘无效的邮箱格式。’ );
} - فحص الصلاحيات: قبل تنفيذ أي عملية إدارية، يتم التحقق من ما إذا كان لدى المستخدم الحالي الصلاحيات اللازمة للقيام بها.
if ( ! current_user_can( ‘manage_options’ ) ) {
wp_die( ‘你没有执行此操作的权限。’ );
} - التحقق من الـ Nonce: في العمليات التي تتطلب تغييرًا في الحالة (مثل إرسال النماذج أو طلبات AJAX)، يتم استخدام الـ Nonce (رقم عشوائي واحد يتم إنشاؤه لمرة واحدة) لمنع هجمات تزوير الطلبات عبر المواقع المختلفة (Cross-Site Request Forgery – CSRF
// 在表单中输出nonce字段
wp_nonce_field( ‘myplugin_action’, ‘myplugin_nonce’ );
// 在处理请求时验证nonce
if ( ! isset( $_POST[‘myplugin_nonce’] ) || ! wp_verify_nonce( $_POST[‘myplugin_nonce’], ‘myplugin_action’ ) ) {
wp_die( ‘安全校验失败。’ );
} الملخصات
من خلال هذا الدليل، أكملت العملية بأكملها: من إنشاء ملفات الإضافات الأساسية، إلى فهم واستخدام نظام الخطافات (hooks) الخاص بووردبريس الأساسي، وبناء واجهة الإدارة الخلفية، وصولاً إلى تطبيق ممارسات الأمان الأساسية. لقد اكتسبت المهارات الأساسية اللازمة لتطوير إضافات ووردبريس قوية ومنظمة وآمنة وموثوقة. جوهر تطوير الإضافات يكمن في استخدام خطافات الأفعال (actions) والمرشحات (filters) بشكل فعال لتوسيع وظائف ووردبريس، مع الحرص دائماً على أمان الموقع وسهولة الصيانة. في المرحلة التالية، يمكنك التجربة مع واجهات برمجة التطبيقات (APIs) الأكثر تعقيداً، مثل الجداول القاعدية المخصصة، والتفاعلات عبر AJAX، أو نقاط نهاية واجهات برمجة التطبيقات الخاصة بـ REST، لبناء أدوات أقوى.
الأسئلة الشائعة الأسئلة المتداولة
ما هي المعرفة المسبقة المطلوبة لتطوير إضافة (Plugin) لمنصة ووردبريس (WordPress) باستخدام الكود ###؟
يجب أن تمتلك معرفة أساسية بلغة البرمجة PHP، كما أن فهم مفاهيم HTML وCSS وJavaScript (وخاصة jQuery) سيكون مفيدًا للغاية. الأهم من ذلك، أن تكون لديك فكرة أولية عن البنية الأساسية لبرنامج WordPress، مثل القوالب (Themes)، والإضافات (Plugins)، وأنواع المقالات (Article Types)، وأدوار المستخدمين (User Roles)، وغيرها. يفترض هذا الدليل أنك تمتلك هذه المعرفة الأساسية بالفعل.
كيف أقوم بتصحيح أخطاء (التصحيح) في إضافة (Plugin) ووردبريس الخاصة بي؟
أولاً، تأكد من أن…wp-config.phpفي هذا الملف،WP_DEBUGتم تعيين الثابت على قيمةtrueسيتم عرض أخطاء PHP وتحذيراتها وإشعاراتها على الصفحة. بالإضافة إلى ذلك، يمكن استخدام…error_log()تقوم الدالة بكتابة معلومات التصحيح إلى سجل الأخطاء على الخادم. بالنسبة لعمليات التصحيح الأكثر تعقيدًا، يمكن النظر في استخدام إضافات تصحيح متخصصة، مثل Query Monitor، والتي تسمح بمراقبة تفاصيل مثل استعلامات قواعد البيانات، تنفيذ الروابط (hooks)، تحميل السكريبتات، وغيرها.
كيف يمكنني توزيع الإضافة (البرنامج الإضافي) التي طورتها؟
بالنسبة للاستخدام الشخصي أو المشاركة على نطاق ضيق، يمكنك ببساطة تحزيم الملفات في ملف ZIP. إذا كنت ترغب في نشرها علنًا، هناك طريقتان رئيسيتان: الأولى هي تقديمها إلى مجلد الإضافات الرسمي لووردبريس (WordPress.org)، وهو ما يتطلب اتباع إرشادات التقديم ومعايير الكود الخاصة بهم، لكن هذا يوفر أكبر قدر من الانتشار؛ أما الطريقة الثانية فهي توزيعها من خلال موقعك الخاص أو من خلال أسواق خارجية مثل CodeCanyon. قبل تقديم الإضافة إلى المجلد الرسمي، تأكد دائمًا من جودة الكود وأمانه.
كيف يمكنني إضافة أنواع مقالات مخصصة أو أنظمة تصنيف إلى الإضافة (plugin) الخاصة بي؟
يمكنك استخدامه.register_post_type()دالة لإنشاء نوع مقالة مخصص (CPT – Custom Post Type)، باستخدام…register_taxonomy()يمكن استخدام دوال لإنشاء أنظمة تصنيف مخصصة. من الأفضل إجراء هذه العمليات في…initيتم تنفيذ ذلك داخل خطافات الإجراءات (action hooks). يوجد في كتيب ووردبريس الرسمي (WordPress Codex) ودليل المطورين (Developer Handbook) شرح مفصل للمعاملات (parameters) المتعلقة بهاتين الدالتين، وهذه طريقة قوية لتوسيع إمكانيات نظام إدارة المحتوى الخاص بووردبريس.
كيف يمكن تجنب تعارض أسماء الدوال الموجودة في الإضافات (plugins) مع إضافات أخرى؟
لمنع حدوث تعارضات في أسماء الدوال أو الكلاسات أو الثوابت، فإن أفضل ممارسة هي استخدام المساحات الاسمية (namespaces) في PHP 5.3 وما بعدها. إذا كانت الإضافة (plugin) الخاصة بك تحتاج إلى دعم بيئات PHP أقدم، أو كنت ترغب في الحفاظ على أقصى قدر من التوافق، فيمكنك استخدام طريقة إضافة بادئة فريدة لجميع المعرفات (identifiers). على سبيل المثال، يمكنك استخدام اسم الإضافة أو اختصاره كبادئة.myplugin_function_name、MyPlugin_ClassNameأوMYPLUGIN_CONSTANTالأمثلة البرمجية الموجودة في هذا الدليل تستخدم جميعها طريقة التسمية بالبادئات (prefixing method).
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- دليل شامل لتكوين واستخدام إضافات WooCommerce: إنشاء موقع تجاري إلكتروني من الصفر
- مقدمة: لماذا اختيار استخدام ووردبريس (WordPress) للتطوير؟
- لماذا تم اختيار WooCommerce كحل لمتجرك الإلكتروني؟
- دليل شامل لـ WooCommerce: بناء متجرك الإلكتروني واستراتيجيات المبيعات الخاصة بك من الصفر
- إتقان تطوير مواضيع ووردبريس: دليل كامل لبناء مواقع إلكترونية محترفة من الصفر.