في عالم الإنترنت الواسع، استحوذت ووردبريس (WordPress) على نصف سوق أنظمة إدارة المحتوى بفضل قدرتها الكبيرة على التوسع. والعنصر الأساسي الذي يمنحها هذه القدرة على التوسع اللامحدود هو الإضافات (البرامج الإضافية أو ال plugins). من خلال تطوير إضافات ووردبريس، يمكنك إضافة أي ميزة تتخيلها إلى موقعك الإلكتروني. سيقوم هذا المقال بإرشادك خطوة بخطوة لبناء أول إضافة خاصة بك، وفهم الهيكل الأساسي لووردبريس وعملية التطوير بشكل عميق.
أساسيات إضافات ووردبريس وإعداد بيئة التطوير
قبل البدء في البرمجة، من المهم جدًا فهم طبيعة إضافات ووردبريس (WordPress plugins) وإنشاء بيئة تطوير مناسبة. في الأساس، إضافة ووردبريس عبارة عن ملف أو ملفات PHP تتبع معايير ووردبريس، وتعمل من خلال واجهات برمجة التطبيقات (APIs) المحددة التي توفرها ووردبريس لتوسيع وظائف الموقع.钩子تتفاعل وحدات “الهوكس” (Hooks) مع الأنظمة الأساسية (Core Systems).
التعريف الأساسي للإضافات.
يجب أن يحتوي كل إضافة (plugin) على ملف رئيسي فريد، ويجب أن تتضمن هذه الملفات تعليقات بتنسيق محدد في بدايتها توضح معلومات الإضافة. هذه التعليقات هي ما يعتمد عليه موقع ووردبريس (WordPress) في صفحة إدارة الإضافات لتحديد وعرض اسم الإضافة ووصفها وإصدارها وغيرها من البيانات ال
القراءة الموصى بها كشف النقاب عن تطوير المُلحقات: بناء أول ملحق لك من الصفر。
إعداد بيئة التطوير المحلية.
من أجل إجراء عمليات التطوير بكفاءة وأمان، ننصح بشدة باستخدام بيئة الخادم المحلي. يمكنك اختيار أدوات مثل XAMPP أو MAMP أو Local by Flywheel أو Docker. المتطلبات الأساسية هي تثبيت برنامج PHP (يجب أن تكون النسخة متوافقة مع الخادم الذي تستهدفه)، بالإضافة إلى قواعد بيانات MySQL/MariaDB وخوادم الويب Apache/Nginx. بعد ذلك، قم بتنزيل أحدث ملفات نواة ووردبريس (WordPress core) وإكمال عملية التثبيت.
قم بإنشاء أول إضافة (plugin) الخاصة بك: أداة لإظهار رسالة تحية.
الآن، دعونا نبدأ في إنشاء إضافة (plugin) بسيطة. وظيفة هذه الإضافة هي إضافة رسالة تحية مخصصة تلقائيًا في نهاية محتوى المقالات على الموقع الإلكتروني.
أولاً، في برنامج ووردبريس (WordPress)… wp-content/plugins تحت "المجلدات"، قم بإنشاء مجلدًا جديدًا واطلق عليه اسمًا. my-first-greeting-pluginثم، قم بإنشاء الملف الرئيسي للغة PHP داخل هذا المجلد، ويمكن تسميته… my-first-greeting-plugin.php。
إعلان معلومات رأس الإضافة (Plugin Header Information Declaration)
افتح الملف الرئيسي، ثم أدخل الكود التالي لتعريف الإضافة (البرنامج الإضافي):
<?php
/**
* Plugin Name: 我的第一个问候语插件
* Plugin URI: https://yourwebsite.com/my-first-greeting-plugin
* Description: 这是一个练习用的插件,用于在文章末尾添加问候语。
* Version: 1.0.0
* Author: 你的名字
* Author URI: https://yourwebsite.com
* License: GPL v2 or later
* Text Domain: my-first-greeting-plugin
*/ بعد حفظ الملف، قم بالدخول إلى صفحة “الإضافات” (Plugins) في واجهة ووردبريس الخلفية، ويجب أن ترى هذه الإضافة الجديدة مدرجة في قائمة الإضافات ويمكنك تفعيلها. بالطبع، في الوقت الحالي لا تحتوي هذه الإضافة على أي وظائف.
القراءة الموصى بها 10 نصائح أساسية ودليل عملي لتحسين أداء مواقع التجارة الإلكترونية باستخدام WooCommerce。
استخدم الخطافات (hooks) لإضافة الميزات الأساسية.
يعتمد تشغيل ووردبريس بشكل كبير على آلية “الخطافات” (hooks)، والتي تنقسم إلى…动作钩子(أدوات التنفيذ – Action Hooks) و过滤器钩子(فلاتر الخطافات – Filter Hooks): نحتاج إلى إضافة نصوص بعد محتوى المقال، ولذلك يجب استخدام هذه الفلاتر. the_content هذا خطاف المرشح (filter hook).
أضف الدالة والمكونات التالية أسفل تعليقات بداية الملف الرئيسي:
// 定义向文章内容添加问候语的函数
function mfgp_add_greeting_to_content( $content ) {
// 确保只在主循环的单篇文章页面显示
if ( is_single() && in_the_loop() && is_main_query() ) {
$greeting = '<p style="color:#666; font-style:italic;">شكرًا لك على قراءة هذا المقال! أتمنى لك يومًا رائعًا!</p>';
$content .= $greeting;
}
return $content;
}
// 将函数挂载到 ‘the_content’ 过滤器钩子上
add_filter( 'the_content', 'mfgp_add_greeting_to_content' ); بعد حفظ الملف وتفعيل الإضافة، قم بفتح أي مقالة على الموقع الإلكتروني وتمرير الماوس إلى نهايتها؛ يجب أن ترى الرسالة التحية التي تم إضافتها. من خلال هذا المثال البسيط، لقد طبقت أهم مفاهيم تطوير الإضافات: تعريف الإضافة، كتابة الدوال الوظيفية، و…add_filterأوadd_actionقم بتثبيت الدالة على الخطاف (hook) الصحيح.
تحسينات في وظائف الإضافة: تم إضافة صفحة لإدارة الإعدادات.
عادةً ما يسمح الإضافة (البرنامج الإضافي) الناضج للمستخدمين بإجراء التكوينات في الخلفية. فيما يلي، سنقوم بإضافة صفحة إعدادات بسيطة لإضافة التحيات، حتى يتمكن المسؤولون من تخصيص النصوص المعروضة
إنشاء عناصر قائمة الإدارة
أولاً، نحن بحاجة إلى استخدامadd_actionالخطاف (hook) يستدعي دالة، وهذه الدالة ستقوم باستخدام… add_options_page تقوم الدالة بإضافة صفحة فرعية تحت قائمة “الإعدادات” في واجهة خلفية ووردبريس.
استمر في إضافة الكود التالي إلى الملف الرئيسي:
القراءة الموصى بها من الصفر إلى الواحد: دليل شامل ودروس عملية لتطوير إضافات ووردبريس。
// 添加设置菜单
function mfgp_add_admin_menu() {
add_options_page(
'问候语插件设置', // 页面标题
'自定义问候语', // 菜单标题
'manage_options', // 权限要求(管理员)
'my-greeting-plugin', // 菜单 Slug
'mfgp_settings_page_html' // 用于输出页面内容的回调函数
);
}
add_action( 'admin_menu', 'mfgp_add_admin_menu' ); إنشاء صفحة للإعدادات وتنفيذ منطق الحفظ
الآن، نحتاج إلى تعريف الدالة الاستدعائية (callback function) المذكورة أعلاه. mfgp_settings_page_html لعرض صفحة HTML لإعدادات الصفحة ومعالجة حفظ بيانات النموذج، يوفر ووردبريس واجهة برمجة تطبيقات (API) لتسهيل هذه العملية، ولكن من أجل فهم الخطوات بشكل واضح، سنستخدم الطريقة الأساسية أولاً.
// 定义设置页面的 HTML 结构
function mfgp_settings_page_html() {
// 检查用户权限
if ( !current_user_can( 'manage_options' ) ) {
return;
}
// 处理表单提交(非设置API方式)
if ( isset( $_POST['mfgp_greeting_text'] ) ) {
// 验证 Nonce 确保请求来源安全
check_admin_referer( 'mfgp_save_settings' );
// 清理并保存输入的数据
$greeting_text = sanitize_textarea_field( $_POST['mfgp_greeting_text'] );
update_option( 'mfgp_custom_greeting', $greeting_text );
echo '<div class="notice notice-success is-dismissible"><p>تم تعيين الإعدادات وحفظها!</p></div>';
}
// 获取已保存的问候语
$saved_greeting = get_option( 'mfgp_custom_greeting', '感谢您阅读本文!祝你拥有美好的一天!' );
?>
<div class="wrap">
<h1></h1>
<form method="post" action="">
<?php wp_nonce_field( 'mfgp_save_settings' ); ?>
<table class="form-table">
<tr>
<th scope="row"><label for="mfgp_greeting_text">عبارة تحية مخصصة</label></th>
<td>
<textarea name="mfgp_greeting_text" id="mfgp_greeting_text" rows="5" cols="50" class="large-text"><?php echo esc_textarea( $saved_greeting ); ?></textarea>
<p class="description">سيتم عرض هذا النص في نهاية كل مقال.</p>
</td>
</tr>
</table>
<?php submit_button( '保存更改' ); ?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
أنا لا أعرف ماذا أقول. تحديث دالة إخراج الواجهة الأمامية (Front-end Output Function)
أخيرًا، نحتاج إلى تعديل دالة العرض الأمامية (الفرينت إند) السابقة بحيث تسترجع البيانات من خيارات قاعدة البيانات.get_optionيتم قراءة عبارات التحية من الملفات المحددة، بدلاً من استخدام نصوص مكتوبة بشكل ثابت (مُحفوظة في الكود).
function mfgp_add_greeting_to_content( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
// 从数据库选项中获取问候语,如果没有则使用默认值
$greeting_text = get_option( 'mfgp_custom_greeting', '感谢您阅读本文!祝你拥有美好的一天!' );
if ( ! empty( $greeting_text ) ) {
$greeting = '<p style="color:#666; font-style:italic;">'`. esc_html($greeting_text)`.'</p>';
$content .= $greeting;
}
}
return $content;
} الآن، يمكن للمسؤولين تعديل النصوص المعروضة بحرية في صفحة “الإعدادات” -> “تحديد التحيات المخصصة”, وسيتم تحديث عرضها على الواجهة الأمامية فورًا.
استعداد لنشر الإضافة: تعزيز الدعم الدولي والأمان
قبل مشاركة الإضافة مع الآخرين أو تقديمها إلى الدليل الرسمي، هناك بعض الأعمال النهائية المهمة التي يجب القيام بها، والتي تتمثل بشكل أساسي في التكييف مع اللغات الدولية وتعزيز الأمان.
تحقيق تدويل النصوص (Text Internationalization)
تسمح لك ميزة التدويل (i18n) بترجمة إضافتك إلى لغات أخرى. يجب أن تقوم بتغليف جميع النصوص الموجهة للمستخدمين باستخدام دوال محددة. قم بتعديل النصوص الموجودة في إضافتنا.
1. 在插件头部注释中,我们已经定义了 Text Domain。
2. 在代码中,使用 () أو esc_html() الدالة تقوم بتغليف السلسلة النصية (string). مثال:
// 在设置页面函数中
$greeting_text = get_option( 'mfgp_custom_greeting', __( ‘感谢您阅读本文!祝你拥有美好的一天!’, ‘my-first-greeting-plugin’ ) );
echo ‘<h1>’ . esc_html__( ‘问候语插件设置’, ‘my-first-greeting-plugin’ ) . ‘</h1>’// في دالة الإخراج الأمامية (ملاحظة: عادةً ما لا يحتاج الإخراج الأمامي إلى ترجمة، ما لم يتم اتخاذ قرار بذلك من قبل المطور أو المستخدم)،
// ولكن إذا كانت عبارات التحية نفسها بحاجة إلى دعم لعدة لغات، فقد تكون هناك حاجة إلى منطق أكثر تعقيدًا 3. 使用工具如 Poedit 创建 .pot ملفات القوالب (Template Files)، يمكن للمترجمين استخدامها كأساس لإنشاء الترجمات الخاصة بهم. .po و .mo ملف.
تعزيز الحماية الأمنية
الأمان أمر بالغ الأهمية. لقد استخدمنا بعض الدوال الأمنية، مثل…sanitize_textarea_field、esc_html、esc_textareaوwp_nonce_fieldبالإضافة إلى ذلك، من الضروري الانتباه أيضًا إلى:
* 权限检查:在管理页面函数开始处使用 current_user_can قم بإجراء الفحص.
* 数据验证与清理:对所有用户输入(如 $_POST, $_GET)进行验证(是否符合预期格式)和清理(移除非法字符)。
* 非竞态条件更新:对于重要的选项,考虑使用 wp_options عند إنشاء الجداول، الطريقة الأكثر أمانًا هي استخدام واجهة برمجة التطبيقات (API) Settings، والتي تتضمن بشكل مدمج آليات لمنع التنافس غير المرغوب فيه (nonce) وفحوصات الصلاحيات.
الملخصات
من خلال هذا الدليل، أكملنا رحلة كاملة من إنشاء إلى نشر إضافة ووردبريس (WordPress plugin) متكاملة الوظائف. بدأنا بفهم أساسيات الإضافات، ثم أنشأنا الملف الرئيسي للإضافة الذي يحتوي على معلومات الرأس القياسية؛ بعد ذلك، مارسنا آلية “الخطافات” (hooks) الأساسية في ووردبريس من خلال وظيفة تحية بسيطة؛ تبعاً لذلك، أضفنا صفحة إعدادات خلفية للإضافة لتمكين المستخدمين من تخصيصها؛ وأخيراً، ناقشنا الخطوات الحاسمة قبل النشر، مثل التدويل (internationalization) وتعزيز الأمان (security enhancement). كل خطوة شملت استخدام دوال أساسية في ووردبريس وأفضل الممارسات. بمجرد إتقان هذه المعرفة الأساسية، يمكنك المحاولة في تطوير إضافات أكثر تعقيداً وإبداعاً، والمساهمة في نظام ووردبريس العالمي.
الأسئلة الشائعة الأسئلة المتداولة
ما هي المعرفة المسبقة المطلوبة لتطوير إضافات (Plugins) لمنصة ووردبريس (WordPress)؟
يجب أن تمتلك معرفة أساسية بلغة البرمجة PHP، وفهمًا للغات HTML وCSS، بالإضافة إلى معرفة أساسية بكيفية استخدام منصة WordPress (مثل إنشاء المقالات، الصفحات، والقوائم). ليس من الضروري أن تكون ملمًا بمفاهيم البرمجة الكائنية (Object-Oriented Programming – OOP)، ولكن ذلك سيكون مفيدًا للغاية عند تطوير إضافات (plugins) كبيرة الحجم.
لماذا لم يظهر الإضافة (البرنامج الإضافي) الخاص بي في قائمة الخلفية بعد تفعيله؟
السبب الأكثر شيوعًا هو مشكلة في الصلاحيات. يرجى التحقق من الأمور عند استدعاء الوظيفة المعنية.add_options_pageعند استخدام دوال مماثلة، هل تم تعيين الوسيط الثاني (capability) بشكل صحيح؟ ‘manage_options’بالإضافة إلى ذلك، يرجى التأكد من أن الدالة الخاصة بك قد تم تنفيذها بشكل صحيح.add_action( ‘admin_menu’, ...)تم تثبيت المكون المطلوب (الـ “hook”) بنجاح، ولم تحدث أي أخطاء نحوية تمنع تنفيذ الدالة. يمكنك إضافة الكود المطلوب في بداية الملف البرمجي.error_logاستخدم الدوال للتصحيح والتحقيق من الأخطاء (debugging).
كيف يمكنني تصحيح أخطاء مكوّن WordPress الخاص بي؟
أولاً، تأكد من أنك قمت بتنفيذ الخطوات اللازمة في… wp-config.php تم تفعيل وضع التصحيح الخاص بووردبريس (WordPress Debug Mode) في الملف: define( ‘WP_DEBUG’, true ); و define( ‘WP_DEBUG_LOG’, true );بهذه الطريقة، سيتم تسجيل رسائل الخطأ. /wp-content/debug.log الملف موجود هناك. بالإضافة إلى ذلك، يمكن استخدام أدوات المطور في المتصفح، وتحديداً تبويب “الوحدة التحكم” (Console) وتبويب “الشبكة” (Network)، لتصحيح الأخطاء في الجزء الأمامي (الفريم وورك) من الكودerror_log( print_r( $variable, true ) );إن إخراج قيم المتغيرات إلى السجلات (اللوغات) هو أسلوب شائع الاستخدام.
كيف يتوافق مكوّني الإضافي مع المكوّنات الإضافيّة أو المظاهر الأخرى؟
لضمان أقصى قدر ممكن من التوافق، يجب أن يستخدم البرنامج المساعد الخاص بك: 1) بادئات فريدة من نوعها لتسمية جميع الوظائف والفئات والمتغيرات والخيارات (مثل التي استخدمناها).mfgp_تجنب تضارب الأسماء. 2 ) عند إضافة أو تعديل أسلوب الواجهة الأمامية أو الخلفية، استخدم أسماء فئات للمحددات فريدةً قدر الإمكان. 3 ) عندما يكون ذلك ممكنًا، قم بتوفير محددات للمرشحات.apply_filtersلا تقم بتضمين أي شفرة غير موثقة في إضافاتك. 4) لا تقم بتعديل جداول أو ملفات قاعدة بيانات WordPress الأساسية بشكل مباشر.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- لماذا يجب عليك استخدام WooCommerce لبناء متجر عبر الإنترنت؟
- لماذا اختيار ووردبريس (WordPress)؟ العشر مزايا الأساسية لنظام إدارة المحتوى المفتوح المصدر (CMS):
- إتقان WooCommerce في عشر دقائق: دليل لبناء مواقع التجارة الإلكترونية من البداية حتى تحقيق الربح
- دليل شامل لـ WooCommerce: من التثبيت إلى التكوين المتقدم لمتجر إلكتروني جاهز للعمل
- ما هو ووردبريس (WordPress)؟ مقدمة شاملة عن نظام إدارة المحتوى