WordPress
تشغيل البحث والاستبدال في قاعدة بيانات WordPress الخاصة بك
WordPress stores absolute URLs in dozens of database tables, so a domain change or an SSL move leaves old addresses scattered through posts, options and plugin settings: a search and replace is how…
يخزّن WordPress عناوين URL المطلقة في عشرات جداول قاعدة البيانات، لذلك فإن تغيير النطاق أو نقل SSL يترك عناوين قديمة منتشرة في المنشورات والخيارات وإعدادات المكونات الإضافية: البحث والاستبدال هو كيفية تنظيفها بأمان. يغطي هذا الدليل الطريقتين المدعومتين للقيام بذلك في KPanel، وسبب فساد إحدى الطرق الثالثة الشائعة للبيانات، وكيفية التحقق من النتيجة.
عندما تحتاج إلى واحد
- الانتقال من
http://إلىhttps://بعد تفعيل SSL. - تغيير النطاق، على سبيل المثال من
old-brand.co.nzإلىnew-brand.co.nz. - بعد دفع التصريح إلى الإنتاج، عندما تكون اسم المضيف الخاص بالتصريح لا يزال مضمناً في قاعدة البيانات.
- إيقاف مضيف الأصول القديم وإعادة توجيه كل عنوان URL للصورة في المرة الواحدة.
- إصلاح خطأ مجموعي عبر العديد من المنشورات، مثل رقم هاتف قديم أو اسم منتج متوقف.
يعيد البحث والاستبدال كتابة الصفوف عبر كل جدول في المرة الواحدة وليس هناك تراجع لكل صف. قم بنسخ احتياطي قبل أن تبدأ، في كل مرة، حتى للتغيير الذي يبدو تافهاً. ينشئ KPanel واحداً تلقائياً عندما تستخدم الأدوات المدمجة الموصوفة أدناه، لكن إذا كنت تشغل الأمر بنفسك فأنت مسؤول عن ذلك. راجع إجراء نسخة احتياطية.
لماذا لا يمكنك فقط تشغيل SQL REPLACE
هذا هو الخطأ الأكثر ضراراً في عمل قاعدة بيانات WordPress، لذا من الجدير بالفهم قبل اختيار طريقة.
يخزّن WordPress إعدادات المكون الإضافي وخيارات المظهر وبيانات الأداة كسلاسل مسلسلة من PHP. تسجل السلسلة المسلسلة طول كل قيمة بداخلها، مثل هذا:
a:1:{s:3:"url";s:26:"http://old-domain.co.nz/x";}
يقول s:26 أن عنوان URL يبلغ طوله 26 حرفاً. استبدل http:// بـ https:// باستخدام SQL عادي REPLACE() والنص يصبح 27 حرفاً بينما يظل الطول المخزن يدّعي 26. ثم يرفض PHP إلغاء تسلسل الخيار بالكامل، وتعود الإعدادات بصمت إلى فارغة. تختفي إعدادات أداة تخصيص المظهر، والمنزلقات تفقد شرائحها، والتراخيص الخاصة بالمكون الإضافي تلغي تسجيل نفسها.
يلغي بحث WP-CLI الاستبدال الذي يشغله KPanel تسلسل كل قيمة، واستبدال بداخلها، وإعادة تسلسل بأطوال مصححة. هذا هو السبب في أنها الطريقة الوحيدة الموثقة هنا.
لا تشغل أبداً UPDATE wp_options SET option_value = REPLACE(...) أو ما يعادله في phpMyAdmin ضد قاعدة بيانات WordPress. يبدو أنه نجح، ويبلغ عن الصفوف المتأثرة، وهو يدمر بهدوء كل إعداد مسلسل لمسته. لا توجد إصلاحات قصيرة من استعادة نسخة احتياطية.
الطريقة 1: بطاقة البحث والاستبدال
هذا هو الخيار الصحيح لتقريباً الجميع. وهو متاح على كل خطة WordPress.
- سجّل الدخول إلى KPanel وانقر على Websites في الشريط الجانبي الأيسر.
- انقر على الموقع.
- افتح علامة التبويب WordPress، ثم قسم Quick Actions.
- ابحث عن بطاقة Search & Replace وانقر على Configure.
- أدخل النص الموجود في Find (old value).
- أدخل النص الجديد في Replace with.
- اترك Dry run (preview only, no changes) محدداً وانقر على Preview.

