جستجو و جایگزینی در دیتابیس وردپرس با ۲ روش

جستجو و جایگزینی در دیتابیس وردپرس با ۲ روش

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

در این آموزش اول توضیح می‌دیم چرا نصب افزونه Search & Replace رو پیشنهاد نمی‌کنیم. بعد با دو راهکار جایگزین آشنا می‌شید: افزونه Better Search Replace برای کاربران تازه‌کار و WP-CLI برای زمانی که به خط فرمان هاست دسترسی دارین. اجرای آزمایشی، انتخاب جدول‌ها و بررسی نتیجه هم قدم‌به‌قدم توضیح داده می‌شن.

چرا نصب افزونه Search & Replace پیشنهاد نمی‌شه

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

تصاویر زیر بخش‌های مختلف محیط همین افزونه رو نشون می‌دن، ولی برای انجام کار لازم نیست اون رو نصب کنید.

تصویری قدیمی از افزونه Search & Replace
تصویری قدیمی از افزونه Search & Replace

جستجو و جایگزینی در دیتابیس وردپرس چه کاربردی داره

دیتابیس یا پایگاه داده، جاییه که وردپرس نوشته‌ها، تنظیمات و خیلی از اطلاعات سایتتون رو نگه می‌داره. وقتی یک عبارت داخل تعداد زیادی از این اطلاعات تکرار شده، ابزار جستجو و جایگزینی می‌تونه نمونه‌های پیدا‌شده رو با عبارت تازه عوض کنه.

  • اصلاح یک اشتباه تایپی تکرارشده در نوشته‌ها
  • تغییر نام یک محصول یا برند در محتوای سایت
  • جایگزینی آدرس کامل دامنه قدیمی با دامنه جدید
  • تغییر آدرس فایل‌ها بعد از انتقال درست رسانه‌ها
  • تبدیل آدرس‌های HTTP به HTTPS بعد از فعال‌سازی درست SSL

این کار فایل‌های واقعی رو جابه‌جا نمی‌کنه. مثلاً اگه آدرس تصاویر رو تغییر بدید، باید فایل‌ها از قبل در مقصد جدید باشن. تنظیم DNS، فضای ذخیره‌سازی و دسترسی فایل‌ها هم باید جداگانه انجام شده باشه.

قبل از شروع این کارها رو انجام بدید

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

  1. از فایل‌ها و دیتابیس سایت یک بکاپ کامل بگیرید.
  2. مطمئن بشید که روش برگردوندن بکاپ رو بلدین و فایل بکاپ سالمه.
  3. اگه سایت فروشگاهی یا پربازدید دارین، اول کار رو روی یک نسخه آزمایشی از سایت انجام بدید.
  4. عبارت قدیمی و جدید رو در یک فایل متنی بنویسید و از نظر فاصله، املا و ساختار آدرس بررسی کنید.
  5. اول اجرای آزمایشی یا Dry Run رو انجام بدید. Dry Run یعنی ابزار نتیجه احتمالی رو نشون می‌ده، ولی چیزی رو ذخیره نمی‌کنه.

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

برای آدرس‌ها بهتره نمونه کامل و دقیق رو وارد کنید. مثلاً به‌جای جایگزینی عبارت عمومی uploads، آدرس کامل قدیمی مثل https://old.example.com/wp-content/uploads رو با آدرس کامل جدید عوض کنید. این کار احتمال تغییر ناخواسته بخش‌های دیگه رو کمتر می‌کنه.

اگه هدفتون تغییر دامنه سایته، سراغ مقدارهای GUID نرید؛ مگر اینکه دقیقاً بدونید چرا باید تغییرشون بدید. GUID یک شناسه ثابت برای نوشته‌هاست و همیشه مثل یک لینک معمولی رفتار نمی‌کنه. بهتره اول نتیجه Dry Run رو جدول‌به‌جدول بررسی کنید و هر تغییر مربوط به GUID رو متوقف کنید تا دلیلش روشن بشه.

