إتقان تطوير إضافات ووردبريس من الصفر: المبادئ، التطبيق العملي، والمهارات المتقدمة

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

إن إضافات ووردبريس (WordPress Plugins) تمثل الآلية الأساسية لتوسيع وظائفه الأساسية. من خلال هذه الإضافات، يمكنك إضافة مجموعة لا نهائية من الميزات إلى موقعك الإلكتروني دون الحاجة إلى تعديل الكود الأساسي لووردبريس نفسه. يتبع تطوير الإضافات مجموعة من القواعد وأفضل الممارسات لضمان أمانها وأدائها الجيد وسهولة صيانتها. تحتاج إضافة ووردبريس القياسية إلى ملف رئيسي على الأقل، وعادة ما يكون اسم هذا الملف مطابقًا لاسم الإضافة نفسها، مثل… my-awesome-plugin.phpسيبدأ هذا المقال من المفاهيم الأساسية، ويوجهك خطوة بخطوة نحو عالم تطوير الإضافات (البرامج الإضافية).

فهم المبادئ الأساسية للإضافات (plugins)

مكونات ووردبريس (WordPress plugins) هي في جوهرها ملف واحد أو أكثر من صيغة PHP، مخزنة في مجلد معين داخل نظام ووردبريس. /wp-content/plugins/ موجود في الدليل. تتفاعل الإضافات مع النظام الأساسي لووردبريس من خلال واجهة برمجة التطبيقات (API) ونظام الخطافات (Hooks) المتاحين في ووردبريس.

آلية عمل نظام الخطافات (Hook System)

نظام الخطافات (Hook System) هو جزء أساسي من عملية تطوير إضافات (Plugins) لمنصة ووردبريس (WordPress). يقوم المطورون بـ “التوصيل” بالعمليات الافتراضية لووردبريس بطريقتين رئيسيتين: عبر الإجراءات (Actions) والمرشحات (Filters). تسمح الإجراءات (Actions) بتنفيذ كود مخصص في نقاط زمنية محددة، بينما تسمح المرشحات (Filters) بتعديل البيانات التي تتم نقلها أثناء تنفيذ العمليات.

القراءة الموصى بها تطوير إضافات ووردبريس من المبتدئ إلى الخبير: دليل خطوة بخطوة لمساعدتك في إنشاء ميزاتك الخاصة.

على سبيل المثال، استخدام add_action() يمكن للدوال تسجيل "خطافات إجراءات" (action hooks). عندما يصل ووردبريس إلى نقطة التنفيذ المحددة، يتم تنفيذ الدالة الاستدعائية (callback function) التي قمت بربطها.

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

معلومات رأس الملف القياسية للإضافة (Plugin Standard File Header Information)

يجب أن يحتوي الملف الرئيسي لكل إضافة (plugin) مكتوب بلغة PHP على كتلة تعليقات تحتوي على بيانات رأس الملف (header information) موحدة، وذلك لتزويد ووردبريس (WordPress) بمعلومات فنية عن الإضافة. تساعد هذه المعلومات في تحديد طريقة عرض الإضافة على صفحة إدارة الإض

<?php
/**
 * Plugin Name: 我的超级插件
 * Plugin URI: https://www.example.com/my-super-plugin/
 * Description: 这是一个用来演示插件开发基础的示例插件。
 * Version: 1.0.0
 * Author: 张三
 * Author URI: https://www.example.com/
 * License: GPL v2 or later
 * Text Domain: my-super-plugin
 */

تحميل وتفعيل الإضافات (Plugins)

عندما يقوم المستخدم بتفعيل إضافة (plugin) من خلال واجهة خلفية WordPress، فإن WordPress يقوم بتنفيذ الكود الموجود في الملف الرئيسي للإضافة في كل مرة يتم فيها تحميل الصفحة (بشرط أن الكود ليس داخل دالة أو غير محمي بشروط معينة). لذلك، يُنصح عادةً بتغليف جميع أجزاء الكود المسؤولة عن الوظائف المختلفة داخل دوال أو فئات (classes)، واستدعاؤها عبر “الهوكات” (hooks)، وذلك لتجنب تنفيذ الكود عندما لا تكون

بناء أول إضافة (plugin) خاصة بك

