دليل للبدء في تطوير إضافات ووردبريس: بناء أول وحدة وظيفية مخصصة الخاصة بك من الصفر

قراءة 3 دقائق
2026-03-11
2026-06-03
2,072
أنا أحصل على عمولة عند التسوق عبر الروابط أدناه، ولا يُضاف أي تكلفة عليك.

لماذا نحتاج إلى تطوير ملحق مخصص؟

في بيئة ووردبريس (WordPress)، تعتبر الإضافات (plugins) جزءًا أساسيًا من توسيع إمكانيات الموقع الإلكتروني. على الرغم من توافر آلاف الإضافات الجاهزة في السوق، إلا أن تطوير إضافات مخصصة يوفر مزايا فريدة. عندما تكون احتياجاتك محددة للغاية، أو عندما تكون مجموعة الإضافات المتاحة ضخمة وغير فعالة، فإن الإضافة المصممة خصيصًا لتلبية احتياجاتك تمثل الحل الأمثل. يمكن للإضافات المخصصة أن تتناسب تمامًا مع منطق عملك، مما يتجنب أي تعارضات قد تنشأ نتيجة استخدام عدة إضافات، كما أن أداؤها عادةً ما يكون أفضل من أداء الإضافات العامة المتعددة الوظائف. الأهم من ذلك، أنك من خلال تطوير الإضافات بنفسك، تتمكن من السيطرة الكاملة ع

من وجهة نظر التعلم، فإن فهم آليات تطوير الإضافات (plugins) هو الطريق الأساسي لإتقان WordPress بشكل شامل. فهو يسمح لك بالتحول من مجرد “مستخدم” إلى “مطور”, مما يمنحك القدرة على التعامل بمرونة مع مختلف المتطلبات المخصصة، وحتى يضع أساسًا متينًا لتطوير المنتجات في المستقبل أو لتطوير مسيرتك المهنية.

الاستعدادات: إنشاء بيئة التطوير

قبل البدء في كتابة الكود، من الضروري توفير بيئة تطوير مستقرة ومعزولة. هذا لا يحمي موقعك الإلكتروني الإنتاجي فحسب، بل يتيح لك أيضًا اختبار وتصحيح الأخطاء بحرية.

إعداد بيئة التطوير المحلية.

ننصح باستخدام حزم برمجيات الخوادم المحلية مثل Local by Flywheel أو XAMPP أو MAMP. هذه الأدوات تقوم بمحاكاة بيئة الخادم الشبكي (Apache/Nginx، MySQL، PHP) على جهاز الكمبيوتر الخاص بك، مما يتيح لك القيام بعمليات التطوير بشكل غير متصل بالإنترنت. بعد الانتهاء من التثبيت، قم بإنشاء موقع ووردبريس جديد كـ “صندوق تجريبي” (sandbox) لاستخدامه في عمليات التطوير الخاصة بك.

اختيار محرر الكود

محرر كود قوي يمكن أن يعزز كفاءة العمل بشكل كبير أثناء التطوير. Visual Studio Code هو خيار شائع جدًا في الوقت الحالي؛ فهو خفيف الوزن، مجاني، ويحتوي على العديد من الإضافات (التوسعات) المفيدة، مثل التمييز اللوني للكود الخاص بلغات مثل PHP وWordPress، بالإضافة إلى أدوات للتنبيهات والتصحيح أثناء التطوير. PHPStorm هو بيئة تطوير متكاملة (IDE) أخرى قوية، توفر ميزات أعمق لتحليل الكود وإعادة هيكلته.

خادم ووردبريس من شركة UltaHost
ضمان استرداد المال خلال 30 يومًا، عرض نطاق ترددي وقواعد بيانات غير محدودين، حماية مجانية ضد هجمات DDoS، خصم 50% عند الشراء لمدة 3 سنوات (السعة المتاحة: 501–4 تيرابايت).

هيكل الملفات الأساسية للإضافات (Plugins)

أبسط إضافة (plugin) لـ WordPress يمكن أن تكون مجرد ملف PHP رئيسي واحد. لكن الإضافات القياسية عادةً ما تتمتع بهيكل ملفات ومجلدات واضح ومنظم. وذلك ضمن مجلد تثبيت WordPress الخاص بك الموجود على الجهاز المحلي. wp-content/plugins داخل المجلد، قم بإنشاء مجلد جديد لإضافتك (البرنامج الإضافي)، على سبيل المثال: my-first-pluginسيحتوي هذا المجلد على جميع ملفات الإضافات (البرامج الإضافية).