روش اول: استفاده از افزونه Better Search Replace

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

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

نصب Better Search Replace

  1. وارد پیشخوان وردپرس بشید.
  2. از منوی «افزونه‌ها» روی «افزودن افزونه تازه» کلیک کنید.
  3. عبارت Better Search Replace رو جستجو کنید.
  4. نام افزونه و سازنده اون رو با صفحه رسمی مخزن تطبیق بدید.
  5. روی «نصب» و بعد «فعال‌سازی» کلیک کنید.
نصب Better Search Replace
نصب Better Search Replace

انجام اجرای آزمایشی

از منوی «ابزارها» وارد بخش Better Search Replace بشید.

ورود به بخش بخش Better Search Replace
ورود به بخش بخش Better Search Replace

در کادر جستجو، عبارت قدیمی رو دقیق وارد کنید. در کادر جایگزینی، عبارت جدید رو بنویسید.

وارد کردن کلمه جایگزین
وارد کردن کلمه جایگزین

جدول‌هایی رو انتخاب کنید که می‌خواید بررسی بشن. جدول یعنی بخشی از دیتابیس که یک نوع اطلاعات رو نگه می‌داره. مثلاً محتوای نوشته‌ها معمولاً در جدول wp_posts و خیلی از تنظیمات در جدول wp_options ذخیره می‌شن؛ البته پیشوند wp_ ممکنه در سایت شما فرق داشته باشه.

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

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

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

اجرای جایگزینی واقعی

وقتی نتیجه اجرای آزمایشی درست بود، یک بار دیگه از دیتابیس بکاپ بگیرید. بعد گزینه Dry Run رو غیرفعال کنید و عملیات رو اجرا کنید. بهتره تا وقتی پیام پایان عملیات رو ندیدید، صفحه مرورگر رو نبندید یا همون عملیات رو دوباره شروع نکنید.

بعد از پایان، افزونه تعداد ردیف‌های تغییرکرده رو نشون می‌ده. چند صفحه از سایت، نوشته‌ها، تصاویر و بخش مدیریت رو باز کنید تا مطمئن بشید همه‌چیز درست کار می‌کنه.

روش دوم: جستجو و جایگزینی با WP-CLI

WP-CLI ابزار خط فرمان وردپرسه؛ یعنی به‌جای کلیک داخل پیشخوان، دستورها رو در ترمینال هاست اجرا می‌کنید. این روش برای سایت‌های بزرگ سریع و کاربردیه، ولی باید به SSH دسترسی داشته باشین و با اجرای دستور در هاست راحت باشین. اگه اولین باره از این ابزار استفاده می‌کنید، اول آموزش استفاده از WP-CLI برای مدیریت وردپرس رو بخونید.

اول وارد پوشه‌ای بشید که فایل wp-config.php سایت داخل اون قرار گرفته. بعد برای دیدن نتیجه بدون ذخیره تغییرها، این دستور رو اجرا کنید:

Bash
wp search-replace 'https://old.example.com' 'https://new.example.com' --all-tables-with-prefix --dry-run

گزینه --dry-run فقط نتیجه احتمالی رو گزارش می‌کنه. گزینه --all-tables-with-prefix هم همه جدول‌هایی رو بررسی می‌کنه که پیشوند همین نصب وردپرس رو دارن؛ پس فقط به جدول‌های اصلی وردپرس محدود نیست و ممکنه جدول‌های افزونه‌ها رو هم درگیر کنه. قبل از اجرای واقعی، اسم و تعداد نتیجه‌های هر جدول رو ببینید. مطمئن بشید پیشوند جدول‌ها درست تشخیص داده شده، دیتابیس شامل نصب جداگانه‌ای با همون پیشوند نیست و جدول‌های انتخاب‌شده واقعاً به همین سایت تعلق دارن.

