سایتی را عیب‌یابی می‌کردم که صاحبش با نارضایتی می‌گفت: «افزونه مشکل‌دار را حذف کردم، اما دو هفته بعد که سایت را بازسازی کردیم، تمام تنظیمات فرم‌ها و داده‌های مشتریان از بین رفته بود». مشکل این بود که حذف افزونه در وردپرس، به‌طور پیش‌فرض جدول‌های دیتابیس و ردیف‌های تنظیمات آن افزونه را پاک نمی‌کند — اما اگر کاربر خودش دست به پاکسازی بزند یا افزونه در نسخه‌ای باشد که پاکسازی خودکار داشته باشد، داده‌ها از بین می‌رود. در این مقاله، روشی را که در همه پروژه‌های خودم برای حذف ایمن افزونه‌های خراب به کار می‌برم، توضیح می‌دهم.

چرا افزونه خراب می‌شود؟

افزونه خراب، همیشه به‌معنای کد بد نیست. سه سناریوی رایج که در پروژه‌ها دیده‌ام:

  • تعارض با افزونه دیگر: شایع‌ترین علت. دو افزونه که هر دو هوک مشترکی را تغییر می‌دهند یا کلاس مشترکی تعریف می‌کنند، می‌توانند سایت را از کار بیندازند. تفصیل در چگونه سازگاری افزونه‌های وردپرس را بررسی کنیم.
  • ناسازگاری با نسخه وردپرس: افزونه‌ای که با نسخه قدیمی وردپرس ساخته شده، ممکن است روی نسخه جدید خطاهای کشنده بدهد.
  • ناسازگاری با نسخه PHP: افزونه‌های قدیمی که با PHP 7.0 کار می‌کردند، روی PHP 8.x ممکن است با خطاهای جدی مواجه شوند. اگر با این مفهوم آشنا نیستید، تفاوت php 7 و php 8 راهنمای جامعی است.
  • خرابی در کد افزونه: گاهی خود افزونه در به‌روزرسانی آخر باگ دارد یا ناقص منتشر شده است.
حذف افزونه بدون برنامه، مثل عمل جراحی بدون تصویربرداری است: ممکن است مشکل حل شود، اما احتمالاً چیزهای دیگر هم قربانی می‌شوند. برنامه‌ریزی، تفاوت بین یک حذف ایمن و یک فاجعه است.

شناسایی افزونه مشکل‌ساز

پیش از حذف هر چیزی، باید مطمئن شوید که مقصر همان افزونه است. اگر با روش تشخیص آشنا نیستید، چگونه خطای افزونه وردپرس را پیدا کنیم گام‌به‌گام پیش رفته است. خلاصه روش:

  1. روی محیط Staging: هرگز عیب‌یابی مستقیم روی سایت زنده انجام ندهید. اگر با Staging آشنا نیستید، توسعه وردپرس با محیط لوکال نقطه شروع است.
  2. فعال‌سازی حالت WP_DEBUG: با این تنظیم، خطاهای PHP در فایل debug.log ثبت می‌شوند و نام فایل افزونه مقصر مشخص می‌شود.
  3. غیرفعال‌سازی تدریجی: همه افزونه‌ها را غیرفعال کنید، سپس یکی‌یکی فعال کنید تا مقصر مشخص شود. اگر با روش غیرفعال‌سازی از طریق FTP آشنا نیستید، چگونه افزونه‌های مشکل‌ساز را غیرفعال کنیم.
  4. بررسی لاگ سرور: اگر به لاگ سرور دسترسی دارید، پیام‌های خطا در زمان فعال بودن افزونه مقصر، مسیر را کوتاه می‌کند.

چرا حذف افزونه باعث از دست رفتن داده می‌شود؟

