🚨 هنوز جدول افزونهات رو با CREATE TABLE میسازی؟اگر افزونهنویسی میکنی، این اشتباه میتونه موقع آ…
انتشار: 2026/07/14 14:16 UTCدریافت: 2026/08/15 03:30 UTCآخرین مشاهده: 2026/08/15 03:30 UTC
🚨 هنوز جدول افزونهات رو با CREATE TABLE میسازی؟اگر افزونهنویسی میکنی، این اشتباه میتونه موقع آپدیت افزونه، کاربرات رو به دردسر بندازه!🤔 بیاید واقعی ببینیم فرض کن نسخه 1.0 افزونهات رو منتشر کردی و این جدول رو ساختی:global $wpdb;$table = $wpdb->prefix . 'customers';$sql = "CREATE TABLE $table ( id BIGINT UNSIGNED NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL, email VARCHAR(255) NOT NULL, PRIMARY KEY (id));";همه چیز عالیه 😐 اما مدتی بعد...تصمیم میگیری شماره موبایل مشتری رو هم ذخیره کنی.یعنی جدول باید این شکلی بشه:phone VARCHAR(20) NOT NULLحالا اگر دوباره همون CREATE TABLE رو اجرا کنی چی میشه؟❌ جدول از قبل وجود داره.❌ ستون جدید اضافه نمیشه.❌ افزونه روی سایت هزاران کاربر ناقص کار میکنه.✅ راهکار حرفهای وردپرسبه جای اجرای مستقیم SQL از:dbDelta();استفاده کن.require_once ABSPATH . 'wp-admin/includes/upgrade.php';dbDelta( $sql );🔥 dbDelta() چه کار میکنه؟اگر جدول وجود نداشته باشه:✅ میسازه.اگر ستون جدید اضافه کرده باشی:✅ فقط همون ستون رو اضافه میکنه.اگر Index جدید تعریف کرده باشی:✅ اون رو هم اعمال میکنه.بدون اینکه اطلاعات قبلی کاربران حذف بشه.📌 مثال واقعینسخه 1.0idnameemailنسخه 1.1idnameemailphoneکافیه مقدار $sql رو تغییر بدی و دوباره:dbDelta( $sql );رو اجرا کنی.وردپرس خودش تشخیص میده فقط ستون phone کم شده و همون رو اضافه میکنه.⚠️ نکته مهمdbDelta() فقط زمانی درست کار میکنه که SQL رو مطابق استاندارد وردپرس بنویسی.مثلاً:✔️ حتماً PRIMARY KEY با دو فاصله قبل از پرانتز نوشته بشه:PRIMARY KEY (id)و بهتره از: require_once ABSPATH . 'wp-admin/includes/upgrade.php'; قبل از فراخوانی dbDelta() استفاده کنی، چون این تابع بهصورت پیشفرض در همه درخواستها بارگذاری نشده است.💎 قانون Seniorهابرنامهنویس حرفهای فقط به نصب افزونه فکر نمیکنه...به این فکر میکنه که نسخه ۱.۵ افزونه روی سایت ۵۰ هزار کاربر، بدون از دست رفتن حتی یک رکورد، بهروزرسانی بشه.😏 اگر تا امروز فقط از CREATE TABLE استفاده میکردی الان میدونی چرا تیم توسعه وردپرس dbDelta() رو ساخته. 😉 @wpheart