دعونا نبدأ في إنشاء إضافة بسيطة، وظيفتها هي إضافة إعلان حقوق النشر تلقائيًا في نهاية محتوى جميع المقالات على الموقع.

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

أولاً، في… /wp-content/plugins/ قم بإنشاء مجلد جديد داخل المجلد الحالي، وأطلق عليه الاسم التالي: my-first-pluginثم قم بإنشاء الملف الرئيسي داخل هذا المجلد. my-first-plugin.phpوأضف معلومات رأس الملف القياسية المذكورة أعلاه.

القراءة الموصى بها تطوير إضافات WordPress من المبتدئ إلى الخبير: دليل كامل لإنشاء وحدات وظيفية عالية التخصيص.

استخدم المرشحات لتعديل محتوى المقال.

سنستخدم… the_content يمكنك استخدام مرشحات (filters) لتعديل محتوى المقالات قبل عرضها للقراء. أضف الكود التالي إلى ملفك الرئيسي:

function myfp_add_copyright_to_content($content) {
    // 确保只在文章主循环中、且非管理后台执行
    if (is_single() &amp;&amp; !is_admin()) {
        $copyright_text = '<p><em>جميع حقوق هذا المقال محفوظة لهذا الموقع الإلكتروني؛ يرجى ذكر المصدر عند إعادة نشره.</em></p>';
        $content .= $copyright_text;
    }
    return $content;
}
add_filter('the_content', 'myfp_add_copyright_to_content');

myfp_add_copyright_to_content الدالة تتلقى معاملًا واحدًا. $contentأي محتوى المقال. نقوم بذلك من خلال استخدام دوال التحكم في الشروط (conditional judgment functions). is_single()تأكد من أن هذا العنصر يتم إضافته فقط إلى صفحة المقال الفردي، ولا إلى أي صفحات أخرى. !is_admin() وبالتالي، يتم منع عرض هذا النص المتعلق بحقوق النشر في محرر الخلفية.

معالجة ترجمة الإضافات المحلية (Localization of Plugins)

لكي يدعم الإضافة عدة لغات، من الضروري إجراء عمليات تدويل (i18n – Internationalization). أولاً، تم بالفعل تعيين الإعدادات اللازمة في رأس الملف الرئيسي. Text Domain: my-first-pluginثم، يتم تحميل ملفات اللغة عند تهيئة الإضافة (أثناء بدء تشغيلها).

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

عادةً، نستخدم… plugins_loaded قم بتنفيذ الإجراءات اللازمة لتحميل الترجمة بشكل آمن. في الوقت نفسه، استخدم… __() أو _e() استخدم دوال مثل `wrap()` لتغليف جميع السلاسل النصية التي تحتاج إلى الترجمة.

function myfp_load_textdomain() {
    load_plugin_textdomain(
        'my-first-plugin',
        false,
        dirname(plugin_basename(__FILE__)) . '/languages/'
    );
}
add_action('plugins_loaded', 'myfp_load_textdomain');

وضع تطوير الإضافات المتقدمة (Advanced Plugin Development Mode)

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

استخدام برمجة التوجه الكائني (Object-Oriented Programming).

استخدام الفئات (classes) لتغليف جميع وظائف الإضافة (plugins) هو قرار حكيم. يمكن أن يساعد ذلك في تجنب تعارض أسماء الدوال (function names) ويوفر هيكلًا واضحًا للكود.

القراءة الموصى بها تحليل متعمق: تعلم أساسيات تطوير الإضافات في ووردبريس من الصفر إلى الممارسة العملية.

class My_Advanced_Plugin {
    public function __construct() {
        // 在构造函数中绑定所有钩子
        add_action('wp_footer', array($this, 'add_footer_notice'));
        add_filter('the_title', array($this, 'modify_post_title'));
    }

public function add_footer_notice() {
        echo '<p style="text-align:center;">يتم تقديم الدعم التقني من قبل My Advanced Plugin.</p>';
    }

public function modify_post_title($title) {
        if (in_the_loop()) {
            return '📝 ' . $title;
        }
        return $title;
    }
}
// 实例化插件类
new My_Advanced_Plugin();

إضافة صفحة لإعدادات واجهة الإدارة

