عندك 25 ووردبريس للمحتوى المؤرخ مثل التدوينات والأخبار والشروحات. تُرتّب زمنيًا وتُنظَّم بالتصنيفات والوسوم وتظهر في الأرشيف وخلاصات RSS، بخلاف الصفحات الثابتة.">صفحة توثيق، وكل صفحة فيها نفس القائمة الجانبية، ولسه نشرت درس جديد ومحتاج تحدّث رابطه في كل الصفحات؟ تفتح الصفحة، تعدّل، تحفظ، وتعيد ده 25 مرة؟ لأ. فيه طريقة بتعمل الشغل ده في أقل من ثانية.
الفكرة: رابط مؤقت يسهل استبداله
صاحب التجربة يكتب توثيق محرك ألعاب في ووردبريس، صفحة لكل وحدة. كل صفحة تحتوي على قائمة جانبية بكل الوحدات، والوحدات التي لم يُكتب درسها بعد تشير إلى مرساة مؤقتة:
<li><a href="#BeeAnimatedSprite">BeeAnimatedSprite.js</a></li>
عند نشر الدرس الحقيقي يجب أن يتحول هذا الرابط إلى رابط الصفحة الجديدة في كل الصفحات. بدلاً من التعديل اليدوي، استخدم البحث والاستبدال (Search and Replace) مباشرة على السيرفر.">قاعدة البيانات (Database).
الطريقة الأولى: إضافة Better Search Replace
Better Search Replace إضافة (Plugin) مجانية معروفة في عمليات نقل المواقع، لكنها مفيدة جداً لأي محتوى متكرر.
- ثبّت الإضافة من إضافات ← أضف جديد، ثم افتح أدوات ← Better Search Replace.
- في حقل Search for اكتب النص القديم كاملاً:
href="#BeeAnimatedSprite". - في حقل Replace with اكتب النص الجديد:
href="https://example.com/animated-sprite-guide/". - اختر جدول
wp_posts. انتبه: البادئة قد تختلف في موقعك (مثلwpx7_posts). - اترك خيار Run as dry run مفعّلاً واضغط Run Search/Replace.
- راجع العدد، ثم ألغِ التشغيل التجريبي ونفّذ فعلياً.
لماذا ظهر عدد أكبر بكثير من صفحاتك؟
في التجربة الأصلية أظهر التشغيل التجريبي (Dry Run) 444 خلية رغم أن الصفحات 25 فقط. السبب مراجعات المقالات (Post Revisions): ووردبريس تحفظ نسخة من الصفحة مع كل تعديل في الجدول نفسه، والبحث يشملها. الرقم الكبير طبيعي، أما الرقم غير المنطقي تماماً فمعناه أن نص البحث عام أكثر من اللازم.
الميزة المهمة أن الإضافة تتعامل مع القالب في Elementor تصميم محفوظ يُعاد استخدامه، مثل رأس الموقع أو التذييل أو صفحة المقالة أو صفحة المنتج. تصممه مرة وتحدد شروط ظهوره، فيُطبَّق على كل…">القالب بصمت.">البيانات المسلسلة (Serialized Data) بشكل صحيح، فلا تكسر إعدادات الإضافات المخزنة بهذه الصيغة، على عكس استعلام SQL يدوي من phpMyAdmin.
الطريقة الثانية: سطر واحد في WP-CLI
إن كانت استضافتك توفر SSH، فـ WP-CLI أسرع ولا يحتاج إلى تثبيت إضافة:
# Preview first
wp search-replace 'href="#BeeAnimatedSprite"' 'href="https://example.com/animated-sprite-guide/"' wp_posts --dry-run
# Then run it for real
wp search-replace 'href="#BeeAnimatedSprite"' 'href="https://example.com/animated-sprite-guide/"' wp_posts
أغلب خطط الاستضافة المشتركة المتوسطة وما فوقها، مثل Hostinger التي يعتمد عليها كثيرون في مصر والخليج، تتيح SSH وWP-CLI من لوحة التحكم.
قائمة الأمان قبل الضغط على التنفيذ
- خذ نسخة احتياطية (Backup) من قاعدة البيانات أولاً: التغيير دائم ولا يوجد زر تراجع.
- ابدأ دائماً بالتشغيل التجريبي وتأكد أن العدد منطقي.
- ابحث عن نص فريد:
href="#BeeAnimatedSprite"كاملاً، لا كلمةBeeAnimatedSpriteوحدها التي قد تظهر في نصوص أخرى. - امسح الكاش بعد التنفيذ، سواء LiteSpeed Cache أو غيرها، وإلا ستظل ترى الروابط القديمة.
- افتح صفحة واضغط الرابط بنفسك للتأكد.
تنبيه مهم: صفحات Elementor مخزنة في مكان آخر
في Elementor: الصفحات المبنية بـ Elementor لا يكفي معها البحث في wp_posts. محتوى Elementor الفعلي محفوظ بصيغة JSON في جدول wp_postmeta تحت المفتاح _elementor_data، والروابط داخله تُكتب بشرطات مائلة مهربة مثل https://example.com/.
لذلك:
- إن كنت تستبدل مرساة مثل
#BeeAnimatedSpriteفابحث فيwp_postmetaأيضاً، والمرساة لا تحتوي على شرطات فتطابق مباشرة. - إن كنت تغيّر دومين الموقع كله فاستخدم أداة Elementor ← Tools ← Replace URL المخصصة لذلك.
- بعد أي استبدال اضغط Regenerate CSS & Data من أدوات Elementor، ثم امسح الكاش.
الحيلة التي توفر عليك ساعات لاحقاً
اكتب كل رابط لم يُنشر بعد بصيغة ثابتة مثل href="#ModuleName". عند نشر الدرس، عملية استبدال واحدة تربط التوثيق كله. الفكرة نفسها تصلح لأي محتوى متكرر: أرقام واتساب في صفحات الخدمات، أو رابط حجز يتغير كل موسم.
اقرأ أيضًا
الأسئلة الشائعة
س: هل البحث والاستبدال في قاعدة البيانات آمن؟
ج: آمن إذا أخذت نسخة احتياطية، وبدأت بالتشغيل التجريبي، واستخدمت نص بحث فريداً. الخطر الحقيقي في التنفيذ المباشر دون مراجعة.
س: هل أستخدم phpMyAdmin بدلاً من الإضافة؟
ج: يمكن للنصوص البسيطة، لكن استعلام REPLACE في SQL يكسر البيانات المسلسلة إذا تغيّر طول النص. الإضافة وWP-CLI يعالجان ذلك تلقائياً.
س: هل يجب حذف الإضافة بعد الاستخدام؟
ج: يُفضّل تعطيلها وحذفها بعد الانتهاء، فأقل عدد من الإضافات النشطة يعني سطح هجوم أصغر وأداء أفضل.
س: لماذا لم تتغير الروابط في صفحات Elementor؟
ج: لأن محتواها في wp_postmeta وليس في wp_posts، والروابط فيها مكتوبة بشرطات مهربة. ابحث في الجدول الصحيح ثم أعد توليد CSS.
الخلاصة
بدل ما تقضي ساعة تفتح صفحات وتقفلها، ثانية واحدة وتشغيل تجريبي كفاية. خد باك أب، جرّب الأول، ومتنساش إن صفحات Elementor ليها جدول تاني خالص.
مرجع المقال (بالإنجليزية): I almost edited 25 documentation pages by hand. Then one WordPress plugin did it in 1 second.
المقال ده مش ترجمة حرفية: متكيّف للقارئ العربي ومضاف عليه سياق ووردبريس وElementor وJetEngine.