در وردپرس، افزونه‌ها معمولاً سه نوع داده را در دیتابیس ذخیره می‌کنند:

  1. تنظیمات در wp_options: کلیدهایی با پیشوند نام افزونه، مثل my_plugin_settings.
  2. جدول‌های اختصاصی: بعضی افزونه‌ها جدول مستقل در دیتابیس می‌سازند، مثل افزونه‌های آماری، فرم‌سازها و فروشگاهی.
  3. Post Meta و User Meta: داده‌های اختصاصی که به پست‌ها یا کاربران متصل می‌شوند.

وقتی افزونه‌ای را غیرفعال می‌کنید، هیچ‌کدام از این داده‌ها پاک نمی‌شوند. اما وقتی افزونه را حذف می‌کنید:

  • در بسیاری از افزونه‌ها: داده‌ها همچنان باقی می‌مانند. اما با از دست دادن کد، این داده‌ها دیگر مورد استفاده قرار نمی‌گیرند و «یتیم» می‌شوند.
  • در بعضی افزونه‌های حرفه‌ای: افزونه یک گزینه «حذف داده‌ها هنگام حذف افزونه» دارد. اگر این گزینه در تنظیمات فعال باشد، با حذف افزونه، تمام داده‌های آن پاک می‌شود.
  • در پاک‌سازی دستی: اگر بعد از حذف افزونه، جدول‌های یتیم را پاک کنید، داده‌ها از بین می‌روند. این همان اشتباهی است که در پروژه‌های مختلف بارها دیده‌ام.

نکته کلیدی: حذف افزونه، داده‌ها را پاک نمی‌کند، اما با از دست دادن کد، امکان استفاده از آن‌ها از بین می‌رود. و اگر اشتباهاً داده‌ها را هم پاک کنید، بازگشت تقریباً غیرممکن است.

قبل از حذف: کارهای ضروری

قبل از هر اقدامی، چهار کار ضروری که در همه پروژه‌ها انجام می‌دهم:

۱. بکاپ کامل سایت

بکاپ از فایل‌ها و دیتابیس، با نسخه‌ای که قابل بازیابی سریع باشد. راهنمای کامل در چگونه از سایت وردپرسی بکاپ بگیریم.

۲. خروجی از تنظیمات افزونه

اگر افزونه امکان Export تنظیمات دارد (مثل Yoast، WooCommerce، فرم‌سازها)، از این گزینه استفاده کنید. فایل خروجی را در جای امن نگه دارید.

۳. یادداشت تنظیمات مهم

برای افزونه‌هایی که Export ندارند، از صفحه تنظیمات اسکرین‌شات بگیرید. این کار هم بازسازی تنظیمات را سریع‌تر می‌کند و هم مدرکی برای مقایسه است.

۴. شناسایی داده‌های وابسته

قبل از حذف، بررسی کنید که آیا افزونه دیگری به این افزونه وابسته است یا نه. مثلاً بعضی افزونه‌های نمایشی، به داده‌های افزونه فرم وابسته هستند.

پس از این چهار کار، آماده حذف هستید.

حذف ایمن؛ گام‌به‌گام

روش حذف ایمن، چهار گام دارد:

  1. غیرفعال کردن به‌جای حذف: اگر مشکل فقط «کندی» یا «تعارض موقت» است، به‌جای حذف، فقط غیرفعال کنید. سایت سریع‌تر می‌شود و داده‌ها هم دست‌نخورده می‌مانند.
  2. پیش از حذف، گزینه «حذف داده‌ها هنگام حذف» را غیرفعال کنید: بعضی افزونه‌ها این گزینه را در صفحه تنظیمات خود دارند. اگر فعال بماند، با حذف افزونه، تمام داده‌هایش پاک می‌شود. آن را خاموش کنید.
  3. حذف از پیشخوان: از مسیر افزونه‌ها > افزونه‌های نصب‌شده، افزونه مقصر را غیرفعال و سپس حذف کنید. اگر افزونه به‌خاطر خطای PHP قابل دسترسی نیست، از طریق FTP پوشه آن را از wp-content/plugins/ تغییر نام دهید.
  4. تست سایت بلافاصله پس از حذف: سه آزمون کوتاه: بازدید از سایت با موبایل، ورود به پیشخوان، و اجرای یک عملیات حساس (مثل ثبت سفارش آزمایشی اگر فروشگاهی است).

