ٍ

في هذه الوحدة، سنتناول كيفية إنشاء جداول مخصصة، تخزين واسترجاع البيانات بأمان، وتحسين أداء استعلامات 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>";
}

🎯 الخطوة التالية؟

التعليقات مغلقة.