الهيكل الأساسي وملفات إضافات ووردبريس (WordPress Plugins)
يحتاج أي إضافة (plugin) قياسية لـ WordPress إلى ملف رئيسي واحد على الأقل. عادةً ما يتم تسمية هذا الملف باسم الإضافة نفسها، مثلاً… my-first-plugin.phpفي بداية هذا الملف، يجب أن يتم تضمين تعليق رأس ملف محدد لإعلان معلومات الوصفة الخاصة بالإضافة لنظام ووردبريس. تشمل هذه المعلومات اسم الإضافة، والوصف، والإصدار، والمؤلف، وغيرها، وسيتم عرضها في صفحة إدارة الإضافات في الواجهة الخلفية.
بالإضافة إلى الملف الرئيسي، يحتوي الإضافة (plugin) الشاملة من الناحية الوظيفية عادةً على مجلدات وملفات أخرى لتنظيم الكود. تشمل الهياكل المجلدية الشائعة تلك المخصصة لتخزين ملفات CSS وJavaScript./assetsالدليل، الذي يحتوي على ملفات الكلاسات في PHP/includesالفهرس، بالإضافة إلى القوالب المستخدمة في واجهات المستخدم./templatesالفهرس: تساعد هذه البنية المعيارية (المعتمدة على الوحدات المستقلة) في صيانة الكود وتعزيز التعاون بين أعضاء الفريق.
الملف الرئيسي للإضافة (plugin) يمثل نقطة الدخول الرئيسية لجميع وظائف الإضافة. بالإضافة إلى تحديد المعلومات الوصفية (metadata)، فإن مسؤولياته الرئيسية تشمل تسجيل وتفعيل أو تعطيل الأحداث المرتبطة بالإضافة (hooks)، واستيراد الملفات المطلوبة، بالإضافة إلى تهيئة الوظائف الأساسية للإضافة. من خلال تنظيم الملفات بشكل مناسب، يمكن ضمان أن تظل الإ
القراءة الموصى بها دليل تعليمي لبدء تطوير الإضافات في ووردبريس.。
قم بإنشاء أول إضافة (plugin) أساسية الخاصة بك.
دعونا نبدأ بإنشاء أبسط إضافة (“Plugin”) من نوع “Hello World”، لنتعرف على خطوات إنشاء الإضافات ودورة حياتها الأساسية.
تعريف معلومات الإضافة (Plugin Information) والدالة الرئيسية (Main Function)
أولاً، في دليل تثبيت WordPress الخاص بك على الجهاز المحلي…/wp-content/plugins/في المسار المحدد، قم بإنشاء مجلد جديد باسم “hello-world”. ضمن هذا المجلد، قم بإنشاء ملف آخر باسم… (الاسم المطلوب للملف لم يتم تحديده في النص الأصلي).hello-world.phpملف.
في بداية هذا الملف، يجب عليك إضافة معلومات رأس الإضافة (plugin header). رأس الإضافة النموذجي يبدو كما يلي:
<?php
/**
* Plugin Name: 你好世界示例插件
* Plugin URI: https://yourwebsite.com/hello-world
* Description: 这是一个用于演示的简单WordPress插件。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://yourwebsite.com
* License: GPL v2 or later
* Text Domain: hello-world
* Domain Path: /languages
*/ بعد ذلك، سنضيف ميزة بسيطة لهذا الإضافة: وهي إضافة نص تلقائيًا في نهاية محتوى المقال. يمكننا تحقيق ذلك عن طريق…the_contentيتم تنفيذ ذلك باستخدام مرشحات (filters). أضف الكود التالي بعد معلومات الرأس في الملف الرئيسي:
function hello_world_add_footer_text( $content ) {
// 仅在单篇文章页面添加
if ( is_single() ) {
$footer_text = '<p><em>تم إنشاء هذا المقال بواسطة إضافة “Hello World”.</em></p>';
$content .= $footer_text;
}
return $content;
}
add_filter( 'the_content', 'hello_world_add_footer_text' ); التعامل مع تفعيل وتعطيل الإضافات (Plugins)
يجب على الإضافات المهنية التعامل بشكل مناسب مع المنطق المتعلق بتفعيلها وتعطيلها. على سبيل المثال، قد يتطلب تفعيل الإضافة إنشاء جداول في قاعدة البيانات أو تحديد خيارات افتراضية؛ أما عند تعطيلها، فقد يكون من الضروري تنظيف الregister_activation_hookوregister_deactivation_hookتُستخدم الدوال لتسجيل الخطافات (hooks) المقابلة.
القراءة الموصى بها تطوير إضافات ووردبريس من المبتدئ إلى الخبير: بناء وظائف مخصصة وتوسيعها بكفاءة.。
أضف الكود إلى الملف الرئيسي:
// 插件激活时执行的操作
function hello_world_activate() {
// 例如:添加一个选项到数据库
if ( ! get_option( 'hello_world_installed' ) ) {
add_option( 'hello_world_installed', time() );
}
// 可以在这里刷新固定链接规则,以确保新注册的URL结构生效
flush_rewrite_rules();
}
register_activation_hook( __FILE__, 'hello_world_activate' );
// 插件停用时执行的操作
function hello_world_deactivate() {
// 例如:删除我们创建的临时选项(谨慎操作,用户数据通常不删除)
// delete_option( 'hello_world_installed' );
// 清理重写规则
flush_rewrite_rules();
}
register_deactivation_hook( __FILE__, 'hello_world_deactivate' ); بعد إكمال الخطوات أعلاه، ستتمكن من رؤية وتفعيل “قالب مثال ”مرحباً بالعالم“” في صفحة “الإضافات” (Plugins) داخل واجهة ووردبريس الخلفية. بعد التفعيل، عند زيارة أي مقالة، ستلاحظ وجود النص المضاف في أسفل المحتوى.
استخدام واجهة برمجة التطبيقات (API) الأساسية لـ WordPress لتعزيز الوظائف
يوفر ووردبريس مجموعة واسعة جدًا من واجهات برمجة التطبيقات (APIs)، مما يتيح لمطوري الإضافات التفاعل بشكل آمن وموحد مع النظام الأساسي لووردبريس. إتقان هذه الواجهات أمر أساسي للقيام بعمليات التطو
استخدام خطافات الإجراءات (Action Hooks) والمرشحات (Filters)
تسمح “خطافات الإجراءات” (Action Hooks) بإدخال وتنفيذ الكود الخاص بك في نقاط زمنية محددة. على سبيل المثال، عند نشر مقال، يقوم ووردبريس (WordPress) بتشغيل هذه الخطافات.save_postإجراءات. يمكنك القيام بذلك من خلال…add_action()تقوم الدالة بتثبيت نفسها على هذا “الخطاف” (hook).
function hello_world_on_post_publish( $post_id, $post, $update ) {
// 检查是否不是修订版本,并且是发布操作
if ( wp_is_post_revision( $post_id ) || $post->post_status != 'publish' ) {
return;
}
// 发送邮件通知或执行其他逻辑
// wp_mail( '[email protected]', '新文章已发布', '文章标题:' . $post->post_title );
}
add_action( 'save_post', 'hello_world_on_post_publish', 10, 3 ); معلقات المرشحات (Filter Hooks) تسمح لك بتعديل البيانات. كما ذكر سابقًا…the_contentمثال على تطبيق للفلاتر هو تطبيق تصفية البيانات بناءً على معايير معينة. مثال آخر شائع هو تعديل عناوين المقالات.
function hello_world_modify_title( $title ) {
return '【推荐】' . $title;
}
// add_filter( 'the_title', 'hello_world_modify_title' ); // 谨慎使用,这会修改所有标题 إنشاء صفحة قائمة الإدارة وصفحات الخيارات
تحتاج العديد من الإضافات (البرامج الإضافية) إلى واجهة خلفية لتكوين الإعدادات. يوفر ووردبريس (WordPress) دوالًا تسمح بإضافة القوائم الرئيسية أو الفرعية بسهولة إلى واجهة الإدارة الخلفية.
القراءة الموصى بها إتقان تطوير إضافات ووردبريس: بناء وحدات وظيفية مخصصة فعالة من الصفر。
يوضح الكود أدناه كيفية إضافة صفحة خيارات بسيطة، واستخدام واجهة برمجة تطبيقات (API) إعدادات ووردبريس لحفظ خيار ما بشكل آمن.
// 步骤1:向管理后台添加一个菜单项
function hello_world_add_admin_menu() {
add_menu_page(
'你好世界设置', // 页面标题
'你好世界插件', // 菜单标题
'manage_options', // 所需权限
'hello-world-settings', // 菜单slug
'hello_world_settings_page', // 用于渲染页面的回调函数
'dashicons-admin-generic', // 图标(可选)
80 // 菜单位置
);
}
add_action( ‘admin_menu‘, ‘hello_world_add_admin_menu’ );
// 步骤2:定义设置页面的HTML内容
function hello_world_settings_page() {
?>
<div class="”wrap”">
<h1>إعدادات إضافة "Hello World"</h1>
<form method="”post”" action="/ar/”options.php”/" data-trp-original-action="”options.php”">
<?php
settings_fields( ‘hello_world_settings_group’ ); // 输出设置字段和非ce字段
do_settings_sections( ‘hello-world-settings’ ); // 输出设置部分
submit_button(); // 输出提交按钮
?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
<?php
}
// 步骤3:注册设置、字段和章节
function hello_world_settings_init() {
// 注册一个新的设置项到“hello_world_settings_group”组
register_setting( ‘hello_world_settings_group’, ‘hello_world_custom_message’ );
// 在页面中新增一个章节
add_settings_section(
‘hello_world_settings_section’,
‘自定义消息设置’,
‘hello_world_settings_section_callback’,
‘hello-world-settings‘
);
// 向章节中添加一个字段
add_settings_field(
‘hello_world_message_field’,
‘前台显示的消息’,
‘hello_world_message_field_render’,
‘hello-world-settings’,
‘hello_world_settings_section’
);
}
add_action( ‘admin_init’, ‘hello_world_settings_init’ );
// 章节描述的回调函数
function hello_world_settings_section_callback() {
echo ‘<p>قم بتكوين محتوى الرسائل التي يتم عرضها في واجهة المستخدم باستخدام هذا الإضافة.</p>’;
}
// 字段渲染的回调函数
function hello_world_message_field_render() {
$option = get_option( ‘hello_world_custom_message’, ‘这是默认消息’ );
echo ‘<input type="”text”" name="”hello_world_custom_message”" value="”‘" . esc_attr( $option ) ‘“ size ="”40”" />’;
} من خلال الكود أعلاه، قمت بإنشاء صفحة إعدادات في الخلفية تتوافق مع معايير ووردبريس وتسمح بحفظ البيانات بشكل آمن.
أمان الإضافات، أداؤها، والاستعداد لنشرها
قبل مشاركة الإضافات مع الآخرين أو تقديمها إلى الدليل الرسمي، من الضروري جدًا التأكد من أنها آمنة وفعالة وسهلة الاستخدام.
اتبع أفضل الممارسات الأمنية.
الأمان هو الأولوية القصوى في تطوير الإضافات (البرامج الإضافية). المبدأ الأساسي هو: لا تثق أبدًا بما يدخله المستخدمون. جميع البيانات القادمة من المستخدمين أو المصادر الخارجية…$_GET, $_POST, $_COOKIEيجب إجراء عمليات التحقق والتنظيف والتهريب (escaping) قبل استخدام البيانات في استعلامات قواعد البيانات، أو عرضها على الصفحات، أو تنفيذ أوامر النظام.
بالنسبة للمحتوى الذي يتم إخراجه إلى HTML، يجب استخدام…esc_html(), esc_attr()أوwp_kses_post()يتم استخدام دوال مثل هذه لتنفيذ عمليات التهريب (escaping).
`echo ‘`‘<div class="”“‘" . esc_attr( $user_provided_class ) ‘“>’ . esc_html( $user_provided_content ) . ‘</div>’; بالنسبة لاستعلامات قواعد البيانات، يجب ألا تقوم أبدًا بدمج المتغيرات مباشرةً في جمل SQL. يجب استخدام طرق معينة لإدخال قيم المتغيرات إلى جمل SQL بشكل صحيح وآمن.$wpdb->prepare()يتم إجراء المعالجة المسبقة باستخدام هذه الطريقة.
global $wpdb;
$user_id = 123;
$query = $wpdb->prepare(
“SELECT * FROM {$wpdb->prefix}my_table WHERE user_id = %d”,
$user_id
);
$results = $wpdb->get_results( $query ); بالإضافة إلى ذلك، يجب أن تستخدم جميع الدوال الاستدعائية (سواء كانت عبر AJAX في الواجهة الأمامية أو عمليات في الخلفية) التي يمكن لجميع المستخدمين الوصول إليها…current_user_can()أوcheck_ajax_referer()تقوم الدوال مثل (…) بالتحقق من الصلاحيات والأمان.
تحسين أداء الإضافات (Plugins)
الإضافات ذات الأداء الضعيف يمكن أن تؤثر سلبًا على تجربة المستخدمين مع الموقع بأكمله. يمكن البدء في تحسين الأداء من عدة جوانب: استخدام الذاكرة المؤقتة (الكاش) بشكل مناسب، وتجنب إجراء عمليات استعلام معقدة على قواعد البيانات أو استدعاءات لخدمات الويب البعيدة (APIs) في كل مرة يتم في(Transients API)يمكن استخدامها لتخزين البيانات المؤقتة بسهولة.
// 尝试从缓存获取数据
$data = get_transient( ‘my_plugin_expensive_data’ );
if ( false === $data ) {
// 缓存中没有,执行昂贵操作
$data = expensive_database_query();
// 将结果缓存12小时
set_transient( ‘my_plugin_expensive_data’, $data, 12 * HOUR_IN_SECONDS );
} ثانيًا، تأكد من أن ملفات CSS و JavaScript يتم تحميلها فقط في الصفحات التي تحتاجها.wp_enqueue_script()وwp_enqueue_style()يمكن للدوال التحكم بدقة في تحميل الموارد وعلاقات الاعتماد بينها. بالنسبة للموارد الخلفية، يمكن تثبيتها (أي ربطها بنظام التشغيل أو التطبيق) بطريقة مناسبة لضمان أداء سلس وفعال.admin_enqueue_scripts“Hook”؛ بالنسبة لموارد الواجهة الأمامية (front-end resources)، يتم تثبيتها (mounting) هناك.wp_enqueue_scriptsخطاف.
الاستعداد للتدويل والنشر
لكي يتمكن المستخدمون في جميع أنحاء العالم من استخدام الإضافة، فإن عملية التدويل (i18n) خطوة ضرورية للغاية. هذا يعني أنك بحاجة إلى تغليف جميع النصوص الموجهة للمستخدمين باستخدام دوال معينة.
قم بتغيير السلاسل النصية الموجودة داخل الإضافة من:
echo “Hello World!”; تم تغيير النص إلى:
echo __( ‘Hello World!’, ‘hello-world’ ); من بينها‘hello-world’لقد قمت أنت بتعريف ذلك داخل رأس الإضافة (plugin header).Text Domainثم، يمكنك استخدام أدوات مثل Poedit لإنشاء المحتوى المطلوب..potملفات القوالب؛ يمكن للمترجمين استخدامها لإنشاء نسخ بلغات مختلفة من المحتوى..poو.moملفات: ضع هذه الملفات الترجمية داخل رأس الإضافة (plugin header).Domain Pathالدليل المحدد (مثل…)/languagesما عليك سوى النقر أسفل.
قبل النشر، يرجى التأكد من كتابة وصف مفصل للمحتوى.readme.txtيجب أن يتوافق تنسيق الملف مع متطلبات ووردبريس الرسمية، ويجب أن يتضمن وصف الإضافة (plugin description)، خطوات التثبيت (installation steps)، والأسئلة الشائعة (frequently asked questions)، وغيرها. هذا شرط إلزامي عند تقديم الإضافة إلى مستودع ووردبريس الرسمي. بالإضافة إلى ذلك، يجب إضافة تعليقات PHP Doc مفصلة داخل كود الإضافة؛ فهذا لا يساعد الآخرين فقط على فهم الكود، بل يعكس أيضًا مستوى الاحترافية لدى المطور.
الملخصات
تقدم هذه المقالة شرحًا منهجيًا للعملية الكاملة لتطوير إضافة (plugin) متخصصة لمنصة ووردبريس (WordPress) من الصفر. بدأنا بفهم الهيكل الأساسي للإضافات، ثم قمنا بإنشاء أول إضافة بسيطة تحتوي على منطق لتفعيل/تعطيل وظائفها. بعد ذلك، تعمقنا في دراسة نظام الأحداث (events) ومخالب المرشحات (filters) القوي في ووردبريس، وكيفية استخدامها للتكامل العميق مع النظام الأساسي للمنصة، بالإضافة إلى إنشاء صفحات إعدادات إدارية قياسية. وأخيرًا، ركزنا على المعايير الأمنية الضرورية في تطوير الإضافات، وطرق تحسين الأداء، والاستعدادات اللازمة لنشر الإضافة على مستوى العالم. باستيعاب هذه المعرفة والمهارات الأساسية، ستتمكن من بناء إضافات ووردبريس متقدمة آمنة وفعالة وسهلة الصيانة، لتلبية احتياجاتك الشخصية أو لخدمة مجموعات أوسع من المستخدمين.
الأسئلة الشائعة الأسئلة المتداولة
ما هي المعرفة الأساسية التي يجب امتلاكها لتطوير إضافات (plugins) لمنصة ووردبريس (WordPress)؟
لتطوير إضافات (Plugins) لووردبريس (WordPress)، من الضروري أولاً امتلاك أساس قوي في برمجة PHP، نظرًا لأن كود الإضافات يتكون في الغالب من لغة PHP. بالإضافة إلى ذلك، يجب أن يكون لديك معرفة أساسية بلغات HTML وCSS وJavaScript للتعامل مع عرض المحتوى والتفاعلات الأمامية (الواجهة البرمجية للمستخدم). والأهم من ذلك كله، يجب أن تكون على دراية تامة بمفاهيم ووردبريس الأساسية مثل الخطافات (Hooks)، والأكواد المختصرة (Shortcodes)، وأنواع المقالات المخصصة (Custom Post Types)، بالإضافة إلى طرق التعامل مع قواعد البيانات.$wpdbاستخدام…
كيف يمكن تصحيح أخطاء البرامج الإضافية (الإضافات) لمنصة ووردبريس (WordPress) أثناء عملية التطوير؟
إحدى الطرق الفعالة للتصحيح هي تفعيل خيارات التصحيح (debugging options) في ووردبريس (WordPress).WP_DEBUGالنمط… فيما يتعلق بك…wp-config.phpفي الملف، سيتم…define( ‘WP_DEBUG’, false );التغيير إلىdefine( ‘WP_DEBUG’, true );يمكنك أيضًا تفعيلها في نفس الوقت.WP_DEBUG_LOGقم بتسجيل الأخطاء في ملف السجلات (log file)، أو قم بتفعيل هذه الميزة.WP_DEBUG_DISPLAYيتم عرض الأخطاء على الصفحة (فقط في بيئة التطوير). بالإضافة إلى ذلك، فإن استخدام أدوات المطور في المتصفح (علامة التبويب Console، Network) أمر ضروري لتصحيح أخطاء الجافا سكريبت الخاصة بالواجهة الأمامية وطلبات AJAX.
كيف يمكن لإضافتي (البرنامج الإضافي) أن تتوافق مع الإضافات الأخرى؟
المفتاح لضمان التوافق الجيد يكمن في اتباع معايير ترميز ووردبريس (WordPress Coding Standards)، واستخدام المتغيرات العامة (global variables) وأسماء الدوال (function names) بحذر. إضافة بادئة فريدة لدوال الإضافات (plugins) والفئات (classes) والثوابت (constants) هي أفضل ممارسة لتجنب تعارض الأسماء (name conflicts). على سبيل المثال، يمكن استmyplugin_أو يمكن استخدام اختصارات المطورين كبادئات. عند تعديل المحتويات التي قد تكون مرتبطة بإضافات أخرى (مثل محتوى المقالات أو العناوين)، تأكد من أن دوال استدعاء الفلاتر الخاصة بك تحمل الأولوية المناسبة.add_filterالمعلمة الثالثة (%)، وانتبه إلى تنسيق القيمة المرجعية التي تُرجعها. بالإضافة إلى ذلك، استخدمها بشكل مناسب.class_exists()أوfunction_exists()يمكن استخدام هذا الأسلوب للتحقق مما إذا كانت فئة معينة أو دالة معينة قد تم تعريفها بالفعل، وبناءً على نتيجة هذا التحقق، يمكن تنفيذ عمليات تحميل مشروطة (conditional loading) أو تقديم بدائل بدي
هل من الضروري إتقان برمجة الكائنات الموجهة (Object-Oriented Programming – OOP) لتطوير الإضافات (plugins)؟
虽然使用传统的面向过程编程方式也可以开发功能完整的插件,但强烈推荐学习和使用面向对象编程(OOP)。OOP能够更好地组织代码,通过类(Class)来封装功能,提高代码的可复用性和可维护性。对于中大型插件项目,使用OOP结合命名空间(Namespaces)和自动加载(Autoloading)是行业内的标准做法,它能让你更清晰地区分不同模块,并显著降低代码的耦合度。
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- كيفية اختيار وتخصيص تصميم ووردبريس المثالي الذي يناسب احتياجاتك؟
- دليل تطوير إضافات ووردبريس: كيف تبني إضافتك المخصصة الأولى من الصفر
- كيف تصبح مطورًا لإضافات ووردبريس: دليل شامل من الصفر إلى النهاية
- من الصفر إلى الواحد: دليل شامل وخطوات عملية لبناء مواقع إلكترونية مهنية باستخدام WordPress
- البدء من الصفر: العملية الكاملة لتطوير مواقع ووردبريس الحديثة وأفضل الممارسات