حفظ تنظیمات برای جایگزینی

اگر می‌خواهید به‌جای افزونه خراب، افزونه دیگری نصب کنید، دو روش برای حفظ تنظیمات وجود دارد:

روش اول: استفاده از خروجی و ورودی افزونه جدید

بیشتر افزونه‌های معتبر، امکان Import از فایل خروجی افزونه دیگری را دارند. مثلاً Yoast و Rank Math امکان Import از همدیگر را دارند. جزئیات در مقایسه یواست و رنک مث.

روش دوم: بازسازی دستی تنظیمات

برای افزونه‌هایی که این قابلیت را ندارند، تنظیمات را دستی در افزونه جدید وارد کنید. این کار زمان‌بر اما مطمئن‌تر است، چون فرصتی برای بازبینی تنظیمات و بهینه‌سازی می‌دهد.

پاک‌سازی دیتابیس بعد از حذف

پس از حذف افزونه، جدول‌های یتیم در دیتابیس باقی می‌مانند. اگر قصد بازگشت به افزونه را ندارید، پاک‌سازی این جدول‌ها نگهداری دیتابیس را ساده‌تر می‌کند. اما دو نکته مهم:

  1. هرگز قبل از اطمینان کامل پاک نکنید: حداقل چند هفته بعد از حذف افزونه و پس از اطمینان از اینکه جایگزینی به‌درستی کار می‌کند، این کار را انجام دهید.
  2. قبل از پاک‌سازی، یک بکاپ بکاپ دیگر بگیرید: بکاپ دوم، امکان بازگشت در صورت اشتباه را می‌دهد.

ابزارهایی مثل WP-Optimize یا افزونه‌های اختصاصی پاکسازی دیتابیس، جدول‌های یتیم را شناسایی و حذف می‌کنند. اما این کار به‌طور خودکار انجام نشود. ابتدا در محیط Staging تست کنید. راهنمای کامل در چگونه دیتابیس وردپرس را پاک‌سازی کنیم.

نکته: بعضی افزونه‌ها داده‌های خود را در wp_options یا wp_postmeta ذخیره می‌کنند، نه در جدول اختصاصی. پاک‌سازی این داده‌ها نیازمند کوئری مستقیم است و باید با احتیاط انجام شود. اگر با کوئری‌های دیتابیس آشنایی ندارید، از این کار خودداری کنید.

نصب افزونه جایگزین

پس از حذف افزونه خراب، نصب افزونه جایگزین باید با احتیاط انجام شود:

  1. پژوهش پیش از نصب: فهرست افزونه‌های معتبر در حوزه مربوطه را بررسی کنید. مثلاً اگر افزونه فرم حذف شده، مقایسه بهترین افزونه‌های فرم‌ساز نقطه شروع خوبی است.
  2. نصب روی Staging: افزونه جدید را ابتدا روی محیط Staging نصب و تست کنید.
  3. اعتبارسنجی سازگاری: تست سازگاری با سایر افزونه‌ها و قالب. چگونه سازگاری افزونه‌های وردپرس را بررسی کنیم.
  4. پایش پس از نصب: در دو هفته اول، سرعت سایت و لاگ خطاها را به‌طور روزانه پایش کنید.

جدول خلاصه؛ گام‌های حذف ایمن