تحتاج العديد من الإضافات (البرامج الإضافية) إلى توفير خيارات تكوين للمستخدمين. عادةً ما يتطلب إضافة صفحات الإعدادات في واجهة ووردبريس الخلفية (الواجهة الإدارية) استخدام أدوات أو خطوات معينة. add_menu_page() أو add_submenu_page() الدالة، بالإضافة إلى استخدام واجهة برمجة التطبيقات (API) Settings لحفظ الخيارات بشكل آمن.

class My_Plugin_Settings {
    public function __construct() {
        add_action('admin_menu', array($this, 'add_admin_menu'));
        add_action('admin_init', array($this, 'register_settings'));
    }

public function add_admin_menu() {
        add_options_page(
            '我的插件设置', // 页面标题
            '我的插件',     // 菜单标题
            'manage_options', // 权限
            'my-plugin-settings', // 菜单别名
            array($this, 'render_settings_page') // 回调函数
        );
    }

public function render_settings_page() {
        ?&gt;
        <div class="wrap">
            <h1>إعدادات الإضافة الخاصة بي</h1>
            <form method="post" action="/ar/options.php/" data-trp-original-action="options.php">
                <?php
                settings_fields('my_plugin_options_group');
                do_settings_sections('my-plugin-settings');
                submit_button();
                ?>
            <input type="hidden" name="trp-form-language" value="ar"/></form>
        </div>
        &lt;?php
    }

public function register_settings() {
        register_setting(&#039;my_plugin_options_group&#039;, &#039;my_plugin_option_name&#039;);
        // ... 添加设置字段和章节
    }
}

إنشاء جداول قاعدة بيانات مخصصة

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

الاستضافة المشتركة InterServer
استضافة مشتركة $2.50 دولار أمريكي في الشهر، الشهر الأول $0.1 دولار أمريكي الرمز الترويجي tryinterserver، 461 نص برمجي للتطبيقات السحابية، تثبيت بنقرة واحدة.

يوفر ووردبريس فئة مريحة للتعامل مع قواعد البيانات. wpdbعادةً ما يتم وضع كود إنشاء الجداول في ملف يتم تنفيذه عبر… (The code for creating tables is usually placed in a file that is executed via…) register_activation_hook في الدالة المسجلة.

function my_plugin_create_database_table() {
    global $wpdb;
    $table_name = $wpdb->prefix . 'my_custom_data';
    $charset_collate = $wpdb->get_charset_collate();

$sql = "CREATE TABLE $table_name (
        id mediumint(9) NOT NULL AUTO_INCREMENT,
        user_id mediumint(9) NOT NULL,
        data text NOT NULL,
        created_at datetime DEFAULT CURRENT_TIMESTAMP NOT NULL,
        PRIMARY KEY (id)
    ) $charset_collate;";

require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
    dbDelta($sql);
}
register_activation_hook(__FILE__, 'my_plugin_create_database_table');

أمان الإضافات وتوزيعها

قبل إطلاق أي إضافة (plugin)، يجب التأكد من أمانها، وفهم العمليات الأساسية المتعلقة بتوزيعها.

تنفيذ أفضل الممارسات الأمنية

جميع البيانات التي يتم استلامها من المستخدمين، سواء كانت من… $_GET$_POST لا يزال الأمر يتعلق بقواعد البيانات؛ يجب دائمًا التحقق من صحة البيانات وتنظيفها وتنفيذ عمليات التهريب (escaping) اللازمة عليها. استخدم دائمًا الدوال المتاحة في ووردبريس (WordPress) لهذه الأغراض. esc_html()wp_strip_all_tags()intval() أيضاً prepare() طرق لمعالجة استعلامات SQL لمنع هجمات XSS وتهديدات الاستيلاء على الكود من خلال الاستعلامات SQL (SQL Injection Attacks).

بالنسبة لفحوصات القدرة على تنفيذ المهام الإدارية أو العمليات الحرجة، يجب استخدام دوال فحص القدرة بالتأكيد، مثل… current_user_can('manage_options') أو check_ajax_referer()

أنا أعد الإضافة (البرنامج الإضافي) لتقديمها إلى الدليل الرسمي.

إذا كنت ترغب في توزيع الإضافة مجانًا على المستخدمين في جميع أنحاء العالم، فيمكنك تقديمها إلى مجلد الإضافات في موقع WordPress.org. هذا يتطلب منك الالتزام بمجموعة من المعايير، مثل استخدام نظام SVN للتحكم في الإصدارات، وضمان جودة الكود، وتوفير ملفات الترجمة، وغيرها. إضافة جيدة هي تلك التي تلبي هذه المتطلبات ب readme.txt الملف ضروري، وهو يتبع تنسيقًا معينًا يُستخدم لعرض المعلومات على صفحة تفاصيل الإضافة (plugin).

