این کوئری که نوشتم وقتی اجرا کنی و دامنه قدیمی و جدیدتو در چند ثانیه تغییر میده فقط قبلش حتما بکاپ بگیر از دیتابیس.
کل لینکهای دامنه قبلی به جدید تغییر کنن،
بخشهایی مثل guid
و serialized data
خراب نشن،
بتونی با اطمینان اجراش کنی.
در ادامه نسخهی کامل، امن و حرفهایتر رو برات نوشتم
-- 🚨 همیشه قبل از هر چیز از دیتابیس بکآپ بگیر: -- mysqldump -u username -p database_name > backup_before_domain_change.sql; START TRANSACTION; -- 1️⃣ پستها (محتوا و لینک GUID) -- ⚠️ اگر نمیخوای GUID عوض شه (برای RSS/شناسهها)، خط دوم را کامنت کن UPDATE wp_posts SET post_content = REPLACE(post_content, 'https://oldomain.com', 'https://newdomain.com'), guid = REPLACE(guid, 'https://oldomain.com', 'https://newdomain.com') WHERE post_content LIKE '%oldomain.com%' OR guid LIKE '%oldomain.com%'; -- 2️⃣ متادیتای پستها UPDATE wp_postmeta SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com') WHERE meta_value LIKE '%oldomain.com%'; -- 3️⃣ گزینهها (Site URL، Home URL، و سایر تنظیمات) UPDATE wp_options SET option_value = REPLACE(option_value, 'https://oldomain.com', 'https://newdomain.com') WHERE option_value LIKE '%oldomain.com%'; -- 4️⃣ متادیتای دیدگاهها UPDATE wp_commentmeta SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com') WHERE meta_value LIKE '%oldomain.com%'; -- 5️⃣ محتوای دیدگاهها UPDATE wp_comments SET comment_content = REPLACE(comment_content, 'https://oldomain.com', 'https://newdomain.com') WHERE comment_content LIKE '%oldomain.com%'; -- 6️⃣ کاربران (اختیاری — اگر URL در bio یا meta ذخیره شده) UPDATE wp_usermeta SET meta_value = REPLACE(meta_value, 'https://oldomain.com', 'https://newdomain.com') WHERE meta_value LIKE '%oldomain.com%'; UPDATE wp_users SET user_url = REPLACE(user_url, 'https://oldomain.com', 'https://newdomain.com') WHERE user_url LIKE '%oldomain.com%'; -- 7️⃣ محتواهای افزونهها (در صورت وجود جدولهای custom) -- اگر پلاگینهایی داری مثل WooCommerce، ACF یا RankMath، اونها هم معمولاً -- در جدولهایی مثل wp_woocommerce_order_items، wp_yoast_indexable، یا wp_acf_fields داده ذخیره میکنن. -- در صورت نیاز، مشابه همین الگو اضافه کن. COMMIT;
نکات مهم
برای دادههای serialized (مثل ACF، Elementor و…)
دادهها ممکنه اینطوری ذخیره بشن:
# در مسیر وردپرس (SSH) wp search-replace 'https://oldomain.com' 'https://newdomain.com' --all-tables --precise --recurse-objects # اگر نمیخوای GUID پستها تغییر کنه: wp search-replace 'https://oldomain.com' 'https://newdomain.com' --all-tables --precise --recurse-objects --skip-columns=guid