دستور wp search-replace برای کار با داده‌های سریال‌شده وردپرس طراحی شده، ولی این موضوع جای بکاپ و Dry Run رو نمی‌گیره. اگه سایت چندسایته دارین یا ساختار دیتابیستون اختصاصیه، قبل از اجرای واقعی گزینه‌ها و محدوده دستور رو با مستندات رسمی WP-CLI تطبیق بدید.

اگه گزارش آزمایشی درست بود، بکاپ تازه بگیرید و همین دستور رو بدون --dry-run اجرا کنید:

Bash
wp search-replace 'https://old.example.com' 'https://new.example.com' --all-tables-with-prefix

آدرس‌های نمونه رو با آدرس واقعی سایتتون عوض کنید. علامت نقل‌قول‌های دور هر آدرس رو هم نگه دارین تا پوسته خط فرمان عبارت رو درست دریافت کنه.

چرا اجرای مستقیم دستور SQL پیشنهاد نمی‌شه

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

برای همین بهتره از Better Search Replace یا دستور wp search-replace استفاده کنید. هر دو ابزار حالت بررسی آزمایشی دارن و برای کار با ساختارهای رایج دیتابیس وردپرس ساخته شدن؛ ولی باز هم باید محدوده جدول‌ها و نتیجه Dry Run رو خودتون بررسی کنید.

بعد از جایگزینی چه چیزهایی رو بررسی کنید

  • صفحه اصلی، چند نوشته و چند برگه رو در حالت ناشناس مرورگر باز کنید.
  • روی لینک‌های داخلی مهم کلیک کنید و خطای 404 رو بررسی کنید.
  • چند تصویر قدیمی و جدید رو باز کنید و مطمئن بشید آدرس اون‌ها درست بارگذاری می‌شه.
  • اگه از فرم ورود، فرم تماس یا فرایند خرید استفاده می‌کنید، اون‌ها رو آزمایش کنید.
  • کش افزونه، هاست و شبکه توزیع محتوا یا CDN رو پاک کنید. CDN سرویسیه که فایل‌های سایت رو از سرورهای نزدیک‌تر به کاربر تحویل می‌ده.
  • کنسول مرورگر و گزارش خطاهای سرور رو برای پیدا کردن درخواست‌های ناموفق بررسی کنید.
  • عبارت قدیمی رو دوباره با Dry Run جستجو کنید تا موارد باقی‌مونده مشخص بشن.

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

جمع‌بندی

برای جستجو و جایگزینی در دیتابیس وردپرس، اول بکاپ کامل بگیرید و کار رو با Dry Run شروع کنید. نصب افزونه Search & Replace رو به‌دلیل هشداری که در زمان آخرین بررسی داخل مخزن وردپرس دیده می‌شد پیشنهاد نمی‌کنیم. برای بیشتر کاربران، Better Search Replace مسیر ساده‌تریه و برای کاربران فنی، دستور wp search-replace کنترل بیشتری می‌ده.

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

سؤالات متداول

آیا قبل از جستجو و جایگزینی باید بکاپ بگیریم؟

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

Dry Run چه کاری انجام می‌ده؟

Dry Run نتیجه احتمالی جایگزینی رو نشون می‌ده، ولی تغییری داخل دیتابیس ذخیره نمی‌کنه. تعداد نتیجه‌ها و جدول‌های درگیر رو بررسی کنید و فقط بعد از مطمئن شدن سراغ اجرای واقعی برید.

می‌شه تغییرهای اشتباه رو با یک کلیک برگردوند؟

معمولاً دکمه‌ای برای برگردوندن کامل همه تغییرها ندارین. راه مطمئن، بازیابی بکاپیه که درست قبل از عملیات گرفتید.

آیا تغییر آدرس تصاویر، فایل‌ها رو هم منتقل می‌کنه؟