الملخصات

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

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

كم عدد الملفات الأدنى المطلوبة لإضافة (plugin)؟

يحتاج البرنامج المكمل (الإضافة) إلى ملف PHP واحد على الأقل. طالما أن هذا الملف يحتوي على معلومات رأس الملف الصحيحة الخاصة بالبرنامج المكمل، ويتم تخزينه في المكان المناسب… /wp-content/plugins/ في المجلد الرئيسي أو أي من مجلداته الفرعية، يمكن لبرنامج ووردبريس (WordPress) أن يتعرف على الملف ويقوم بتحميله.

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

ما الفرق بين "الخطافات" (hooks) و"المرشحات" (filters) في إضافات ووردبريس (WordPress plugins)؟

على الرغم من أن مصطلح “الخطافات” (Hooks) يُستخدم أحيانًا للإشارة إلى كل من خطافات الإجراءات (Action Hooks) وخطافات المرشحات (Filter Hooks)، إلا أن استخداماتهما مختلفة.

تسمح خطافات الإجراءات (Action Hooks) بإدراج كود مخصص الخاص بك في نقاط معينة من دورة حياة تنفيذ ووردبريس (WordPress). لا يتم توقع أي قيمة عائدة من هذه الخطافات؛ فهي مصممة فقط لتنفيذ مهمة معينة، مثل إرسال بريد إلكتروني أو تسجيل سجلات في النظام. الدال add_action() و do_action()

تسمح خيوط الفلاتر (filter hooks) بـ “تعديل” قيمة متغير معين (عادةً ما يكون سلسلة نصية أو مصفوفة). تتوقع هذه الخيوط أن تعيد دالة الاستدعاء الخاصة بك (callback function) قيمة معدلة. الدالة الأساسية في هذ add_filter() و apply_filters()

ببساطة: العملية (Action) تعني “القيام بشيء ما”, بينما الفلتر (Filter) يعني “تعديل البيانات”.

كيف يمكن منع تعارض أسماء دوال الإضافات (plugins) مع أسماء المواضيع (themes) أو الإضافات الأخرى؟

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

إذا تم استخدام البرمجة الإجرائية، فيجب إضافة بادئة فريدة وسهلة التمييز لجميع أسماء الدوال والثوابت والمتغيرات العامة الخاصة بك. عادةً ما يتم استخدام أسماء الإضافات أو الاختصارات كبادئات؛ على سبيل المثال، إذا كانت الإضافة الخاصة بك تسمى “Super Tool”, فيمكن أن تكون أسماء الدوال على النحو التالي: stool_get_data()stool_OPTION_KEY هكذا.

طريقة أخرى أكثر فعالية هي استخدام مساحات الأسماء (namespaces) في PHP، والتي تسمح بعزل كودك بشكل أمثل.

كيف يمكن التعامل مع إعدادات المستخدمين وخياراتهم أثناء تطوير الإضافات (plugins)؟

يوصي ووردبريس بشدة باستخدام واجهة برمجة التطبيقات (API) الخاصة به لإدارة خيارات الإضافات (plugins). تتولى هذه الواجهة مهمة تخزين الخيارات بشكل آمن، مما يضمن سلامة بيانات المستخدمين وأداء الإضافات wp_options معالجة البيانات في الجداول، وعدم إجراء عمليات التحقق من صحة البيانات (CE validation)، وعرض الحقول بشكل مناسب، بالإضافة إلى إرسال النماذج (form submission)، تمثل طريقة آمنة وموحدة لإدارة البيانات.

الخطوات الرئيسية تشمل: استخدام register_setting() قم بتسجيل مجموعة خيارات، واستخدمها. add_settings_section() و add_settings_field() أضف منطقة الإعدادات والحقول، ثم استخدمها في الجزء الأمامي (الواجهة البرمجية). settings_fields() و do_settings_sections() سيتم إنشاء نموذج الإعدادات الكامل بمجرد الضغط على زر الموافقة. عند حفظ الخيارات، يرجى استخدام… update_option() دالة.