بناء أول إضافة (plugin) الخاصة بك: “Hello Admin”

سنقوم بإنشاء إضافة (Plugin) تُسمى “Hello Admin”, ووظيفتها بسيطة للغاية: عرض رسالة ترحيب مخصصة في أعلى لوحة المعلومات (Dashboard) داخل واجهة إدارة WordPress. توضح هذه الأمثلة العناصر الأساسية لتطوير الإضافات: الملف الرئيسي (Main File)، والخطافات (Hooks)، والدوال الأساسية (Basic Functions).

إنشاء ملف الإضافة الرئيسية (Main Plugin File)

في مجلد الإضافات الخاص بك my-first-plugin داخليًا، قم بإنشاء شيء يُسمى… my-first-plugin.php هذا ملف الإضافة (plugin). إنه الملف الرئيسي للإضافة. عند فتحه، أضف أولاً تعليقات معلومات الإضافة القياسية في بداية الملف. هذه التعليقات ضرورية لكي يتعرف ووردبريس (WordPress) على الإضافة.

<?php
/**
 * Plugin Name:       Hello Admin
 * Plugin URI:        https://yourwebsite.com/hello-admin
 * Description:       一个简单的插件,用于在管理后台显示欢迎信息。
 * Version:           1.0.0
 * Author:            你的名字
 * License:           GPL v2 or later
 * Text Domain:       hello-admin
 */

استخدام الخطافات (hooks) لإضافة الميزات

الآلية الأساسية في ووردبريس هي “الخطافات” (Hooks)، والتي تسمح لك بتنفيذ كودك الخاص في نقاط زمنية محددة. تنقسم هذه الخطافات بشكل رئيسي إلى نوعين: خطافات الإجراءات (Action Hooks) وخطافات المرشحات (Filter Hooks). لعرض المحتوى في واجهة الإدارة، نحتاج إلى استخدام خطافات الإجراءات (Action Hooks).

عندما يقوم WordPress بتحميل رأس واجهة الإدارة الخلفية، يوفر شيئًا يُسمى… admin_notices إنها خاصية تسمح بربط أحداث معينة بإجراءات معينة في البرنامج. يمكننا استخدامها لتنفيذ تعليمات أو تغييرات تلقائيًا عند حدوث تلك الأحداث. add_action() تقوم الدالة بتثبيت الدالة المخصصة لدينا على هذا “الخطاف” (hook).

أضف الكود التالي أسفل تعليقات الملف الرئيسي:

// 钩子函数:在管理后台显示通知
function hello_admin_display_message() {
    // 确保只对管理员显示,使用 current_user_can() 检查权限
    if ( current_user_can( 'manage_options' ) ) {
        echo '<div class="notice notice-success is-dismissible"><p>مرحبًا بكم مرة أخرى، المسؤول! هذا هو الإضافة “Hello Admin” التي قمت بتخصيصها وهي تعمل حاليًا.</p></div>';
    }
}
// 将我们的函数挂载到 ‘admin_notices’ 这个动作钩子上
add_action( 'admin_notices', 'hello_admin_display_message' );

الاختبار والتفعيل

