في هذه الوحدة، سنتعرف على الأساسيات التي يحتاجها أي مطور لإنشاء إضافة WordPress مخصصة، بدءًا من إعداد الملفات الأساسية إلى تسجيل الإضافة داخل النظام والاستفادة من Hooks & Filters.
📌 1. فهم هيكلة الإضافات في WordPress
✅ ما هي إضافة WordPress؟
- الإضافة عبارة عن ملف أو مجموعة ملفات برمجية تضيف وظائف جديدة إلى WordPress دون الحاجة لتعديل نواة النظام.
- يمكن استخدامها لإضافة ميزات مثل نظام تسجيل مخصص، تحسين الأداء، التكامل مع خدمات خارجية وغيرها.
✅ كيف يتم تنظيم ملفات الإضافة؟
🔹 المجلد الأساسي
يحتوي على جميع ملفات الإضافة.
🔹 ملف الإضافة الرئيسي (plugin.php)
يحتوي على معلومات الإضافة والوظائف الأساسية.
🔹 ملفات فرعية (CSS, JS, Templates):
لتحسين المظهر والتفاعل مع المستخدم.
💡 مثال
– هيكلة إضافة بسيطة:
/my-plugin
├── my-plugin.php
├── assets/
│ ├── style.css
│ ├── script.js
├── includes/
│ ├── functions.php
│ ├── admin-page.php
🔍 2. تسجيل الإضافة داخل WordPress (Hooks & Filters)
✅ لماذا نستخدم Hooks؟
- تساعد في إضافة ميزات جديدة دون تعديل نواة WordPress، مما يجعل الإضافة متوافقة مع تحديثات النظام.
✅ الفرق بين Actions وFilters:
🔹Actions
تنفذ الكود عند حدوث حدث معين مثل تفعيل الإضافة.
🔹 Filters
تعديل البيانات قبل عرضها، مثل تغيير محتوى المقالات قبل نشرها.
💡 مثال عملي
– استخدام Hook لإضافة رسالة في التذييل:
php
function custom_footer_message() {
echo "<p>هذه رسالة مخصصة تمت إضافتها عبر إضافة WordPress.</p>";
}
add_action("wp_footer", "custom_footer_message");
🛠 3. إنشاء أول إضافة والتحقق من توافقها مع النظام
✅ كيف ننشئ إضافة WordPress مخصصة؟
1️⃣ إنشاء ملف plugin.php داخل مجلد جديد للإضافة.
2️⃣ كتابة تعريف الإضافة باستخدام Plugin Header
.
3️⃣ تسجيل الإضافة داخل WordPress.
4️⃣ إضافة ميزات جديدة باستخدام Actions وFilters.
💡 مثال
– ملف رئيسي لإضافة WordPress:
php
<?php
/**
* Plugin Name: My Custom Plugin
* Plugin URI: https://example.com
* Description: إضافة مخصصة لتقديم ميزات جديدة.
* Version: 1.0
* Author: Mourad
*/
// منع الوصول المباشر للملف
defined('ABSPATH') or die('Access denied!');
// إضافة وظيفة جديدة
function my_custom_message() {
echo "<p>مرحبًا! هذه إضافة مخصصة لـ WordPress.</p>";
}
add_action('wp_footer', 'my_custom_message');