# تشغيل البحث والاستبدال في قاعدة بيانات WordPress

Source: https://support.kapsulehost.com/ar-ae/wordpress-search-replace

يخزّن WordPress عناوين URL مطلقة في عشرات جداول قاعدة البيانات، لذا فإن تغيير النطاق أو الانتقال إلى SSL يترك العناوين القديمة متناثرة في المقالات والخيارات وإعدادات الإضافات: والبحث والاستبدال هو الطريقة الآمنة لتنظيفها. يغطي هذا الدليل الطريقتين المدعومتين لفعل ذلك في KPanel، ولماذا تُفسد طريقة ثالثة شائعة البيانات، وكيفية التحقق من النتيجة.

## متى تحتاج إليه

- الانتقال من `http://` إلى `https://` بعد تفعيل SSL.
- تغيير النطاق، على سبيل المثال من `old-brand.co.nz` إلى `new-brand.co.nz`.
- بعد دفع بيئة الاختبار إلى بيئة الإنتاج، عندما يظل اسم مضيف بيئة الاختبار مدمجًا في قاعدة البيانات.
- الاستغناء عن مضيف أصول قديم وإعادة توجيه كل عناوين URL للصور دفعة واحدة.
- إصلاح خطأ مطبعي متكرر في مقالات كثيرة، مثل رقم هاتف قديم أو اسم منتج متوقف.