نه. جستجو و جایگزینی فقط آدرس ذخیره‌شده داخل دیتابیس رو عوض می‌کنه. فایل‌های تصویر باید جداگانه به مقصد جدید منتقل شده باشن و تنظیمات دامنه یا فضای ذخیره‌سازی هم درست انجام شده باشه.

آیا باید همه جدول‌های دیتابیس رو انتخاب کنیم؟

نه، برای اجرای واقعی بهتره فقط جدول‌های مرتبط رو انتخاب کنید. اگه محل اطلاعات رو نمی‌دونید، اول همه جدول‌های مربوط به سایت رو با Dry Run بررسی کنید و بعد جدول‌های نامرتبط، لاگ‌ها، کش و داده‌های موقتی رو از اجرای واقعی کنار بذارید.

نظر شما در این مورد چیه؟

  1. U326594۲۹ تیر ۱۴۰۲

    سلام
    ممنون از مطلب خوبتون
    من متاسفانه ویروس پاپ آپ سایتم دچارش شده، یه سری کد به ادیتور متن بعضی وقت ها اضافه میکنه وقتی پستی رو میفرستیم، این کد هم در ادیتور قرار داره و ارسال میشه و متاسفانه پاپ اپ باز میشه
    الان من میخوام ببینم در کدوم پست هام این کد ها قرار گرفتن
    کد رو با این افزونه سرچ میکنم پیدا میکنه ولی متاسفانه نمیگه بهم کدوم پست هست
    توی سرچ خود دیتا بیس هم به نتیجه ای نرسیدم
    آیا راه حلی سراغ دارید؟ ممنون میشم کمک کنید

    • رضا راد۳۱ تیر ۱۴۰۲

      سلام توی پست ها نیستن معمولا. تو سایت سرچ کنید پاکسازی سایت ویروسی آموزشش هست.

  2. U317716۱۱ مهر ۱۴۰۱

    سلام میشه راهنمایی کنید برای ریختن یک زمنیه دلخواه داخل یک زمینه دلخواه دیگه با این افزونه چیکار باید کرد؟

    • رضا راد۱۸ مهر ۱۴۰۱

      سلام با افزونه که نه ولی با کدهای sql توی phpmyadmin میتونید. سرچ کنید به انگلیسی توی گوگل روش هایی پیدا میشه

  3. U9745۲ آبان ۱۳۹۷

    سلام.
    محتویات پوشه wp-uploads ما رفته به هاست دانلودمون
    حالا این تغییر مسیر رو چگونه بدیم برای تصاویر و ویدیوها
    در Search for: چه چیزی بنویسیم و در Replace with: چه چیزی؟
    کدام جداول را انتخاب کنیم؟

    • U10690۳ آبان ۱۳۹۷

      سلام شما باید توی قسمت search for ادرس پوشه اپلود رو بنویسید مثلا mihanwp.com/wp-content/uploads/ و توی replace with بنویسید مثلا mihanwp.com/wp-content/uploads/ و حتما دقت داشته باشید که قبل از انجام اینکار بک آپ گیری از دیتابیس را انجام دهید.

  4. کاربر مهمان۵ خرداد ۱۳۹۶

    سلام مهندس لطفا آموزش کدنویسی ش بدون پلاگین رو روی سایت بزاریدممنون

  5. کاربر مهمان۶ اردیبهشت ۱۳۹۶

    عالی بود اقای راد

  6. U3937۳۰ بهمن ۱۳۹۵

    سلام مهندس خسته نباشیsearch and replace برای متن محصولات نداریم؟! 500تا محصولو چوری یجا یه کلمه رو توش اصلاح کنیم!!؟

    • رضا راد۳۰ بهمن ۱۳۹۵

      سلام بله این روش برای محصولات هم جواب میده

پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرس
پشتیبانپشتیبانپشتیبانپشتیبانپشتیبان
تیم میهن وردپرسآنلاین و پاسخگوی شما هستیم.آنلاین

در حال بارگذاری...

هر سوالی دارید بپرسید.پاسخگوی شما هستیم.