ٍ
في هذه الوحدة، سنتناول كيفية إنشاء جداول مخصصة، تخزين واسترجاع البيانات بأمان، وتحسين أداء استعلامات MySQL داخل WordPress باستخدام wpdb
.
📌 1. إنشاء جداول مخصصة باستخدام wpdb
✅ لماذا نحتاج إلى جداول مخصصة؟
- في بعض الأحيان، لا تكون الجداول الافتراضية لـ WordPress مثل
wp_posts
وwp_users
كافية لتخزين البيانات المطلوبة. - يمكننا إنشاء جداول خاصة بالإضافة لتنظيم البيانات بشكل أفضل.
✅ كيفية إنشاء جدول جديد؟
- نستخدم
dbDelta()
لإنشاء الجدول داخل قاعدة البيانات بطريقة آمنة.
💡 مثال – إنشاء جدول مخصص داخل إضافة WordPress:
php
global $wpdb;
$table_name = $wpdb->prefix . 'custom_data';
$charset_collate = $wpdb->get_charset_collate();
$sql = "CREATE TABLE $table_name (
id mediumint(9) NOT NULL AUTO_INCREMENT,
user_email varchar(100) NOT NULL,
created_at datetime DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (id)
) $charset_collate;";
require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
dbDelta($sql);
🔍 2. حفظ واسترجاع البيانات بطرق آمنة
✅ كيف نحفظ البيانات داخل الجدول؟
- نستخدم
wpdb->insert()
لإدخال البيانات دون الحاجة لاستعلامات SQL المباشرة، مما يزيد الأمان.
💡 مثال – إدخال بيانات إلى الجدول المخصص:
php
global $wpdb;
$wpdb->insert(
$wpdb->prefix . 'custom_data',
array(
'user_email' => 'example@gmail.com'
),
array('%s')
);
✅ كيفية جلب البيانات من الجدول؟
- نستخدم
wpdb->get_results()
لاسترداد البيانات من الجدول بطريقة منظمة.
💡 مثال – استرجاع البيانات:
php
global $wpdb;
$results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}custom_data");
foreach ($results as $row) {
echo "Email: " . $row->user_email . "<br>";
}
⚡ 3. تحسين استعلامات MySQL لضمان الأداء
✅ كيف نحسن أداء قاعدة البيانات؟
🔹 استخدام فهرسة (Indexes) لتسريع عمليات البحث.
🔹 تجنب الاستعلامات المكثفة مثل SELECT *
واستخدام LIMIT
عند الحاجة.
🔹 تنفيذ التخزين المؤقت للنتائج المتكررة باستخدام Transient API في WordPress.
💡 مثال – استخدام التخزين المؤقت لتحسين الأداء:
php
$cached_results = get_transient('cached_custom_data');
if (!$cached_results) {
global $wpdb;
$cached_results = $wpdb->get_results("SELECT * FROM {$wpdb->prefix}custom_data");
set_transient('cached_custom_data', $cached_results, 12 * HOUR_IN_SECONDS);
}
foreach ($cached_results as $row) {
echo "Email: " . $row->user_email . "<br>";
}