لماذا نحتاج إلى تطوير إضافات مخصصة (custom plugins)؟
يشتهر ووردبريس (WordPress) بقدرته الكبيرة على التوسعة، وأحد أسرار نجاحه الأساسية هو نظام الإضافات (plugins). عندما تتجاوز احتياجات الموقع الوظيفية قدرات القوالب (templates) أو الإضافات المتوفرة مسبقًا، يصبح التطوير الذاتي الخيار الأمثل. وهذا يختلف تمامًا عن تعديل القوالب مباشرةً functions.php مقارنةً بإنشاء ملفات منفصلة، فإن إنشاء إضافة (plugin) مستقلة يوفر مزايا كبيرة. الإضافة مستقلة عن القوالب (themes)، مما يعني أنه حتى عند تغيير القالب، يمكن الحفاظ على وظائف الإضافة كاملة، مما يضمن استقلالية وسهولة صيانة تلك الوظائف. بالإضافة إلى ذلك، يمكن نقل الإضافة ذات الهيكل الجيد بسهولة بين مواقع الويب المختلفة وإعادة استخدامها، ويمكن أيضًا توزيعها عبر القنو
يتيح لك تطوير إضافات مخصصة (plugins) السيطرة الدقيقة على منطق الوظائف في موقع ووردبريس (WordPress)، مما يساعدك على تجنب الأعباء على الأداء الناتجة عن تثبيت عدد كبير من الإضافات العامة، بالإضافة إلى احتمالية حدوث تعارضات في الكود. بدءًا من إنشاء كود قصير وبسيط وحتى إدارة معالجة البيانات المعقدة وسير العمليات (workflows)، يفتح تطوير الإضافات أمامك إم
搭建你的第一个插件基础结构
من حيث المبدأ، يعتبر إضافة (plugin) لووردبريس (WordPress) عبارة عن ملف أو ملفات تقع في مسار معين داخل نظام ووردبريس، وتقوم بتوسيع وظائف الموقع الإلكتروني الذي يتم إنشاؤه باستخدام ووردبريس. هذه الإ wp-content/plugins/ ملفات PHP الموجودة في المجلد. الخطوة الأولى في إنشاء إضافة (plugin) هي إنشاء هيكلها الأساسي.
القراءة الموصى بها دليل للبدء في تطوير إضافات ووردبريس: كيفية بناء أول إضافة وظيفية الخاصة بك من الصفر。
إنشاء ملف الإضافة الرئيسية وإضافة تعليقات في البداية (header comments)
أولاً، في… wp-content/plugins/ قم بإنشاء مجلد جديد داخل المجلد الحالي، على سبيل المثال: my-first-pluginثم، قم بإنشاء الملف الرئيسي للغة PHP داخل هذا المجلد، وعادةً ما يكون اسمه مطابقًا لاسم المجلد نفسه:my-first-plugin.php。
يجب أن يحتوي بداية الملف على تعليقات رأس الإضافة (plugin header comments) التي تتوافق مع معايير ووردبريس، وهي أمر أساسي لتعرف ووردبريس على الإضافات. توفر هذه التعليقات معلومات أساسية عن الإضافة وسيتم عرضها في صفحة إدارة الإضافات في الواجهة الخلفية.
<?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
* Domain Path: /languages
*/ بعد حفظ الملف، قم بتسجيل الدخول إلى واجهة خلفية WordPress، ثم اذهب إلى صفحة “الإضافات” (Plugins). يجب أن ترى إضافة بعنوان “أول إضافة مخصصة لي” (My First Custom Plugin) موجودة في القائمة، ويمكنك تفعيلها أو تعطيلها حسب رغبتك. في الوقت الحالي، لا تحتوي هذه الإضافة على أي وظائف فعلية.
إنشاء غلاف أمني لوظائف الإضافات (Plugins)
لتجنب حدوث تعارض بين أسماء الدوال والمواضيع أو الإضافات الأخرى، فإن أفضل الممارسات هي تجميع جميع الوظائف داخل فئة واحدة، أو إضافة بادئات فريدة لكل دالة. في هذا المثال، نستخدم طريقة الفئات، والتي توفر تغليفًا أفضل وهيكلًا تنظيميًا أف
في الملف الرئيسي، بعد التعليقات في الجزء العلوي، يمكننا البدء في تعريف الفئة الرئيسية للإضافة (plugin).
القراءة الموصى بها دليل شامل لتطوير إضافات ووردبريس: كيفية إنشاء أول إضافة وظيفية الخاصة بك من الصفر。
if ( ! defined( 'ABSPATH' ) ) {
exit; // 防止直接访问文件
}
class My_First_Plugin {
/**
* 构造方法,用于初始化插件
*/
public function __construct() {
// 初始化钩子
$this->init_hooks();
}
/**
* 初始化 WordPress 钩子(动作和过滤器)
*/
private function init_hooks() {
// 后续的钩子将在这里添加
}
}
// 初始化插件
new My_First_Plugin(); من خلال if ( ! defined( 'ABSPATH' ) ) هذا السطر من الكود يضمن أن الملف يمكن الوصول إليه فقط من خلال بيئة ووردبريس (WordPress)، مما يزيد من مستوى الأمان. الآن، الإطار الأساسي للإضافة (البرنامج الإضافي) جاهز بالفعل.
استخدام الخطافات (hooks) لتوسيع الميزات الأساسية لووردبريس
جوهر واجهة برمجة التطبيقات (API) لإضافات ووردبريس (WordPress Plugins API) يتمثل في “الخطافات” (Hooks)، والتي تسمح لك بتنفيذ كود مخصص في أوقات معينة أو على بيانات محددة. تنقسم الخطافات إلى نوعين: الإجراءات (Actions) والمرشحات (Filters).
فهم المطلوب وإضافة خطاف (hook) لتنفيذ إجراء بسيط.
مخالب الأفعال (Action Hooks) تقوم بتنفيذ الكود الخاص بك عند حدوث أحداث معينة، مثل نشر مقال أو تحميل صفحة الإدارة، وما إلى ذلك. لا تعيد أي قيم، بل تقوم فقط بتنفيذ المهام المطلوبة.
دعونا نضيف ميزة: إضافة نص مخصص تلقائيًا في نهاية محتوى كل مقالة. سنستخدم… the_content هذا المرشح (نعم، على الرغم من أن اسمه “مرشح”, إلا أنه غالبًا ما يُستخدم لإضافة المحتوى؛ ومن الناحية التقنية، فهو يعتبر مرشحًا لأنه يستقبل المحتوى ويعيده)… ولكن من أجل توضيح عملية بسيطة أولاً، سنقوم أيضًا بإضافة خاصية تظهر الرسائل في شريط الإدارة في الخلفية.
أولاً، في… init_hooks إضافة خطوة تسجيل الاستجابات (hook registration) داخل الطريقة (method):
private function init_hooks() {
// 在文章内容末尾添加信息的过滤器
add_filter( 'the_content', array( $this, 'append_custom_text' ) );
// 在管理栏添加节点的动作
add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_node' ), 999 );
} ثم، قم بتعريف الطريقة المقابلة للمكالمة العكسية (callback method) داخل الفئة (class):
القراءة الموصى بها الدليل الكامل لتطوير إضافات ووردبريس: من المبتدئ إلى الاحتراف في بناء وظائف مخصصة。
/**
* 在文章内容末尾添加自定义文本(过滤器回调)
*
* @param string $content 原始文章内容。
* @return string 修改后的文章内容。
*/
public function append_custom_text( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$custom_text = '<p><em>تم توفير الدعم التقني لهذا المقال من قبل “أول إضافة لي” (My First Plugin).</em></p>';
$content .= $custom_text;
}
return $content;
}
/**
* 在管理工具栏添加一个自定义节点(动作回调)
*
* @param WP_Admin_Bar $wp_admin_bar WordPress 管理栏对象。
*/
public function add_admin_bar_node( $wp_admin_bar ) {
$args = array(
'id' => 'my_plugin_node',
'title' => '我的插件',
'href' => admin_url( 'plugins.php' ),
'meta' => array( 'class' => 'my-plugin-node' )
);
$wp_admin_bar->add_node( $args );
} الآن، بعد تفعيل الإضافة، سيظهر النص المضاف في أسفل كل مقالة على الواجهة الأمامية، كما سيظهر خيار “إضافاتي” في شريط الإدارة العلوي على الواجهة الخلفية.
استخدم المرشحات لتعديل نتائج إخراج البيانات.
تُستخدم المرشحات (Filters) لتعديل البيانات التي تمر عبر نقطة معينة. فهي تتلقى قيمة ما، ويجب عليها إرجاع القيمة المعدلة بعد ذلك. لقد استخدمناها في المثال السابق. append_custom_text في الواقع، الطريقة (method) هي مجرد دالة تعتبر مكالمة مرتدة (callback) لمرشح (filter). دعونا ننشئ مثالًا أكثر تمثيلاً على استخدام المرشحات: تعديل طول ملخص المقال.
في init_hooks أضف إلى النص:
add_filter( 'excerpt_length', array( $this, 'custom_excerpt_length' ), 999 ); ثم قم بتعريف طريقة الاستدعاء العكسي (callback method):
/**
* 修改文章摘要的默认字数长度
*
* @param int $length 默认的摘要长度。
* @return int 修改后的摘要长度。
*/
public function custom_excerpt_length( $length ) {
// 将摘要长度设置为 30 个字
return 30;
} تنفيذ صفحة خيارات إضافية قابلة للتكوين
لجعل الإضافات أكثر مرونة، من الضروري عادةً توفير صفحة إعدادات للمستخدمين. يوفر ووردبريس “واجهة برمجة التطبيقات (API) للإعدادات” لإنشاء صفحات الخيارات بطريقة آمنة وموحدة.
إنشاء قائمة إدارية وصفحات فرعية
أولاً، نحتاج إلى إضافة عنصر قائمة في واجهة خلفية ووردبريس (WordPress backend). سنستخدم… add_options_page تقوم الدالة بإضافة صفحة فرعية تحت القائمة الرئيسية “الإعدادات”.
في init_hooks أضف إجراءً في المنتصف:
add_action( 'admin_menu', array( $this, 'add_plugin_admin_menu' ) ); طريقة إضافة قائمة:
/**
* 向 WordPress 后台添加插件设置页面
*/
public function add_plugin_admin_menu() {
add_options_page(
'我的插件设置', // 页面标题
'我的插件', // 菜单标题
'manage_options', // 所需权限
'my-first-plugin', // 菜单 Slug
array( $this, 'display_plugin_admin_page' ) // 回调函数
);
} استخدم واجهة برمجة التطبيقات (API) للإعدادات لتسجيل الحقول وعرضها.
بعد ذلك، نحتاج إلى تحديد… display_plugin_admin_page طرق لعرض محتوى الصفحة، بالإضافة إلى تسجيل الإعدادات والحقول والفصول.
أولاً، أضف خطافًا آخر لتسجيل الإعدادات:
add_action( 'admin_init', array( $this, 'register_plugin_settings' ) ); ثم قم بتنفيذ الطرق ذات الصلة:
/**
* 使用 WordPress 设置 API 注册设置、字段和章节
*/
public function register_plugin_settings() {
// 注册一个设置,存储到一个选项 `my_first_plugin_options`
register_setting(
'my_first_plugin_options_group', // 选项组名
'my_first_plugin_options' // 选项名
);
// 添加一个设置章节
add_settings_section(
'my_first_plugin_main_section', // 章节 ID
'主要设置', // 章节标题
array( $this, 'render_section_description' ), // 章节描述回调
'my-first-plugin' // 页面 Slug
);
// 向章节中添加一个文本字段
add_settings_field(
'custom_text_field', // 字段 ID
'自定义文本', // 字段标题
array( $this, 'render_text_field' ), // 字段渲染回调
'my-first-plugin', // 页面 Slug
'my_first_plugin_main_section' // 所属章节 ID
);
}
/**
* 渲染设置章节的描述文字
*/
public function render_section_description() {
echo '<p>قم بتكوين إعدادات أول إضافة (plugin) الخاصة بك هنا.</p>';
}
/**
* 渲染自定义文本输入字段
*/
public function render_text_field() {
$options = get_option( 'my_first_plugin_options' );
$value = isset( $options['custom_text_field'] ) ? $options['custom_text_field'] : '';
echo '<input type="text" name="my_first_plugin_options[custom_text_field]" value="' . esc_attr( $value ) . '" class="regular-text" />'echo '<p class="description">النص المدخل هنا سيتم عرضه في نهاية المقال.</p>';
}
/**
* 渲染插件管理页面的主要内容
*/
public function display_plugin_admin_page() {
// 检查用户权限
if ( ! current_user_can( 'manage_options' ) ) {
return;
}
?>
<div class="wrap">
<h1></h1>
<form action="/ar/options.php/" method="post" data-trp-original-action="options.php">
<?php
// 输出安全字段、章节和字段
settings_fields( 'my_first_plugin_options_group' );
do_settings_sections( 'my-first-plugin' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
أنا لا أعرف ماذا أقول. أخيرًا، نحتاج إلى تعديل المحتوى السابق. append_custom_text طريقة لقراءة النص الذي حفظه المستخدم من بين الخيارات:
public function append_custom_text( $content ) {
if ( is_single() && in_the_loop() && is_main_query() ) {
$options = get_option( 'my_first_plugin_options' );
$custom_text = isset( $options['custom_text_field'] ) && ! empty( $options['custom_text_field'] ) ?
'<p><em>'`. esc_html($options['custom_text_field'])`.'</em></p>' :
'<p><em>تم توفير الدعم التقني لهذا المقال من قبل “أول إضافة لي” (My First Plugin).</em></p>';
$content .= $custom_text;
}
return $content;
} الآن، يمكن للمستخدمين تخصيص النص الذي يظهر في نهاية المقالات من خلال الذهاب إلى صفحة “الإعدادات” -> “إضافاتي”.
الملخصات
من خلال هذا الدليل، قمنا بشكل كامل بمتابعة الخطوات الأساسية لتطوير إضافة مخصصة لـ WordPress: بدءًا من إنشاء هيكل الملفات الأساسي وتغليف الكود بطريقة آمنة، مرورًا بفهم آليات التوسعة الأساسية في WordPress (مثل مخالب الأفعال والمرشحات)، وانتهاءً بإنشاء إضافة قابلة للتكوين تتضمن صفحات للإعدادات الخلفية. لقد عرضنا أيضًا كيفية استخدام واجهة برمجة التطبيقات (API) الخاصة بإعدادات WordPress بشكل صحيح لإنشاء صفحات الخيارات، مما يضمن تخزين البيانات بأمان وتوحيد واجهة المستخدم.
إتقان هذه المعرفة الأساسية يعتبر خطوة مهمة نحو تطوير إضافات (plugins) أكثر تعقيدًا. فيما بعد، يمكنك استكشاف مواضيع أكثر تقدمًا، مثل تخصيص جداول قواعد البيانات، وإنشاء أكواد مختصرة (shortcodes)، وإضافة أدوات مساعدة (widgets)، وكتابة نقاط نهاية لبروتوكول REST (REST API endpoints)، وتنفيذ تفاعلات AJAX. تذكر أن تنظيم الكود بشكل جيد، وإجراء فحوصات أمان شاملة (مثل التحقق من الصلاحيات، وتنظيف البيانات، وتهيئتها بشكل صحيح)، بالإضافة إلى الالتزام بمعايير ترميز ووردبريس (WordPress coding standards)، كلها عوامل أساسية لتطوير إضافات عالية الجودة وسهلة الصيانة.
الأسئلة الشائعة الأسئلة المتداولة
ما هي المعرفة المسبقة الضرورية لتطوير الإضافات (plugins)؟
يجب أن تمتلك معرفة أساسية بلغة البرمجة PHP، وتشمل هذه المعرفة المفاهيم مثل القواعد النحوية، المتغيرات، الدوال، الكلاسات، والكائنات. سيكون من المفيد أيضًا أن يكون لديك فهم أساسي للغات HTML وCSS وJavaScript، خاصةً عند إنشاء إضافات (plugins) تتضمن تفاعلات من جانب المستخدم أو واجهات خلفية معقدة. من الضروري جدًا أن تكون على دراية بالعمليات الأساسية والهيكل الأساسي لنظام ووردبريس (WordPress).
كيفية تصحيح الأخطاء (الديباجج) في الإضافة (البرنامج الإضافي) التي يتم تطويرها حاليًا؟
أولاً، تأكد من أنك قمت بتنفيذ الخطوات اللازمة في… wp-config.php سيتم تضمين الوثيقة في الملف. WP_DEBUG تم تعيينها كـ trueسيؤدي ذلك إلى تفعيل خاصية تقارير الأخطاء في ووردبريس. يمكنك استخدام أدوات المطور في المتصفح (علامتي التبويب Console وNetwork) لفحص أخطاء جافا سكريبت وطلبات الشبكة. أما بالنسبة لكود PHP، فيمكنك استخدام… error_log() تقوم الدالة بتسجيل المتغيرات أو المعلومات في سجلات التصحيح (debug logs) على الخادم، أو تستخدم إضافات تصحيح متخصصة لتتبع تدفق تنفيذ الكود وحالة المتغيرات.
هل يمكن نقل كود ملف functions.php الخاص بالموضوع مباشرة إلى الإضافة (plugin)؟
في العديد من الحالات، يمكن ذلك، ولكن يجب الانتباه إلى مسائل استخدام المسارات (paths) وعناوين الروابط (URLs). يمكن استخدام ذلك داخل المواضيع (topics). get_template_directory_uri() للحصول على URI لدليل المواضيع، يجب تغيير الكود المستخدم داخل الإضافة (البرنامج الإضافي) ليستخدم هذا ال URI بدلاً من الكود الحالي. plugin_dir_url(FILE)وبالمثل، دالة مسار دليل المواضيع get_template_directory() يجب أيضًا استبدالها بالإضافات (plugins). plugin_dir_path(FILE)بالإضافة إلى ذلك، يجب التأكد من أن جميع الوظائف الموجودة في الكود مغلفة بشكل صحيح داخل كلاسات أو دوال مُسبقة التسمية (باستخدام بادئات معينة)، من أجل تجنب حدوث تعارضات بينها.
ما هي الأمور التي يجب الانتباه إليها عند تطوير إضافات تجارية؟
يجب أن تولي خطط التطوير للإضافات التجارية اهتمامًا أكبر بجودة الكود والأمان والقابلية للتوسعة. كما يجب القيام بالتحضيرات الشاملة للتدويل والتكييف مع اللغات المحلية (باستخدام…). __()、_e() يجب أن تشمل الميزات الرئيسية للإضافة دوال وحقول نصوصية (text fields)، من أجل سهولة الترجمة. يجب أن يتبع الكود معايير ترميز ووردبريس (WordPress coding standards). من الضروري أيضًا مراعاة شروط الترخيص (عادةً ما تكون GPL) وآليات التحديث اللاحقة. توفير وثائق استخدام واضحة ومفصلة بالإضافة إلى قنوات دعم فني للإضافة أمر بالغ الأهمية. في بيئة ووردبريس لعام 2026، من المهم جدًا ضمان توافق الإضافة مع الإصدارات الجديدة من ووردبريس ولغة PHP، بالإضافة إلى التصاميم الشائعة والإضافات الأخرى، كجزء من عملية الصيانة المستمرة.
كيفية إضافة دعم لللغات المتعددة إلى الإضافة (Plugin)
يستخدم WordPress تقنية GNU gettext لتحقيق التدويل (i18n). أولاً، يجب أن تُغلف جميع النصوص التي تحتاج إلى ترجمة داخل الإضافات (plugins) باستخدام دوال معينة. __('文本', 'my-first-plugin') يُستخدم للحصول على الترجمة،_e('文本', 'my-first-plugin') يتم استخدامه لإخراج الترجمة، ثم يتم استخدام أداة مثل Poedit لمسح كود مصدر الإضافة (البرنامج الإضافي) وإنشاء نسخة مترجمة منه. .pot ملف القالب. قام المترجم بإنشاء الملف باللغة المطلوبة استنادًا إلى هذا القالب. .po الملفات، ثم تُترجم إلى شكل يمكن للآلة قراءته. .mo الملفات… أخيرًا، من الضروري أن… load_plugin_textdomain() تم دمج الدالة في كود تهيئة الإضافة (plugin initialization code) لتحميل ملفات الترجمة من المسار الصحيح.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- كيفية اختيار وتخصيص تصميم ووردبريس المثالي الذي يناسب احتياجاتك؟
- دليل تطوير إضافات ووردبريس: كيف تبني إضافتك المخصصة الأولى من الصفر
- كيف تصبح مطورًا لإضافات ووردبريس: دليل شامل من الصفر إلى النهاية
- من الصفر إلى الواحد: دليل شامل وخطوات عملية لبناء مواقع إلكترونية مهنية باستخدام WordPress
- دليل شامل لتطوير إضافات ووردبريس: من المبتدئين إلى الخبراء في إنشاء إضافات متخصصة