يبلغ الجري الجاف عن عدد الاستبدالات التي ستتم وينقسم العدد حسب الجدول والعمود، حتى تتمكن من رؤية بالضبط أين ستصل التغييرات قبل أن تلتزم به.
عندما تبدو المعاينة صحيحة:
- قم بإلغاء تحديد Dry run.
- انقر على Run.
- أكّد مربع الحوار.
يتم أخذ نسخة احتياطية كاملة تلقائياً قبل بدء الاستبدال، والعملية تغطي جميع الجداول بما في ذلك تلك التي أنشأتها المكونات الإضافية.
ابحث عن أكثر سلسلة محددة يمكنك. استبدال old-domain.co.nz يعيد كتابة أيضاً mail.old-domain.co.nz و staging.old-domain.co.nz، وهو نادراً ما يكون ما تريده. تضمين المخطط، كما في https://old-domain.co.nz، يبقي المطابقة محكمة.
الطريقة 2: WP-CLI من وحدة التحكم
تمنحك وحدة التحكم نفس المحرك بتحكم أكثر على الأعلام. إنها أحد الأقسام التي تظهر في الخطط المدارة؛ في الخطط الأخرى يظهر شريط علامات التبويب رابط +8 on Managed بدلاً من ذلك.
افتح الموقع، ثم WordPress، ثم Console. يبدأ المطالبة بالفعل بـ wp، لذا اكتب فقط بقية الأمر.
معاينة أولاً:
search-replace 'http://old-domain.co.nz' 'https://old-domain.co.nz' --all-tables --dry-run
ثم شغله للحقيقي:
search-replace 'http://old-domain.co.nz' 'https://old-domain.co.nz' --all-tables
وحدة التحكم لا تأخذ نسخة احتياطية لك. النسخة الاحتياطية التلقائية قبل التشغيل تحدث فقط عندما تستخدم بطاقة البحث والاستبدال في الطريقة 1. إذا كنت تشغل الأمر هنا، قم بنسخ احتياطي بنفسك أولاً من علامة التبويب Backups الخاصة بالموقع.
الأعلام المفيدة:
| الرايةBold | ما الذي تفعله |
|---|---|
--all-tables | تضمن الجداول المخصصة التي أنشأتها المكونات الإضافية، ليس فقط جداول WordPress الأساسية |
--dry-run | يقارن ما سيتغير ولا يكتب أي شيء |
--precise | يستخدم PHP بدلاً من SQL للاستبدال. أبطأ، لكنه يتعامل مع الهياكل المسلسلة الصعبة |
--skip-columns=guid | يترك معرفات المنشورات وحدها (انظر أدناه) |
--report-changed-only | يقتصر المخرجات على الجداول التي تغيرت فعلاً |
ملاحظة حول GUIDs
لكل منشور WordPress عمود guid. على الرغم من أنه يبدو مثل عنوان URL فإنه معرّف، وليس رابطاً، والقارئات تستخدمه لمعرفة ما إذا كانوا قد شاهدوا العنصر بالفعل. إعادة كتابته يمكن أن تجعل كل منشور في الخلاصة الخاصة بك يظهر كجديد.
أعد كتابة GUIDs عندما تكون تغيير النطاق دائماً والبدء من جديد. تخطيها باستخدام --skip-columns=guid عندما تنتقل فقط من HTTP إلى HTTPS على نفس النطاق.
تغيير النطاق: استخدم بطاقة تغيير عنوان الموقع بدلاً من ذلك
إذا كانت النقطة بالكامل هي نقل الموقع إلى نطاق جديد، فلا تبدأ بالبحث والاستبدال. بطاقة Change Site URL، على نفس قسم Quick Actions، تحدّث خيارات siteurl و home وتشغل الاستبدال عبر جميع الجداول في عملية واحدة، بالترتيب الصحيح. القيام بذلك بالطريقة الأخرى يمكن أن يترك WordPress غير قادر على تحميل مسؤوله الخاص.
بعد الاستبدال
اعمل من خلال هذه القائمة قبل أن تناديها منتهية.
- امسح ذاكرة التخزين المؤقت. في قسم Quick Actions، قم بتشغيل Flush Cache. إذا كان الموقع يستخدم ذاكرة التخزين المؤقت بصفحة كاملة، فقم بتنقيتها من WordPress، ثم Caching.
- امسح قواعد إعادة الكتابة. قم بتشغيل Flush Rewrites على نفس القسم، أو افتح Settings، ثم Permalinks في wp-admin وانقر على Save Changes بدون تغيير أي شيء.
- امسح CDN إذا كان الموقع عليه، من Performance، ثم Kapsule CDN. انظر تنقية ذاكرة CDN.
- حمّل الموقع في نافذة خاصة بحيث لا يمكن لذاكرة التخزين المؤقت للمتصفح أن تضللك.
- تحقق من قفل. قفل مفقود أو قفل تحذير بعد نقل SSL يعني ترك عناوين URL وراءك: إصلاح تحذيرات المحتوى المختلط.
- انقر من خلال الصفحات الصعبة. منزلقات الصفحة الرئيسية، شعار الرأس، أي صفحة مبنية ببناء صفحات، والدفع في المتجر. تحمل هذه عناوين URL التي تعيش في خيارات مسلسلة.
- امسح أي مكون إضافي لتخزين مؤقت من شاشة الإعدادات الخاصة به.
استكشاف الأخطاء
يبلغ الجري الجاف عن صفر استبدالات. السلسلة ليست في قاعدة البيانات في هذا النموذج بالضبط. تحقق من الشرطة المائلة للخلف، بادئة www.، أو المخطط. جرب البحث عن اسم المضيف العاري أولاً للتأكد من وجوده على الإطلاق.
الصور مكسورة بعد تغيير النطاق. عناوين URL الإعلامية تعيش في wp_posts و wp_postmeta ويتم اختيارها بواسطة --all-tables، لكن CDN أو مكون إضافي لتحسين الصورة قد يخزن نسخه المعاد كتابتها مؤقتاً. تنقية CDN وذاكرة التخزين المؤقت للمكون الإضافي، ثم أعد التحميل.
اختفت الإعدادات بعد الاستبدال. هذه هي مشكلة التسلسل، وهذا يعني أن التغيير تم باستخدام SQL الخام وليس من خلال الأدوات هنا. استعد النسخة الاحتياطية المأخوذة قبل التشغيل: الاستعادة من نسخة احتياطية.
عناوين URL الخاصة بالتصريح تستمر في العودة. شيء ما يعيد ملؤها، عادة دفع مجدول أو خيار مخزن مؤقتاً. تحقق من سير العمل في استخدام التصريح: الدفع والسحب وتأكد من تحديد Rewrite URLs عند الدفع.