گاماقدام کلیدیهدف
۱. شناساییتست در Staging با WP_DEBUGشناسایی دقیق مقصر
۲. بکاپبکاپ کامل + خروجی تنظیماتبیمه در برابر اشتباه
۳. غیرفعال کردن داده‌پاکیخاموش کردن حذف داده‌هاحفظ داده‌های افزونه
۴. حذفحذف از پیشخوان یا FTPحذف ایمن
۵. تستسه آزمون سریعاطمینان از سالم بودن سایت
۶. جایگزینینصب و تست افزونه جدیدجایگزینی بدون وقفه
۷. پاک‌سازیپاک‌سازی جدول‌های یتیمبهبود کارایی بلندمدت

اشتباهاتی که به از دست رفتن داده منجر می‌شود

  • حذف بدون بکاپ: بزرگ‌ترین اشتباه. اگر بکاپ ندارید، هر اقدام ریسکی است.
  • پاک‌کردن مستقیم جدول‌های وابسته: فرض کنید افزونه را حذف کرده‌اید و مستقیم سراغ phpMyAdmin می‌روید. اما بعضی جدول‌ها ممکن است توسط افزونه‌های دیگر هم استفاده شوند. همیشه قبل از پاک‌سازی، وابستگی‌ها را بررسی کنید.
  • فعال بودن گزینه «حذف داده‌ها هنگام حذف»: اگر این گزینه را خاموش نکنید، افزونه با حذف، تمام داده‌هایش را با خودش می‌برد.
  • حذف مستقیم روی سایت زنده: تست نکردن روی Staging، ریسک را چند برابر می‌کند.
  • نبود مستندات: اگر تنظیمات را یادداشت نکنید، بازسازی بعدی سخت می‌شود.
  • حذف چند افزونه همزمان: اگر چند افزونه را با هم حذف کنید، در صورت بروز مشکل نمی‌دانید مقصر کدام است. یکی‌یکی حذف کنید.
  • فراموش کردن حذف داده‌های Post Meta: بعضی افزونه‌ها داده را در Post Meta ذخیره می‌کنند. این داده‌ها پس از حذف، یتیم می‌مانند و در کوئری‌ها نویز می‌سازند.

پاکسازی بدون باخت: نگاه معماری

برای معماران پلتفرم و تیم‌های فنی، حذف افزونه نباید به‌عنوان یک کار جانبی دیده شود؛ بخشی از چرخه نگهداری پلتفرم است. در این نگاه، سه الگو مهم است:

  1. قاعده «قبل از حذف، مستندسازی کن»: در تیم‌های حرفه‌ای، هر افزونه‌ای که استفاده می‌شود در یک سند مرکزی ثبت می‌گردد: هدف، تنظیمات اصلی، وابستگی‌ها. این سند در لحظه حذف، به یک نقشه تبدیل می‌شود.
  2. حذف به‌عنوان بخشی از CI/CD: در پروژه‌های بزرگ، حذف افزونه باید مانند یک تغییر کد مدیریت شود: تست در محیط Staging، مستندسازی، و استقرار در ساعات کم‌ترافیک.
  3. پایش پس از حذف: سه روز اول پس از حذف افزونه، پایش روزانه لاگ‌ها و نرخ خطا، ضروری است. اگر خطای جدیدی ظاهر شد، ممکن است افزونه‌ای که فکر می‌کردید مستقل است، در حقیقت با افزونه حذف‌شده وابستگی داشته.
  4. حفظ داده‌های تاریخی: اگر افزونه فرم یا نظرسنجی حذف می‌شود، داده‌های تاریخی مشتریان باید به یک سند یا جدول مستقل منتقل شود. این داده‌ها دارایی سازمان هستند و نباید با حذف افزونه از بین بروند.

در این نگاه، حذف افزونه نه به‌عنوان یک پاک‌سازی ساده، بلکه به‌عنوان یک پروژه کوچک با مسیر برنامه‌ریزی، اجرا و پایش مدیریت می‌شود. تصویر کامل این نگاه در اشتباهات رایج در توسعه قالب و افزونه وردپرس و افزونه‌های ضروری وردپرس آمده است.