> **Warning:** يعيد البحث والاستبدال كتابة الصفوف في كل الجداول دفعة واحدة، ولا يوجد تراجع على مستوى الصف الواحد. خذ نسخة احتياطية قبل أن تبدأ، في كل مرة، حتى لتغيير يبدو بسيطًا. ينشئ KPanel واحدة تلقائيًا عندما تستخدم الأدوات المدمجة الموضحة أدناه، لكن إذا كنت تشغّل الأمر بنفسك فأنت المسؤول عن ذلك. راجع [إنشاء نسخة احتياطية](https://support.kapsulehost.com/ar-ae/taking-a-backup).

## لماذا لا يمكنك تشغيل SQL REPLACE ببساطة

هذا هو الخطأ الأكثر ضررًا على الإطلاق في العمل على قاعدة بيانات WordPress، لذا من المفيد فهمه قبل أن تختار طريقة.

يخزّن WordPress إعدادات الإضافات وخيارات القوالب وبيانات الودجات كسلاسل PHP مُسلسَلة. تسجّل السلسلة المُسلسَلة طول كل قيمة بداخلها، هكذا:

```
a:1:{s:3:"url";s:26:"http://old-domain.co.nz/x";}
```

يشير `s:26` إلى أن عنوان URL طوله 26 حرفًا. استبدل `http://` بـ `https://` باستخدام `REPLACE()` عادي في SQL وسيصبح النص 27 حرفًا بينما يظل الطول المخزن يدّعي 26. عندها يرفض PHP إلغاء تسلسل الخيار بأكمله، ويعود الإعداد إلى فارغ بصمت. تختفي إعدادات أداة تخصيص القالب، وتفقد شرائح العرض شرائحها، وتُلغي تراخيص الإضافات تسجيل نفسها.

يُلغي أمر search-replace في WP-CLI الذي يشغّله KPanel تسلسل كل قيمة، ويستبدل داخلها، ثم يعيد تسلسلها بأطوال مصححة. لهذا السبب هي الطريقة الوحيدة الموثقة هنا.

> **Important:** لا تشغّل أبدًا `UPDATE wp_options SET option_value = REPLACE(...)` أو ما يعادله في phpMyAdmin على قاعدة بيانات WordPress. يبدو أنه نجح، ويُبلغ عن صفوف متأثرة، ويُدمّر بهدوء كل إعداد مُسلسَل لمسه. لا يوجد إصلاح سوى استرجاع نسخة احتياطية.

## الطريقة 1: بطاقة البحث والاستبدال

هذا هو الخيار الصحيح للجميع تقريبًا. وهو متاح في كل خطط WordPress.

1. سجّل الدخول إلى [KPanel](https://kpanel.kapsulehost.com) وانقر على **المواقع** في الشريط الجانبي الأيسر.
2. انقر على الموقع.
3. افتح علامة التبويب **WordPress**، ثم قسم **الإجراءات السريعة**.
4. ابحث عن بطاقة **البحث والاستبدال** وانقر على **تهيئة**.
5. أدخل النص الحالي في **البحث عن (القيمة القديمة)**.
6. أدخل النص الجديد في **الاستبدال بـ**.
7. اترك **تشغيل تجريبي (معاينة فقط، دون تغييرات)** محددًا وانقر على **معاينة**.

![بطاقة البحث والاستبدال في الإجراءات السريعة في KPanel](https://support.kapsulehost.com/help/screenshots/wordpress-search-replace.d3d0a573.webp)

يُبلغ التشغيل التجريبي عن عدد عمليات الاستبدال التي ستُجرى ويُفصّل العدد حسب الجدول والعمود، حتى تتمكن من رؤية المكان الذي سيقع فيه التغيير بالضبط قبل أن تلتزم به.

عندما تبدو المعاينة صحيحة:

1. ألغِ تحديد **تشغيل تجريبي**.
2. انقر على **تشغيل**.
3. أكّد مربع الحوار.

تُؤخذ نسخة احتياطية كاملة تلقائيًا قبل بدء الاستبدال، ويغطي التشغيل كل الجداول بما فيها الجداول التي أنشأتها الإضافات.

> **Tip:** ابحث عن أكثر سلسلة محددة ممكنة. استبدال `old-domain.co.nz` يعيد كتابة `mail.old-domain.co.nz` و`staging.old-domain.co.nz` أيضًا، وهذا نادرًا ما يكون ما تريده. تضمين البروتوكول، كما في `https://old-domain.co.nz`، يُبقي المطابقة دقيقة.

## الطريقة 2: WP-CLI من وحدة التحكم

تمنحك وحدة التحكم المحرك نفسه مع تحكم أكبر في الخيارات. وهي أحد الأقسام التي تظهر في الخطط المُدارة؛ أما في الخطط الأخرى فيعرض شريط علامات التبويب رابط **+8 في الخطط المُدارة** بدلًا منها.

افتح الموقع، ثم **WordPress**، ثم **وحدة التحكم**. يبدأ سطر الأوامر بالفعل بـ `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
```

> **Warning:** لا تأخذ وحدة التحكم نسخة احتياطية نيابةً عنك. لا تحدث النسخة الاحتياطية التلقائية السابقة للتشغيل إلا عند استخدام بطاقة البحث والاستبدال في الطريقة 1. إذا شغّلت الأمر هنا، فخذ نسخة احتياطية بنفسك أولًا من صفحة **النسخ الاحتياطية** الخاصة بالموقع.

خيارات مفيدة:

| الخيار | وظيفته |
|---|---|
| `--all-tables` | يشمل الجداول المخصصة التي أنشأتها الإضافات، وليس فقط جداول WordPress الأساسية |
| `--dry-run` | يُبلغ عما سيتغير ولا يكتب شيئًا |
| `--precise` | يستخدم PHP بدلًا من SQL لإجراء الاستبدال. أبطأ، لكنه يتعامل مع البنى المُسلسَلة المعقدة |
| `--skip-columns=guid` | يترك معرّفات GUID للمقالات دون تغيير (انظر أدناه) |
| `--report-changed-only` | يقصر المخرجات على الجداول التي تغيرت فعلًا |

### ملاحظة حول معرّفات GUID

لكل مقالة في WordPress عمود `guid`. رغم أنه يبدو كعنوان URL، فهو معرّف وليس رابطًا، وتستخدمه قارئات الخلاصات لمعرفة ما إذا كانت قد رأت عنصرًا ما من قبل. قد تؤدي إعادة كتابته إلى ظهور كل مقالة في خلاصتك مجددًا كأنها جديدة.

أعد كتابة معرّفات GUID عندما تغيّر النطاق بشكل دائم وتبدأ من جديد. تجاوزها باستخدام `--skip-columns=guid` عندما تنتقل فقط من HTTP إلى HTTPS على النطاق نفسه.

## تغيير النطاق: استخدم بطاقة عنوان URL للموقع بدلًا من ذلك

إذا كان الهدف بأكمله هو نقل الموقع إلى نطاق جديد، فلا تبدأ بالبحث والاستبدال. تُحدّث بطاقة **تغيير عنوان URL للموقع**، الموجودة في قسم **الإجراءات السريعة** نفسه، الخيارين `siteurl` و`home` وتشغّل الاستبدال في كل الجداول في عملية واحدة، وبالترتيب الصحيح. القيام بذلك بالترتيب المعاكس قد يترك WordPress غير قادر على تحميل لوحة الإدارة الخاصة به.

## بعد الاستبدال

راجع هذه القائمة قبل أن تعتبر العمل منتهيًا.

1. **امسح ذاكرة التخزين المؤقت.** في قسم **الإجراءات السريعة**، شغّل **مسح ذاكرة التخزين المؤقت**. إذا كان الموقع يستخدم التخزين المؤقت الكامل للصفحات، فامسحه من **WordPress**، ثم **التخزين المؤقت**.
2. **امسح قواعد إعادة الكتابة.** شغّل **مسح قواعد إعادة الكتابة** في القسم نفسه، أو افتح **Settings**، ثم **Permalinks** في wp-admin وانقر على **Save Changes** دون تغيير أي شيء.
3. **امسح ذاكرة CDN** إذا كان الموقع يستخدمها، من **الأداء**، ثم **Kapsule CDN**. راجع [مسح ذاكرة التخزين المؤقت في Kapsule CDN](https://support.kapsulehost.com/ar-ae/cdn-cache-purge).
4. **حمّل الموقع في نافذة خاصة** حتى لا تضللك ذاكرة التخزين المؤقت في متصفحك.
5. **تحقق من القفل.** القفل المفقود أو الذي يُظهر تحذيرًا بعد الانتقال إلى SSL يعني أن عناوين URL قد تُركت دون تغيير: [إصلاح تحذيرات المحتوى المختلط](https://support.kapsulehost.com/ar-ae/ssl-mixed-content).
6. **تصفّح الصفحات الدقيقة.** شرائح العرض في الصفحة الرئيسية، وشعار الترويسة، وأي صفحة مبنية بأداة إنشاء صفحات، وصفحة الدفع في المتجر. هذه تحتوي على عناوين URL الموجودة في الخيارات المُسلسَلة.
7. **امسح أي إضافة تخزين مؤقت** من شاشة الإعدادات الخاصة بها.

## استكشاف الأخطاء وإصلاحها

**يُبلغ التشغيل التجريبي عن صفر عمليات استبدال.** السلسلة غير موجودة في قاعدة البيانات بهذا الشكل الدقيق. تحقق من وجود شرطة مائلة في النهاية، أو بادئة `www.`، أو البروتوكول. جرّب البحث عن اسم المضيف المجرد أولًا للتأكد من وجوده أصلًا.

**الصور معطلة بعد تغيير النطاق.** توجد عناوين URL للوسائط في `wp_posts` و`wp_postmeta` ويلتقطها `--all-tables`، لكن شبكة CDN أو إضافة تحسين الصور قد تخزن مؤقتًا نسخها المُعاد كتابتها الخاصة. امسح ذاكرة CDN وذاكرة الإضافة، ثم أعد التحميل.

**اختفت الإعدادات بعد الاستبدال.** هذه هي مشكلة التسلسل، وتعني أن التغيير أُجري باستخدام SQL خام بدلًا من الأدوات الموجودة هنا. استرجع النسخة الاحتياطية التي أُخذت قبل التشغيل: [استرجاع من نسخة احتياطية](https://support.kapsulehost.com/ar-ae/restoring-from-backup).

**تستمر عناوين URL الخاصة ببيئة الاختبار في العودة.** هناك شيء يعيد تعبئتها، وعادةً ما يكون دفعًا مجدولًا أو خيارًا مخزنًا مؤقتًا. راجع سير العمل في [استخدام بيئة الاختبار: الدفع والسحب](https://support.kapsulehost.com/ar-ae/wordpress-staging-workflow) وتأكد من تحديد **إعادة كتابة عناوين URL** عند الدفع.