قم بحفظ الملف. الآن، ادخل إلى واجهة الإدارة الخاصة بموقع ووردبريس الخاص بك الموجود محليًا (عادةً ما تكون عبر عنوان مثل: /wp-adminقم بالتنقل إلى قائمة “الإضافات” (Plugins)، ويجب أن تتمكن من رؤية إضافة “Hello Admin” في قائمة الإضافات. انقر على “تفعيل” (Enable). بعد التفعيل، قم بتحديث صفحة اللوحة الرئيسية (Dashboard)، وسترى مربع إشعار أخضر في الجزء العلوي من الصفحة يظهر رسالة الترحيب التي قمت بتعريفها. هذا يدل على أن أول إضافة قمت بإنشائها قد تم تشغيلها بنجاح!

استضافة.كوم استضافة مشتركة
أداء عالٍ مع وحدات المعالجة المركزية AMD EPYC، ووحدات تخزين NVMe SSD وLiteSpeed، ودعم داخلي متخصص على مدار الساعة طوال أيام الأسبوع، وتدابير أمنية متقدمة بما في ذلك SSL، وقوة الغاشمة، والحماية من البرامج الضارة والحماية من DDoS، وتوفير ما يصل إلى 731 تيرابايت 4 تيرابايت

إضافة خيارات قابلة للتكوين للإضافة (plugin)

الإضافة (البرنامج الإضافي) التي تعرض معلومات ثابتة فقط تكون ذات فائدة محدودة. في الخطوة التالية، سنجعلها قابلة للتكوين، بحيث يمكن للمسؤولين تخصيص الرسائل التي يتم عرضها من خلال صفحات الإعدادات. هذا يتطلب إنشاء صفحات لقوائم الإدارة، معالجة بيانات النماذج، واستخدام واج

إنشاء صفحة قائمة الإدارة

نحتاج إلى إضافة صفحة إعدادات في الواجهة الخلفية للإدارة. ويمكن تحقيق ذلك عن طريق… add_menu_page() أو add_submenu_page() تنفيذ الدالة: نواصل إضافة الكود إلى الملف الرئيسي للإضافة (plugin main file).

أولاً، قم بإنشاء دالة لتوليد محتوى HTML الخاص بصفحة الإعدادات، وقم أيضًا بتسجيل عنصر قائمة (menu item):

// 创建插件设置页面
function hello_admin_add_settings_page() {
    add_options_page(
        'Hello Admin 设置', // 页面标题
        'Hello Admin',      // 菜单标题
        'manage_options',   // 所需权限
        'hello-admin',      // 菜单slug
        'hello_admin_render_settings_page' // 用于渲染页面的回调函数
    );
}
add_action( 'admin_menu', 'hello_admin_add_settings_page' );
// 渲染设置页面的HTML
function hello_admin_render_settings_page() {
    ?&gt;
    <div class="wrap">
        <h1>مرحبًا، إداري… هل يمكنك مساعدتي في إعدادات “Hello Admin”؟</h1>
        <form method="post" action="/ar/options.php/" data-trp-original-action="options.php">
            <?php
            settings_fields( 'hello_admin_settings_group' ); // 设置组名称
            do_settings_sections( 'hello-admin' ); // 页面slug
            submit_button(); // 提交按钮
            ?>
        <input type="hidden" name="trp-form-language" value="ar"/></form>
    </div>
    أنا لا أعرف ماذا أقول.

إعدادات التسجيل، الحقول، وتخزين البيانات

في الخطوة التالية، سنحتاج إلى استخدام واجهة برمجة التطبيقات (API) الخاصة بإعدادات ووردبريس (WordPress Settings API) لتسجيل خياراتنا والتحقق منها وحفظها بشكل آمن. قم بإنشاء دالة أخرى، وفي داخل هذه الدالة، قم ب admin_init قم بتشغيله على الخطاف.

// 初始化设置
function hello_admin_settings_init() {
    // 注册一个设置,将其存储在 wp_options 表中
    register_setting( 'hello_admin_settings_group', 'hello_admin_custom_message', 'sanitize_text_field' );
// 在页面上添加一个设置区域(可以省略,此处为清晰而加)
    add_settings_section(
        'hello_admin_section',
        '自定义消息设置',
        null, // 可选的区域描述回调函数
        'hello-admin'
    );
// 在区域中添加一个字段
    add_settings_field(
        'hello_admin_message_field',
        '欢迎消息',
        'hello_admin_message_field_callback',
        'hello-admin',
        'hello_admin_section'
    );
}
add_action( 'admin_init', 'hello_admin_settings_init' );
// 渲染消息输入字段
function hello_admin_message_field_callback() {
    $message = get_option( 'hello_admin_custom_message', '欢迎回来,管理员!' ); // 获取已保存的值,没有则用默认值
    echo '<input type="text" name="hello_admin_custom_message" value="' . esc_attr( $message ) . '" class="regular-text" />'echo '<p class="description">أدخل هنا الرسالة الترحيبية التي تريد عرضها في واجهة الإدارة.</p>';
}

قم بتعديل دالة العرض لاستخدام عناصر التكوين.

أخيرًا، نحتاج إلى تعديل الدالة المستخدمة لعرض الإشعارات في البداية. hello_admin_display_message()دعه يأتي من خيارات قاعدة البيانات. hello_admin_custom_message يتم قراءة المحتوى من الملفات، بدلاً من تخزينه بشكل ثابت (كود مُحفور في الذاكرة).

الاستضافة المشتركة InterServer
استضافة مشتركة $2.50 دولار أمريكي في الشهر، الشهر الأول $0.1 دولار أمريكي الرمز الترويجي tryinterserver، 461 نص برمجي للتطبيقات السحابية، تثبيت بنقرة واحدة.
function hello_admin_display_message() {
    if ( current_user_can( 'manage_options' ) ) {
        $custom_message = get_option( 'hello_admin_custom_message', '欢迎回来,管理员!' ); // 获取自定义消息
        if ( ! empty( $custom_message ) ) {
            echo '<div class="notice notice-success is-dismissible"><p>'`. esc_html($custom_message)`.'</p></div>';
        }
    }
}

الآن، قم بحفظ جميع التعديلات. عد إلى واجهة ووردبريس الخلفية، وستجد خيار “Hello Admin” تحت قائمة “الإعدادات”. ادخل إلى هذه الصفحة، قم بتعديل الرسالة الموجودة هناك، ثم احفظ التغييرات. قم بتحديث لوحة المعلومات (dashboard)، وستلاحظ أن الرسالة المعروضة قد تغيرت إلى المحتوى الذي قمت بتعيينه للتو. وبذلك، تم إنشاء إضافة (plugin) مخصصة تحتوي على وظائف تكوين أساسية.

أفضل الممارسات في تطوير الإضافات والخطوات التالية

بعد تنفيذ الميزات الأساسية، اتباع أفضل الممارسات سيجعل الإضافة الخاصة بك أكثر احترافية وأمانًا وسهولة في الصيانة.

الأمان هو الأولوية القصوى: قم دائمًا بالتحقق من مدخلات المستخدمين وتهريبها وتنظيفها. استخدم الدوال المتاحة في ووردبريس مثل… esc_html(), esc_attr(), sanitize_text_field(), wp_nonce_field() إلخ… لا تثق أبدًا مباشرة في البيانات القادمة من المستخدمين أو قواعد البيانات.

تنظيم الكود والتعليقات: مع نمو وظائف الإضافات (البرامج الإضافية)، يجب تقسيم الكود إلى فئات (classes) أو ملفات (files) مختلفة. استخدام برمجة الكائنات (Object-Oriented Programming – OOP) يمكن أن يحسن من قابلية إعادة استخدام الكود وتنظيمه. قم بإضافة تعليقات واضحة لدوالك وفئاتك، فهذا أمر بالغ الأهمية سواء بالنسبة لك في المستقبل أو بالنس

الاستعداد للتدويل: إذا كنت تخطط لنشر الإضافة الخاصة بك للعامة، فيجب أن تدعم التدويل (i18n). وهذا يعني أنك بحاجة إلى… __() أو _e() تقوم الدوال مثل هذه بتغليف جميع النصوص الموجهة للمستخدمين، وتحدد بشكل صحيح “نطاق النص” (Text Domain). وبهذه الطريقة، يمكن للآخرين ترجمة إضافتك (البرنامج الإضافي) إلى لغات أخرى.

اعتبارات الأداء: قم بتحميل موارد الإضافات الخاصة بك (CSS، JavaScript) فقط عند الحاجة إليها. استخدم شروط التحكم بشكل مناسب لتجنب تحميل السكريبتات التي تحتاجها الخلفية في كل صفحة. قم بتحسين عمليات الاستعلام عن البيانات في قاعدة البيانات، واستخدم واجهة برمجة التطبيقات (API) الخاصة بـ WordPress للتخزين المؤقت (Transients) بشكل فعال لتسريع عمليات التحميل.

استكشاف متعمق: بعد إتقان الأساسيات، يمكنك التعمق في مواضيع أكثر تقدمًا، مثل إنشاء أنواع مقالات مخصصة (Custom Post Types – CPT) وتصنيفات مخصصة (Custom Taxonomies)، وإضافة رموز قصيرة (Shortcodes)، وتطوير أدوات إضافية (Widgets)، ودمج واجهات برمجة التطبيقات عبر REST API (REST APIs)، أو إنشاء كتل قابلة للسحب والإسقاط (Drag-and-Drop Blocks) لاستخدامها في إضافاتك (Plugins).

الملخصات

من خلال هذا الدليل، أكملت عملية بناء إضافة (Plugin) مخصصة لموقع ووردبريس (WordPress) شاملة وكاملة الوظائف من الصفر. لقد تعرفت على المفاهيم الأساسية لتطوير الإضافات، مثل هيكل الملفات، ونظام الخطافات (Hooks) الأساسي، وكيفية استخدام واجهة برمجة التطبيقات (API) للإعدادات (Settings API) لإنشاء صفحات إعدادات آمنة. إضافة “Hello Admin” بسيطة، ولكنها تحتوي على النماذج الأساسية لتطوير الإضافات: تحديد وظائف الإضافة، تنفيذها، معالجة البيانات، وعرض النتائج. بمجرد إتقان هذه الأساسيات، ستمتلك المفاتيح اللازمة لاستكشاف القدرات الواسعة لتوسيع ووردبريس. تذكر أن المواصلة في التعلم، اتباع أفضل الممارسات، والممارسة العملية هي الطريق الوحيد لتحسين مهارات تطوير الإضافات.

الأسئلة الشائعة الأسئلة المتداولة

ما هي الحد الأدنى لعدد الملفات المطلوبة لإضافة (plugin) في ووردبريس (WordPress)؟

يمكن أن يتكون الإضافة (البرنامج الإضافي) الأبسط من حيث الميزات من ملف PHP رئيسي واحد فقط. طالما يحتوي هذا الملف على تعليقات تحتوي على معلومات رأس الإضافة الصحيحة، يمكن لبرنامج ووردبريس (WordPress) التعرف عليها وتفعيلها. ولكن مع تعقيد الميزات، يتم عادةً تقسيم الكود إلى عدة ملفات من أجل تنظيمه بشكل أفضل، مثل ملفات JavaScript وCSS منفصلة، أو ملفات كلاسات PHP مقسمة حسب وحدات الوظيفة.

ما الفرق بين خطاف الإجراء (action hook) `add_action` وخطاف المرشح (filter hook) `add_filter`؟

تُستخدم “خطافات الإجراءات” (Action Hooks) لتنفيذ قطعة من الكود أو وظيفة معينة في لحظة محددة، ولا يُتوقع منها إرجاع أي قيمة؛ فهي مجرد أداة لـ “القيام بشيء ما”. على سبيل المثال، إرسال بريد إلكتروني بعد نشر مقال.

تُستخدم “خطافات المرشحات” (Filter Hooks) لتعديل البيانات؛ فهي تقبل قيمة مدخلة وتتوقع إرجاع قيمة معدلة كنتيجة لذلك. على سبيل المثال، قبل عرض عنوان المقالة في المتصفح، يمكن تعديل محتواها. الفرق الأساسي بينهما يكمن في أن “الإجراءات” (Actions) تقوم بتنفيذ ما هو مطلوب، بينما “المرشحات” (Filters) تقوم بتعديل البي

كيف يمكن حفظ مدخلات المستخدمين بشكل آمن في قاعدة البيانات؟

يجب استخدام دوال واجهة برمجة التطبيقات (API) المتاحة من ووردبريس، مثل…update_option()وregister_setting()register_setting()تسمح لك الدالة بتحديد دالة اتصال للتنظيف (clean-up callback function)، مثل…sanitize_text_fieldيتم معالجة البيانات تلقائيًا قبل حفظها. لا تستخدمها أبدًا مباشرةً.$wpdbأو استخدام جمل SQL لإدخال بيانات المستخدمين غير المعالجة، مما قد يؤدي إلى ثغرات أمنية خطيرة (مثل هجمات الإدخال الزائف للكود SQL – SQL Injection).

عند تطوير إضافات (plugins)، كيف يمكن تجنب حدوث تعارضات مع إضافات أخرى؟

ممارسات البرمجة الجيدة هي المفتاح لتجنب حدوث التعارضات. قم بإضافة بادئات فريدة لجميع الدوال (functions) والفئات (classes) والمتغيرات (variables) وأسماء الخيارات (option names) الخاصة بك. على سبيل المثال، استخدم…hello_admin_display_messageبدلاً من أن يكون شائعًا…display_messageقم بتغليف أنماط CSS الخاصة بك وكود JavaScript داخل فئات (classes) أو محددات اختيار بأسماء معينة (IDs). عند إضافة الوظائف الإضافية (hooks)، تأكد من أن دوال الاستدعاء (callback functions) تعمل فقط تحت الشروط التي تحتاجها (مثل التحقق من الصفحة الحالية أو صلاحيات المستخدم).