پرسش‌های پرتکرار

آیا حذف افزونه باعث پاک شدن تنظیماتش می‌شود؟ به‌طور پیش‌فرض نه. اما بعضی افزونه‌ها گزینه‌ای دارند که با فعال بودن، داده‌ها پاک می‌شوند. همیشه این گزینه را بررسی و خاموش کنید.

اگر افزونه را حذف کنم، جدول‌هایش در دیتابیس می‌مانند؟ بله، معمولاً باقی می‌مانند. پاک‌سازی این جدول‌ها اختیاری است اما در بلندمدت توصیه می‌شود.

آیا می‌توانم افزونه را بعد از حذف دوباره نصب کنم و تنظیماتش را ببینم؟ بله، اگر داده‌ها را پاک نکرده باشید. اما این کار گاهی پیچیدگی‌هایی دارد چون افزونه ممکن است تنظیمات را در نسخه جدیدی از ساختار ذخیره کند.

چطور بفهمم کدام جدول‌ها مربوط به افزونه هستند؟ از پیشوند جدول‌ها استفاده کنید. اکثر افزونه‌ها جدول‌هایی با پیشوند نام خودشان می‌سازند، مثل wp_myplugin_data. اما برای اطمینان، از مستندات افزونه یا پشتیبانی آن استفاده کنید.

آیا حذف افزونه از طریق FTP تفاوتی با حذف از پیشخوان دارد؟ بله. حذف از پیشخوان معمولاً فرآیند تمیزتری دارد و ممکن است فایل‌های جانبی را هم پاک کند. حذف از FTP فقط پوشه را حذف می‌کند. اما در شرایطی که سایت به‌خاطر خطای افزونه قابل دسترسی نیست، حذف از FTP نجات‌بخش است.

آیا باید داده‌های Post Meta افزونه را هم پاک کنم؟ در بلندمدت، بله. اما این کار نیازمند کوئری مستقیم دیتابیس است و باید با احتیاط انجام شود. اگر مطمئن نیستید، از این کار خودداری کنید.

چطور بفهمم افزونه خراب، داده‌های سایت را آلوده کرده یا نه؟ اگر خطا در دیتابیس باشد، معمولاً با تست در Staging و بررسی جدول‌ها مشخص می‌شود. همچنین پایش رکوردهای نامعتبر یا تکراری، سرنخ خوبی است.

کلام آخر

حذف افزونه خراب، در نگاه اول یک اقدام ساده به‌نظر می‌رسد؛ اما در باطن، تصمیمی با پیامدهای بلندمدت است. تجربه‌ام نشان داده هر پروژه‌ای که حذف افزونه را با مستندسازی، بکاپ و پایش انجام داده، از فاجعه‌های پنهان در امان مانده. سه اقدام عملی که همین امروز پیشنهاد می‌کنم: اول، پیش از هر حذف، یک بکاپ کامل بگیرید و در جای امنی نگه دارید؛ دوم، گزینه «حذف داده‌ها هنگام حذف» را در تنظیمات افزونه‌های خود بررسی و غیرفعال کنید؛ سوم، پس از حذف، حداقل دو هفته سایت را با دقت بیشتری پایش کنید و لاگ‌ها را مرور کنید.

اگر تجربه‌ای از حذف افزونه خراب در پروژه‌های خودتان دارید — چه یک حذف روان که همه‌چیز را حفظ کرد، چه یک اشتباه که منجر به از دست رفتن داده شد — برای من و خوانندگان این سایت ارزشمند است که در دیدگاه‌ها بخوانیم. بگویید در پروژه شما کدام لایه از حذف ایمن بیشترین تفاوت را ساخت و چرا؛ همان یک تجربه می‌تواند به خواننده بعدی که همین امروز با یک افزونه مشکل‌دار روبه‌رو شده، چند ساعت آزمون‌وخطا را صرفه‌جویی کند. 🧩