فهم البنية الأساسية لإضافات ووردبريس (WordPress Plugins)
قبل البدء في كتابة الكود، من المهم أن تفهم التركيب الأساسي لمكونات ووردبريس. يُعد المكون في الأساس ملفًا واحدًا أو أكثر من ملفات PHP، وتوجد هذه الملفات في/wp-content/plugins/تحت قسم "التنقل"، يمكن توسيع الوظائف الأساسية باستخدام واجهة برمجة التطبيقات (API) التي يقدمها ووردبريس. يحتوي البرنامج المساعد على ملف رئيسي يجب أن يشتمل على تعليقات رأس محددة، حتى يتسنى لووردبريس التعرف عليه وإدارته.
تركيب الملف الرئيسي للإضافة.
عادةً ما تكون نقطة الدخول للإضافة ملف PHP يحمل نفس اسم الإضافة. يجب أن يحتوي رأس هذا الملف على تعليقات قياسية من أجل تزويد ووردبريس بمعلومات وصفية. يجب أن تتضمن هذه التعليقات على الأقل اسم الإضافة، والوصف، والإصدار، والمؤلف، والترخيص. على سبيل المثال، إذا كانت الإضافة تسمى “My Custom Widget”، فسيكون ملفها الرئيسي كالتالي:my-custom-widget.phpقد يكون بداية ذلك على النحو التالي:
<?php
/**
* Plugin Name: My Custom Widget
* Plugin URI: https://www.example.com/my-custom-widget
* Description: 这是一个用于演示的自定义小工具插件。
* Version: 1.0.0
* Author: Your Name
* Author URI: https://www.example.com
* License: GPL v2 or later
* Text Domain: my-custom-widget
*/ في هذا التعليق، يعد “اسم المكوّن” الحقل الوحيد الإلزامي لتحديد المكوّن في WordPress. على الرغم من أن الحقول الأخرى اختيارية، إلا أنه يُنصح بملءها بالكامل من أجل تحقيق الاتساق والقابلية للصيانة في المكوّن. يُستخدم حقل “نطاق النص” للتدويل، وهو أمر أساسي لإضافة دعم متعدد اللغات إلى المكوّن لاحقًا.
القراءة الموصى بها دليل تطوير إضافات ووردبريس: بناء وحدات وظيفية مخصصة من الصفر。
أفضل الممارسات لهيكل دليل الإضافات.
بالنسبة للإضافات البسيطة، قد يكون ملف PHP واحدًا كافيًا. ولكن بالنسبة للإضافات المعقدة، فإن هيكل الدليل الواضح والمُنظّم أمر ضروري. قد يحتوي دليل الإضافة المحترف النموذجي على الأجزاء التالية:
- الملف الرئيسي (
plugin-name.php(n) : ملف التوجيه للإضافة، والذي يحتوي على تعليقات رأس الملف والمنطق الأساسي أو المحمّل. includes/أوsrc/: دليل، يستخدم لتخزين ملفات فئات PHP الأساسية ووحدات الوظائف.admin/أما الدليل، فهو مخصص لتخزين الشفرات والصفحات ذات الصلة بواجهة الإدارة الخلفية.public/أوfrontend/المحتوى، حيث يتم تخزين الشفرة البرمجية التي تتعامل مع عرض الجزء الأمامي للموقع الإلكتروني.assets/المحتوى، الذي يشمل الموارد الثابتة مثل جافا سكريبت، وCSS، والصور.languages/: الدليل، حيث تُخزن ملفات الترجمة الدولية (ملفات .po/.mo).uninstall.phpملف اختياري ولكن موصى به، يُستخدم لتنظيف خيارات قاعدة البيانات وغيرها من البيانات عندما يحذف المستخدم الإضافة.
هذا النهج التنظيمي المُنظّم لا يُسهّل فقط صيانة الكود والتعاون بين الفريق، بل إنه يتوافق أيضًا مع أفضل الممارسات في تطوير PHP الحديث.
إتقان أدوات التطوير الأساسية: الأكشنات والفلاتر والخطافات.
الفلسفة الأساسية لتطوير المكونات الإضافية في ووردبريس هي “الخطافات (Hooks)”. تسمح آلية الخطافات لمكونك الإضافي بأن “يتدخل” في العمليات الأساسية لووردبريس في نقاط زمنية محددة، مما يسمح لك بتعديل أو إضافة وظائف دون الحاجة إلى تعديل الشفرة الأساسية مباشرةً. تنقسم الخطافات بشكل أساسي إلى نوعين: خطافات الإجراء (Action Hooks) وخطافات الفلتر (Filter Hooks).
استخدام خطافات الإجراءات.
تقوم خطافات الإجراءات بتنفيذ شفرتك المخصصة عند حدوث أحداث معينة. على سبيل المثال، عند نشر مقالة، أو عند تهيئة قائمة لوحة التحكم. استخدمadd_action()يمكن للوظائف “تثبيت” وظيفتك على خطة عمل.
افترض أنك تريد إضافة إشعار حقوق الطبع والنشر تلقائيًا في نهاية كل مقالة. يمكنك استخدامthe_contentهذا الفلتر (لاحظ أن هذا في الواقع فلتر، ولكن طريقة استخدامه مشابهة)، ولكن المثال الأكثر شيوعًا للعمل هو تسجيل الدخول بعد تسجيل دخول المستخدم. فيما يلي مثال على استخدام مُعلقات الإجراءات.wp_footerمثال على إخراج المعلومات في تذييل موقع الويب:
القراءة الموصى بها إتقان تطوير إضافات ووردبريس: بناء وظائف مخصصة من الصفر。
function myplugin_add_footer_text() {
echo '<p style="text-align:center;">شكرًا لاستخدامك لهذا الموقع!</p>';
}
add_action( 'wp_footer', 'myplugin_add_footer_text' ); عندما يصل ووردبريس إلى هذه الخطوة،wp_footerهذه هي اللحظة الحاسمة (عادةً ما تكون في بداية الموضوع).footer.phpيتم استدعاء الدالة main() في السطر 10.wp_footer()إذا قمنا باستدعاء الدالة main()، فسيتم تشغيل جميع الدالات المُعلّقة عليها، بما في ذلك الدالة التي قمنا بتعريفها للتو.myplugin_add_footer_text。
استخدام مُعلقات الفلتر.
تُستخدم مرشحات الخطافات لتعديل البيانات. تتلقى متغيرًا، وبعد معالجته بواسطة وظيفتك، يجب أن تعيد المتغير المعدل. هذه واحدة من أقوى الطرق لتغيير السلوك الافتراضي لـ WordPress. استخدمadd_filter()يتم تنفيذ الدالة للتثبيت.
على سبيل المثال، لتعديل طول ملخص المقالة، يمكنك استخدامexcerpt_lengthالمرشحات:
function myplugin_custom_excerpt_length( $length ) {
// 将默认的55个单词改为20个单词
return 20;
}
add_filter( 'excerpt_length', 'myplugin_custom_excerpt_length' ); مثال استخدام آخر شائع هو تعديل محتوى المقالات. يضيف الشفرة التالية مربعًا للتنبيه أمام جميع محتويات المقالات:
وظيفة myplugin_add_content_notice( $content ) {
إذا ( is_single( ) ) { {
$notice = '<div class="notice">هذا المقال محتوى أصلي؛ يرجى ذكر المصدر عند إعادة نشره.</div>';
$content = $notice . $content .
}
إرجاع $content.
}
add_filter( 'the_content', 'myplugin_add_content_content_notice' ); فهم مختلف الخطافات واستخدامها بشكل ماهر هو أمر أساسي لأن تصبح مطور WordPress فعالاً. توفر دليل الإضافات الرسمي لـ WordPress قائمة كاملة بجميع الخطافات المتاحة.
بناء واجهة إدارة خلفية للمكوّنات الإضافية.
يتطلب معظم المكونات الإضافية صفحة إعداد، حتى يتمكن مشرفو الموقع من تحديد الخيارات. توفر ووردبريس واجهة برمجة تطبيقات غنية لإنشاء صفحات إدارية جميلة وموحدة.
القراءة الموصى بها إتقان تطوير إضافات ووردبريس: بناء أول وحدة وظيفية توسعية الخاصة بك من الصفر。
إنشاء قائمة وصفحة إدارية رئيسية.
الاستفادة منadd_menu_page()يمكن للوظيفة أن تضيف عنصر قائمة رئيسي إلى الشريط الجانبي في الخلفية للمكون الإضافي الخاص بك، مع صفحة الإعدادات المقابلة. تتطلب هذه الوظيفة منك تحديد عنوان الصفحة، وعنوان القائمة، والأذونات، واسم القائمة، والدالة الارتدادية، وغيرها من المعلمات.
يوضح مثال الشفرة التالي إنشاء صفحة قائمة رئيسية باسم “إعدادات المكون الإضافي الخاص بي”:
الوظيفة myplugin_add_admin_menu() {
add_menu_page(
'إعدادات مكوّني الإضافي'، // عنوان الصفحة
'مكوّني الإضافي'، // عنوان القائمة
'manage_options'، // الأذونات (عادةً manage_options، مرئية للإداريين فقط)
'myplugin-settings'، // اسم الوصلة (slug)، يُستخدم في عنوان URL
'myplugin_settings_page_html'، // دالة لعرض محتوى الصفحة
'dashicons-admin-generic'، // أيقونة القائمة (باستخدام Dashicons)
80 // موضع القائمة
);
}
add_action( 'admin_menu'، 'myplugin_add_admin_menu' );
// تعريف دالة عرض محتوى الصفحة
function myplugin_settings_page_html() {
// التحقق من أذونات المستخدم
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
// 输出设置字段、非ces等(需要与settings API配合使用)
settings_fields( 'myplugin_options' );
do_settings_sections( 'myplugin-settings' );
submit_button( '保存设置' );
?>
<input type="hidden" name="trp-form-language" value="ar"/></form>
</div>
أنا لا أعرف ماذا أقول. استخدم واجهة برمجة التطبيقات (API) للتعامل مع الخيارات بأمان.
يوجد مخاطر أمنية في استخدام النماذج مباشرةً لإرسال البيانات. توفر واجهة برمجة التطبيقات لإعدادات WordPress مجموعةً من الطرق الآمنة والموحّدة لتسجيل خيارات الإعداد والتحقق منها وحفظها. تتولى هذه الواجهة تلقائياً معالجة التحقق من nonce وفحص الأذونات وتنظيف البيانات.
يتضمن استخدام واجهة برمجة التطبيقات (API) للإعدادات عادةً ثلاث خطوات:
١. إعدادات التسجيل: استخدمها.register_setting()تحديد مجموعة من الخيارات ومكالمات التحقق منها أيضًا.
٢. إضافة قسم الإعدادات: استخدم…add_settings_section()أضف كتلة إلى الصفحة.
٣. إضافة حقول الإعدادات: استخدمها.add_settings_field()أضف حقول إدخال محددة داخل الكتلة.
فيما يلي مثال مبسط يوضح كيفية تسجيل حقل خيار نصي:
function myplugin_settings_init() {
// 1. 注册一个设置选项组
register_setting( 'myplugin_options', 'myplugin_options_field', array(
'sanitize_callback' => 'myplugin_sanitize_text_field' // 清理函数
) );
// 2. 添加一个设置区块
add_settings_section(
'myplugin_section_main',
'主要设置',
null, // 可选的区块描述回调函数
'myplugin-settings'
);
// 3. 为区块添加一个字段
add_settings_field(
'myplugin_field_text',
'示例文本',
'myplugin_field_text_html', // 渲染字段HTML的回调函数
'myplugin-settings',
'myplugin_section_main',
array( 'label_for' => 'myplugin_field_text' )
);
}
add_action( 'admin_init', 'myplugin_settings_init' );
// 字段渲染函数
function myplugin_field_text_html() {
$options = get_option( 'myplugin_options_field' );
$value = isset( $options['text'] ) ? $options['text'] : '';
?>
<input type="text" id="myplugin_field_text" name="myplugin_options_field[text]" value="<?php echo esc_attr( $value ); ?>" class="regular-text">
<?php
}
// 数据清理函数
function myplugin_sanitize_text_field( $input ) {
$sanitized_input = array();
if ( isset( $input['text'] ) ) {
$sanitized_input['text'] = sanitize_text_field( $input['text'] );
}
return $sanitized_input;
} تحقيق الوظائف الأمامية للإضافة والرموز القصيرة.
لا تقتصر الإضافات على الخلفية، بل إنها تقدم وظائف لواجهة الموقع أيضًا. بالإضافة إلى تعديل المحتوى من خلال الخطافات كما ذكر سابقًا، تعد الشفرات القصيرة (Shortcode) أداة قوية لتقديم وظائف ديناميكية لمحرري المحتوى وملفات القالب.
إنشاء واستخدام الرموز القصيرة.
تسمح الرموز المختصرة (Short Codes) للمستخدمين باستخدام علامة بسيطة (مثل…) للقيام بمهام معينة أو الوصول إلى خدمات محددة.[my_gallery]إدراج وظائف معقدة في مقالة أو صفحة. استخدمadd_shortcode()استخدم الدالة لتسجيل رمز قصير.
يقوم الكود التالي بإنشاء رمز قصير بسيط يُستخدم لعرض زر يحتوي على تحية مخصصة:
دالة myplugin_hello_shortcode( $atts, $content = فارغ ) { {
// تحليل سمات الرمز القصير وتوفير القيم الافتراضية
$attributes = shortcode_atts(
صفيف(
'اسم' => 'زائر',
'اللون' => 'أزرق'.
),
$atts,
'مرحبًا' // علامة الرمز القصير
);
// تأمين قيمة اللون
$colour = esc_attr( $attributes['color'] )؛
$name = esc_html( $attributes['name'] )؛ // تأمين قيمة اللون
// بناء الإخراج
$output = '<button style="background-color: ' . $color . '; padding: 10px; color: white; border: none;">';.
$output . = 'مرحبًا،' . $name . '!' ;
$output . = '</button>';
// إذا كان الرمز القصير مغلقًا (بمحتوى)، قم بتضمين المحتوى
إذا ( ! is_null( $content ) { {
$output . = '<div>' . do_shortcode ( $content ) . '</div>';
}
إرجاع $output.
}
add_shortcode( 'مرحبًا'، 'myplugin_hello_shortcode' ); يمكن للمستخدمين استخدام ذلك في محرر المقالات على النحو التالي:
* [hello name="张三" color="red"]
* [hello]点击我![/hello]
إضافة أدوات مخصصة للإضافة.
العناصر الجانبية (Widgets) هي كتل محتوى في مناطق مثل الشريط الجانبي أو تذييل الصفحة في WordPress. لإنشاء فئة عناصر جانبية مخصصة، يجب توسيعها.WP_Widgetيجب على الطبقة الأساسية أن تنفذ عدة طرق رئيسية: طريقة الإنشاء، وطريقة الإخراج للواجهة الأمامية، وطريقة تحديث النموذج.
إنشاء أداة صغيرة بسيطة تعرض عناوين المقالات الأخيرة:
class Myplugin_Recent_Posts_Widget extends WP_Widget {
// 构造方法:定义小工具ID、名称和描述
public function __construct() {
parent::__construct(
'myplugin_recent_posts',
'我的插件:近期文章',
array( 'description' => '显示您网站的最新文章列表。' )
);
}
// 前端显示逻辑
public function widget( $args, $instance ) {
echo $args['before_widget'];
if ( ! empty( $instance['title'] ) ) {
echo $args['before_title'] . apply_filters( 'widget_title', $instance['title'] ) . $args['after_title'];
}
$posts = get_posts( array( 'numberposts' => $instance['number'] ?: 5 ) );
echo '<ul>';
foreach ( $posts as $post ) {
setup_postdata( $post );
echo '<li><a href="/ar/' . get_permalink( $post->ID ) . '/">' . get_the_title( $post->ID ) . '</a></li>';
}
wp_reset_postdata();
echo '</ul>'echo $args['after_widget'];
}
// نموذج الأدوات الصغيرة في الخلفية
public function form( $instance ) {
$title = ! empty( $instance['title'] ) ? $instance['title'] : 'المقالات الأخيرة';
$number = ! empty( $instance['number'] ) ? $instance['number'] : 5;
?>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>">العنوان:</label>
<input class="widefat" id="<?php echo esc_attr( $this->get_field_id( 'title' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'title' ) ); ?>" type="text" value="<?php echo esc_attr( $title ); ?>">
</p>
<p>
<label for="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>">عدد المقالات المعروضة:</label>
<input id="<?php echo esc_attr( $this->get_field_id( 'number' ) ); ?>" name="<?php echo esc_attr( $this->get_field_name( 'number' ) ); ?>" type="number" min="1" value="<?php echo esc_attr( $number ); ?>">
</p>
؟؟؟؟php
}
// تحديث إعدادات الأداة الصغيرة
public function update( $new_instance, $old_instance ) {
$instance = array();
$instance['title'] = ( ! empty( $new_instance['title'] ) ) ? sanitize_text_field( $new_instance['title'] ) : '';
$instance['number'] = ( ! empty( $new_instance['number'] ) ) ? absint( $new_instance['number'] ) : 5;
return $instance;
}
}
// تسجيل هذه الأداة الصغيرة
function myplugin_register_widget() {
register_widget( 'Myplugin_Recent_Posts_Widget' );
}
add_action( 'widgets_init', 'myplugin_register_widget' ); الملخصات
تطوير إضافات WordPress هو عملية تجمع بين برمجة PHP وفهم عميق للبنية الأساسية لـ WordPress. تتمثل نقطة البداية الناجحة في إنشاء بنية ملفات تتوافق مع المعايير ورأس الملف الرئيسي. بعد ذلك، يعد إتقان خطوات "hook actions" و"hook filters" أمرًا أساسيًا لاستغلال قدرات التوسعة القوية لـ WordPress، حيث تسمح لك بتدخل شفرتك في اللحظة المناسبة أو تعديل تدفق البيانات. ومن أجل توفير تجربة إعداد سهلة على المستخدم، يعد استخدام واجهة برمجة التطبيقات (API) الخاصة بقائمة الإدارة وواجهة برمجة التطبيقات الخاصة بالإعدادات في نظام WordPress خطوة أساسية لبناء واجهة إدارية خلفية آمنة وموحدة. وأخيرًا، من خلال تنفيذ الرموز القصيرة والأدوات المخصصة، يمكنك دمج وظائف الإضافة بسلاسة في محتوى وتركيب الموقع، مما يوفر للمستخدمين طرقًا مرنة لعرض المحتوى. باتباع هذه النصائح الأساسية، يمكنك بناء إضافات WordPress قوية وذات هيكل واضح وسهلة الصيانة بشكل منهجي.
الأسئلة الشائعة الأسئلة المتداولة
ماهي المتطلبات الأساسية لتطوير إضافات WordPress؟
أنت بحاجة إلى أن تكون على دراية جيدة ببرمجة PHP، وأن تفهم أساسيات HTML وCSS وJavaScript. سيكون معرفة مفاهيم البرمجة الموجهة للكائنات (OOP) مفيدًا للغاية في تطوير الإضافات الكبيرة. بالإضافة إلى ذلك، تعد بيئة التطوير المحلية (مثل Local by Flywheel، XAMPP، MAMP) وبيئة التطوير المتكاملة (IDE) لتحرير الشفرة (مثل VS Code، PhpStorm) أدوات ضرورية.
كيف يمكنني ضمان أن تكون الإضافة التي طورتها آمنة وعالية الأداء؟
من ناحية الأمان: تأكد دائمًا من التحقق من مدخلات المستخدم وتنظيفها، واستخدم الوظائف المضمنة في ووردبريس مثلsanitize_text_field(), esc_html(), wp_kses()إلخ. عند معالجة النماذج وطلبات Ajax، يجب عليك بالضرورة استخدام التحقق من nonce. استخدم فئات عمليات قاعدة بيانات WordPress المحددة مسبقًا (مثل$wpdbلتجنب حقن SQL. من ناحية الأداء: يتم تحميل البرامج النصية والأنماط فقط عند الحاجة (باستخدام <).wp_enqueue_script()وقم بإعداد الاعتمادات وشروط التحميل بشكل معقول. قم بتخزين نتائج الاستعلامات المستغرقة في ذاكرة التخزين المؤقت باستخدام Transients API. تجنب تنفيذ العديد من استعلامات قاعدة البيانات غير الضرورية عند تهيئة المكوّنات الإضافية.
كيف يجب أن أقوم بتصحيح الأخطاء واختبار الإضافة الخاصة بي ؟
أثناء مرحلة التطوير، يُرجى إدراج:wp-config.phpتم تفعيل الميزة داخل الملف.WP_DEBUGوWP_DEBUG_LOGسيؤدي ذلك إلى تسجيل أخطاء PHP والتحذيرات في ملف السجل، مما يسهل اكتشاف المشاكل. استخدم أدوات مطور المتصفح لمشاهدة طلبات الشبكة وأخطاء جافا سكريبت. ولتصحيح منطق الكود،error_log()الوظائف والمكونات الإضافية مثل “Query Monitor” هي أدوات ممتازة. يجب اختبارها على مختلف إصدارات PHP وWordPress لضمان التوافق.
كيف يمكنني إضافة دعم للترجمة الدولية (التعددية اللغوية) إلى إضافتي (البرنامج الإضافي)؟
أولاً، قم بإعداد التعليقات في رأس الملف الرئيسي بشكل صحيح.Text Domain(مثال: my-plugin-text-domain). في الكود، استخدم لجميع السلاسل التي تحتاج إلى ترجمة.__()(العودة إلى السلسلة المترجمة) أو_e()(إخراج السلسلة المترجمة) لف الوظيفة، وقم بتمرير حقل النص الخاص بك. بعد ذلك، استخدم أدوات مثل Poedit لإنشاء.potملف القالب، وإنشاء نسخ بلغات مختلفة بناءً عليه..poو.moقم بترجمة الملفات، وضعها في المكونات الإضافية./languages/الفهرس.
بعد الانتهاء من التطوير، كيف يمكنني نشر إضافتي؟
يمكنك اختيار نشر المكوّن الإضافي في دليل المكوّنات الإضافية الرسمي لـ WordPress، وهي طريقة التوزيع الأكثر شيوعًا. وهذا يتطلب أن يتبع مكوّنك الإضافي ترخيص GPL وأن يخضع لمراجعة صارمة للشفرة. يمكنك أيضًا اختيار التوزيع على موقع الويب الخاص بك أو في أسواق الجهات الخارجية. وبغض النظر عن الطريقة المختارة، تأكد من توفير وثائق واضحة، وسجل تحديثات، وتعليمات التوافق، بالإضافة إلى وضع خطة لصيانة المكوّن الإضافي وتحديثه بشكل مستمر.
ما التالي، ما التالي؟
القراءة الموسعة والمعرفة العملية
فيما يلي بعض الموضوعات ذات الصلة بموضوع هذه المقالة وهي مناسبة لمزيد من القراءة المتعمقة. وغالباً ما يكون من الأفضل إعطاء الأولوية للبدء بالمقال الأقرب إلى مشكلتك الحالية ثم التوسع تدريجياً إلى المواضيع المحيطة.
- خبراء تحسين محركات البحث (SEO) يعلمونك 10 مهارات وطرق أساسية لتحسين مواقع ووردبريس بشكل متقن.
- دليل تطوير إضافات ووردبريس: كيف تبني إضافتك المخصصة الأولى من الصفر
- كيف تصبح مطورًا لإضافات ووردبريس: دليل شامل من الصفر إلى النهاية
- دليل شامل لتطوير إضافات ووردبريس: من المبتدئين إلى الخبراء في إنشاء إضافات متخصصة
- تطوير الإضافات في ووردبريس: من الأساسيات إلى الاحترافية - إنشاء أول إضافة مخصصة لك.