ملفات ووردبريس الأساسية، ببساطة

كل ملف مهم بيعمل إيه، بيتقرا إمتى أثناء تحميل الصفحة، بيرتبط بإيه في الداتابيز، يحصل إيه لو اتمسح، وإزاي تعدّل عليه وتأمّنه.

١. شكل ووردبريس من جوه

أي موقع ووردبريس بيتكوّن من حاجتين منفصلين تمامًا، ولازم تفهم الفرق بينهم من الأول:

الملفات (Files)الكود نفسه: الكور، القوالب، الإضافات، والصور المرفوعة. موجودين على السيرفر.
قاعدة البيانات (Database)المحتوى والإعدادات: المقالات، الصفحات، المستخدمين، إعدادات الموقع، أي قالب شغال، أي إضافات مفعّلة. الملفات نفسها مش بتتخزن في الداتابيز، اللي بيتخزن هو اسمها أو مسارها أو إعداداتها.
public_html/ ├── wp-admin/ # لوحة التحكم (كور – ممنوع التعديل) ├── wp-includes/ # قلب ووردبريس: الدوال والكلاسات (كور – ممنوع التعديل) ├── wp-content/ # بتاعك إنت: قوالب، إضافات، صور │ ├── themes/ │ ├── plugins/ │ ├── mu-plugins/ │ ├── uploads/ │ └── languages/ ├── wp-config.php # أهم ملف: بيانات الداتابيز والإعدادات ├── .htaccess # قواعد السيرفر والروابط (Apache) ├── index.php # نقطة الدخول لكل صفحات الموقع ├── wp-load.php ├── wp-blog-header.php ├── wp-settings.php ├── wp-login.php ├── wp-cron.php ├── xmlrpc.php ├── wp-comments-post.php ├── wp-signup.php / wp-activate.php ├── wp-mail.php / wp-trackback.php / wp-links-opml.php ├── wp-config-sample.php ├── readme.html / license.txt

القاعدة الذهبية: wp-admin و wp-includes وملفات الجذر دي ملك ووردبريس وبتتستبدل مع كل تحديث. wp-content و wp-config.php و .htaccess دول ملكك إنت.

٢. ملفات الجذر ووظيفة كل ملف

الملفوظيفته ببساطةأهميته
wp-config.phpبيانات الاتصال بالداتابيز، مفاتيح التشفير، بادئة الجداول، ووضع الديباج. مش جزء من الكور ومش بيتغير مع التحديث.حرج جدًا
.htaccessملف إعدادات سيرفر Apache. ووردبريس بيكتب فيه قواعد الروابط الدائمة (Permalinks). على Nginx مش موجود والقواعد بتبقى في إعدادات السيرفر.حرج
index.phpأول ملف بيستقبل أي زيارة للموقع. ملف صغير جدًا، بيعرّف إن القالب هيستخدم ويستدعي wp-blog-header.php.حرج
wp-blog-header.phpبيحمّل ووردبريس، يشغّل دالة wp() اللي بتفهم الطلب، وبعدين يستدعي محمّل القوالب.حرج
wp-load.phpبيحدد مسار الموقع ABSPATH ويدوّر على wp-config.php (في نفس المجلد أو مجلد فوقه) ويحمّله. لو مش لاقيه يحوّلك لصفحة التنصيب.حرج
wp-settings.phpالمايسترو: بيحمّل ملفات wp-includes، يتصل بالداتابيز، يحمّل الإضافات والقالب، ويطلق الـ hooks الأساسية زي init.حرج
wp-login.phpصفحة تسجيل الدخول، الخروج، التسجيل، واستعادة كلمة المرور.مهم
wp-cron.phpبيشغّل المهام المجدولة (نشر مقال مجدول، تحديثات، نسخ احتياطي) لما حد يزور الموقع. المهام نفسها متخزنة في الداتابيز.مهم
xmlrpc.phpواجهة قديمة للتحكم عن بعد (تطبيقات الموبايل القديمة، Jetpack، Pingbacks). هدف مشهور لهجمات تخمين كلمات المرور.حساس أمنيًا
wp-comments-post.phpبيستقبل التعليقات اللي الزوار بيبعتوها ويحفظها.عادي
wp-signup.php / wp-activate.phpتسجيل وتفعيل الحسابات والمواقع في شبكة Multisite.عادي
wp-mail.phpميزة قديمة للنشر عن طريق الإيميل.عادي
wp-trackback.phpاستقبال الـ Trackbacks من مواقع تانية.عادي
wp-links-opml.phpتصدير الروابط بصيغة OPML (ميزة قديمة).عادي
wp-config-sample.phpنموذج فاضي لـ wp-config. مش بيتقري أثناء التشغيل.مرجع فقط
readme.html / license.txtمعلومات ورخصة. readme.html ممكن يكشف إن الموقع ووردبريس.غير ضروري للتشغيل

المجلدات الأساسية

wp-includes/ فيها كل الدوال والكلاسات اللي ووردبريس شغال بيها، زي class-wp-query.php (جلب المقالات)، functions.php (دوال عامة – غير functions.php بتاع القالب)، pluggable.php (دوال ممكن الإضافات تستبدلها زي wp_mailtemplate-loader.php (بيختار ملف القالب المناسب)، و version.php (رقم إصدار ووردبريس).

wp-admin/ فيها كل صفحات لوحة التحكم. أهم ملفاتها admin.php اللي كل صفحة أدمن بتمر بيه، و admin-ajax.php اللي بيستقبل طلبات AJAX من الإضافات والقوالب، و setup-config.php و install.php بتوع التنصيب.

٣. مجلد wp-content

ده مجلدك إنت، والتحديثات مش بتلمسه (إلا لو ووردبريس بيضيف قالب افتراضي جديد). ده المجلد اللي لازم يكون في النسخة الاحتياطية دايمًا مع الداتابيز.

themes (القوالب)

كل قالب في مجلد لوحده. أقل حاجة القالب الكلاسيكي محتاجها: style.css (فيه رأس الملف اللي عليه اسم القالب وبياناته) و index.php. قوالب البلوكات الحديثة محتاجة style.css و templates/index.html.

ملف القالبوظيفته
style.cssرأس الملف فيه اسم القالب، الإصدار، و Template: لو ده قالب فرعي. من غيره ووردبريس مش هيعترف بالقالب أصلًا.
functions.phpكود PHP بيتحمّل مع كل صفحة طول ما القالب شغال: تسجيل القوائم، دعم الصور البارزة، تحميل ملفات CSS/JS. غلطة فيه ممكن توقع الموقع كله.
index.phpالقالب الاحتياطي الأخير لو مفيش ملف أدق.
header.php / footer.phpرأس وذيل الصفحة، ولازم يكون فيهم wp_head() و wp_footer() عشان الإضافات تشتغل.
single.php، page.php، archive.php، 404.php، search.phpقوالب لأنواع صفحات محددة حسب «التسلسل الهرمي للقوالب» Template Hierarchy.
theme.jsonفي القوالب الحديثة: الألوان، الخطوط، المسافات، وإعدادات المحرر.
القالب الفرعي Child Themeأي تعديل على قالب جاهز اعمله في قالب فرعي، عشان تحديث القالب الأصلي ميمسحش شغلك. القالب الفرعي محتاج بس style.css فيه سطر Template: اسم-مجلد-القالب-الأصلي، ويُفضَّل functions.php يحمّل ستايل القالب الأب.

plugins (الإضافات)

كل إضافة في مجلد، وفيها ملف رئيسي عليه رأس Plugin Name:. ووردبريس بيحفظ في الداتابيز المسار النسبي للملف ده (مثلًا akismet/akismet.php) عشان يعرف إن الإضافة مفعّلة.

mu-plugins (إضافات إجبارية)

أي ملف PHP في المجلد ده بيشتغل تلقائيًا قبل الإضافات العادية، ومينفعش يتعطل من لوحة التحكم. مفيد لكود لازم يشتغل دايمًا. ملاحظة: ووردبريس بيقرأ الملفات اللي في المجلد مباشرة بس، مش اللي جوه مجلدات فرعية.

uploads (الملفات المرفوعة)

الصور والملفات بتتخزن بالشكل uploads/2026/09/photo.jpg مع نسخ بمقاسات مختلفة. الملف نفسه على السيرفر، وبياناته في الداتابيز كـ «مرفق» attachment.

ملفات Drop-ins الخاصة

ملفات بأسماء محددة لو حطيتها مباشرة في wp-content بتستبدل سلوك الكور: advanced-cache.php و object-cache.php (الكاش)، db.php (طبقة الداتابيز)، maintenance.php (صفحة الصيانة)، php-error.php و fatal-error-handler.php (صفحات الأخطاء). إضافات الكاش بتنشئ بعضها تلقائيًا.

٤. أهم ملف: wp-config.php

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

// بيانات الاتصال بالداتابيز
define( 'DB_NAME',     'database_name' );
define( 'DB_USER',     'database_user' );
define( 'DB_PASSWORD', 'strong_password' );
define( 'DB_HOST',     'localhost' );
define( 'DB_CHARSET',  'utf8mb4' );
define( 'DB_COLLATE',  '' );

// مفاتيح التشفير (بتتولد من https://api.wordpress.org/secret-key/1.1/salt/)
define( 'AUTH_KEY',         '...' );
define( 'SECURE_AUTH_KEY',  '...' );
define( 'LOGGED_IN_KEY',    '...' );
define( 'NONCE_KEY',        '...' );
define( 'AUTH_SALT',        '...' );
define( 'SECURE_AUTH_SALT', '...' );
define( 'LOGGED_IN_SALT',   '...' );
define( 'NONCE_SALT',       '...' );

// بادئة الجداول (لازم تطابق أسماء الجداول في الداتابيز)
$table_prefix = 'wp_';

// الديباج: شغّله على نسخة التجربة بس
define( 'WP_DEBUG', false );
define( 'WP_DEBUG_LOG', false );      // يكتب الأخطاء في wp-content/debug.log
define( 'WP_DEBUG_DISPLAY', false );  // ميعرضش الأخطاء للزوار

// إعدادات مفيدة
define( 'DISALLOW_FILE_EDIT', true ); // يقفل محرر الملفات من لوحة التحكم
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_POST_REVISIONS', 10 );    // حد أقصى لمراجعات المقال
define( 'FORCE_SSL_ADMIN', true );
// define( 'WP_HOME',    'https://example.com' );  // بيتجاوز قيمة home في الداتابيز
// define( 'WP_SITEURL', 'https://example.com' );  // بيتجاوز قيمة siteurl

/* لا تكتب أي حاجة بعد السطر ده */
if ( ! defined( 'ABSPATH' ) ) {
    define( 'ABSPATH', __DIR__ . '/' );
}
require_once ABSPATH . 'wp-settings.php';
انتبه لترتيب السطورأي define تضيفه لازم يكون قبل سطر require_once ABSPATH . 'wp-settings.php';، وإلا مش هيتطبق لأن ووردبريس يكون اتحمّل خلاص.
تغيير مفاتيح التشفيرلو غيّرت المفاتيح والـ salts، كل المستخدمين هيتعملهم تسجيل خروج فورًا. ده إجراء مفيد جدًا بعد أي اختراق.

أهمية الملفات بالترتيب: wp-config.php ثم .htaccess ثم ملفات سلسلة التحميل (index.phpwp-blog-header.phpwp-load.phpwp-settings.php) ثم functions.php بتاع القالب لأنه أكتر ملف بيتعدل وبيوقع مواقع.

٥. دورة الطلب Request Lifecycle

لما حد يفتح example.com/my-post/، ده اللي بيحصل بالترتيب. الدوائر المتقطعة هي نقاط الـ hooks اللي الإضافات والقوالب بتتدخل فيها.

  1. السيرفر يستقبل الطلب ويقرأ .htaccessالرابط /my-post/ مش ملف حقيقي، فقواعد الـ Rewrite بتحوّله لـ index.php.
  2. index.phpيعرّف WP_USE_THEMES = true ويستدعي wp-blog-header.php.
  3. wp-blog-header.php ← wp-load.phpيحدد ABSPATH ويدوّر على wp-config.php.
  4. wp-config.phpيعرّف بيانات الداتابيز والثوابت، وفي آخره يستدعي wp-settings.php.
  5. wp-settings.php يبدأ التحميليحمّل ملفات wp-includes، يتصل بالداتابيز، ويحمّل الخيارات المحمّلة تلقائيًا (autoload) من جدول wp_options.
  6. mu-plugins ثم الإضافات المفعّلةيقرأ active_plugins من الداتابيز ويحمّل ملفاتها. بعدها muplugins_loaded ثم plugins_loaded.
  7. pluggable.phpيحمّل الدوال القابلة للاستبدال (لو إضافة معرّفاها قبله، نسختها هي اللي بتشتغل).
  8. القالب: functions.phpsetup_theme ثم تحميل functions.php للقالب الفرعي ثم الأب، ثم after_setup_theme.
  9. init ثم wp_loadedالمستخدم الحالي اتعرف. هنا بتتسجل أنواع المقالات المخصصة والتصنيفات. ووردبريس جاهز بالكامل.
  10. wp(): فهم الطلبparse_request يطابق الرابط مع rewrite_rules المخزنة، ثم WP_Query يجيب المحتوى من wp_posts، ثم hook wp.
  11. template_redirectآخر فرصة للتحويل أو منع الوصول قبل عرض أي HTML.
  12. template-loader.php يختار ملف القالبحسب التسلسل الهرمي: مقال مفرد ← single-post.phpsingle.phpsingular.phpindex.php.
  13. عرض الصفحةملف القالب يشتغل، و wp_head و wp_footer يطبعوا ستايلات وسكربتات الإضافات.
  14. shutdownنهاية الطلب. وممكن wp-cron.php يتنادى في الخلفية لو فيه مهام مجدولة وقتها جه.
طلبات لوحة التحكم مختلفة شويةبتدخل من wp-admin/admin.php اللي بيستدعي wp-load.php مباشرة (من غير index.php والقالب)، وبعد init بيطلق admin_init. نفس الكلام لطلبات admin-ajax.php و REST API (/wp-json/).

٦. كل حاجة بتتخزن فين في الداتابيز

الجداول الافتراضية ١٢ جدول (بالبادئة wp_ أو اللي محددها في wp-config):

الجدولبيخزن إيه
wp_optionsإعدادات الموقع كلها: الرابط، الاسم، القالب الشغال، الإضافات المفعّلة، الويدجت، المهام المجدولة، الكاش المؤقت (transients).
wp_postsالمقالات، الصفحات، المرفقات، المراجعات، عناصر القوائم، CSS الإضافي، قوالب البلوكات، وأي نوع مقال مخصص (منتجات ووكومرس مثلًا).
wp_postmetaبيانات إضافية لكل مقال: مسار الصورة، الصورة البارزة، قالب الصفحة، الحقول المخصصة.
wp_usersالمستخدمين: اسم الدخول، الإيميل، كلمة المرور مشفّرة (hash).
wp_usermetaصلاحيات المستخدم ودوره، إعداداته، وجلسات الدخول.
wp_termsأسماء التصنيفات والوسوم والقوائم.
wp_term_taxonomyنوع كل term (تصنيف؟ وسم؟ قائمة؟) والأب وعدد المقالات.
wp_term_relationshipsالربط بين المقالات والتصنيفات/الوسوم/القوائم.
wp_termmetaبيانات إضافية للتصنيفات.
wp_comments / wp_commentmetaالتعليقات وبياناتها.
wp_linksمدير الروابط القديم (غالبًا فاضي).

ربط كل ملف أو مجلد بمكانه في الداتابيز

الملف / المجلداللي بيتخزن عنه في الداتابيز
wp-config.phpلا شيء. هو اللي بيقول لووردبريس الداتابيز فين. استثناء: لو عرّفت WP_HOME و WP_SITEURL فيه، بيتجاوزوا قيم home و siteurl في wp_options.
.htaccessالملف نفسه لأ، لكن شكل الرابط في wp_options → permalink_structure، والقواعد الداخلية المحسوبة في wp_options → rewrite_rules.
القالب الشغال (themes/)wp_options → template (مجلد القالب الأب) و stylesheet (مجلد القالب الفعلي، الفرعي لو موجود). إعدادات التخصيص في theme_mods_اسم-القالب. الويدجت في widget_* و sidebars_widgets.
تعديلات المحرر في قوالب البلوكاتwp_posts بأنواع wp_template و wp_template_part و wp_global_styles. يعني لو عدّلت الهيدر من المحرر، التعديل في الداتابيز مش في ملف القالب.
CSS الإضافي (Customizer)wp_posts بنوع custom_css.
الإضافات (plugins/)قائمة المفعّل في wp_options → active_plugins (مصفوفة serialized فيها مسارات زي folder/file.php). إعدادات كل إضافة غالبًا في wp_options وبعضها بيعمل جداول خاصة بيه.
mu-plugins/مش متسجلة في الداتابيز، بتشتغل لمجرد وجودها.
الصور (uploads/)صف في wp_posts نوعه attachment، ومسار الملف في wp_postmeta → _wp_attached_file، والمقاسات في _wp_attachment_metadata. مسار مجلد الرفع العام في upload_path لو متغيّر.
القوائمالقائمة نفسها term في wp_terms، والعناصر صفوف في wp_posts بنوع nav_menu_item، ومكانها في القالب داخل theme_mods.
wp-cron.phpجدول المهام في wp_options → cron.
إصدار ووردبريس (wp-includes/version.php)إصدار الداتابيز في wp_options → db_version. لو الملفات أحدث من الداتابيز، ووردبريس بيطلب «تحديث قاعدة البيانات».
wp-login.phpالمستخدم في wp_users، والدور في wp_usermeta → wp_capabilities، والجلسات في session_tokens. تعريف الأدوار نفسها في wp_options → wp_user_roles.
متعدلش روابط الموقع بـ Find & Replace في SQLكتير من القيم متخزنة serialized، والصيغة دي فيها طول النص. لو غيّرت الدومين بـ SQL عادي الطول هيبوظ والإعدادات هتضيع. استخدم wp search-replace 'old.com' 'new.com' من WP-CLI أو إضافة زي Better Search Replace.

٧. إيه اللي يتعدل وإيه اللي لأ

المكانتعدّل؟السبب
wp-admin/، wp-includes/، ملفات الجذرلاأي تحديث لووردبريس بيستبدلهم، وتعديلك هيضيع، وممكن يعمل ثغرة.
wp-config.phpنعممعمول عشان يتعدل ومش بيتلمس في التحديث.
.htaccessبحذراكتب قواعدك برّه علامات # BEGIN WordPress و # END WordPress، لأن ووردبريس بيعيد كتابة اللي بينهم.
قالب جاهز (مش بتاعك)لا مباشرةاستخدم قالب فرعي، لأن تحديث القالب بيمسح التعديلات.
القالب الفرعي / قالب إنت عاملهنعمده مكانك الطبيعي.
إضافة جاهزةلااستخدم الـ hooks بتاعتها من إضافة صغيرة خاصة بيك أو mu-plugin.
mu-plugins/، إضافة خاصة بيكنعمأفضل مكان لكود الموقع اللي مش مرتبط بشكل القالب.
uploads/من الوسائطارفع وامسح من مكتبة الوسائط، مش من FTP، عشان الداتابيز تفضل متطابقة.

الحاجات اللي بتتغير لوحدها طبيعي: .htaccess (لما تحفظ الروابط الدائمة أو إضافة أمان/كاش تكتب فيه)، uploads/، ملفات الكاش في wp-content/cache/، debug.log، وملف .maintenance المؤقت أثناء التحديثات.

٨. إزاي نعدل على الملفات صح

  1. خد نسخة احتياطية من الملف اللي هتعدله (وحبذا الموقع كله: الملفات + الداتابيز).
  2. اشتغل على نسخة تجريبية Staging لو التعديل كبير.
  3. عدّل عن طريق SFTP أو File Manager في لوحة الاستضافة، مش من «محرر ملفات القوالب» داخل ووردبريس. لو غلطت في المحرر الداخلي وحصل Fatal Error، ممكن متعرفش تدخل تصلحه.
  4. استخدم محرر نصوص حقيقي (VS Code، Notepad++)، مش Word أو Notepad الويندوز القديم، واحفظ بترميز UTF-8 بدون BOM. الـ BOM أو أي مسافة قبل <?php بتعمل خطأ «Headers already sent».
  5. شغّل الديباج مؤقتًا وتابع wp-content/debug.log، وبعد ما تخلص اقفله.
  6. بلاش تقفل ملفات PHP بـ ?> في آخر functions.php أو الإضافات، عشان أي سطر فاضي بعدها بيعمل مشاكل.

مثال: إضافة كود لقالب فرعي بشكل سليم في functions.php:

<?php
// تحميل ستايل القالب الأب
add_action( 'wp_enqueue_scripts', function () {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
} );

ولو عندك WP-CLI على السيرفر، ده أسهل طريق لحاجات كتير: wp plugin deactivate --all، wp theme activate twentytwentyfive، wp option get siteurl.

٩. لو ملف اتمسح: الأعراض والحل

الملف المفقوداللي هيحصلالحل
wp-config.phpالموقع يحوّلك لصفحة التنصيب «لنبدأ». خطر أمني: أي حد ممكن يكمّل التنصيب ويربط موقعك بداتابيز بتاعته ويتحكم فيه.ارفعه من النسخة الاحتياطية فورًا. لو مفيش، أنشئه من wp-config-sample.php بنفس بيانات الداتابيز ونفس $table_prefix (بص على أسماء الجداول في phpMyAdmin). المفاتيح ولّد جديدة.
.htaccessالصفحة الرئيسية شغالة، لكن كل الصفحات والمقالات تدي 404 (لو الروابط الدائمة مفعّلة). ولو كان فيه قواعد أمان أو تحويل HTTPS هتضيع.من لوحة التحكم: الإعدادات ← الروابط الدائمة ← حفظ من غير تغيير. أو أنشئه يدويًا بالمحتوى الافتراضي تحت الجدول ده.
index.php (الجذر)خطأ 403 Forbidden أو يظهر لستة ملفات الموقع (Directory Listing) أو صفحة الاستضافة الافتراضية.ارفعه من نسخة ووردبريس بنفس الإصدار.
wp-blog-header.php / wp-load.php / wp-settings.phpشاشة بيضاء أو Fatal error: require(): Failed opening required ...، والموقع ولوحة التحكم الاتنين واقفين.استبدال ملفات الكور (القسم ١١).
أي ملف في wp-includes أو wp-adminFatal error باسم الملف الناقص، أو جزء معين من لوحة التحكم يبوظ. غالبًا سببه تحديث اتقطع في النص.استبدال مجلدي wp-admin و wp-includes بالكامل.
wp-login.phpصفحة الدخول تدي 404 ومحدش يقدر يدخل. (لو إضافة أمان غيّرت رابط الدخول، ده طبيعي والملف موجود.)ارفعه من نسخة ووردبريس نظيفة.
wp-cron.phpالمقالات المجدولة تفضل «فاتها الموعد»، التحديثات التلقائية والنسخ الاحتياطية المجدولة تقف.ارفعه من نسخة ووردبريس.
xmlrpc.phpغالبًا محدش هيحس، إلا تطبيقات الموبايل القديمة وبعض خصائص Jetpack.لو محتاجه ارفعه. لو لأ، الأفضل يتقفل بقاعدة سيرفر مش بالمسح لأنه هيرجع مع التحديث.
style.css بتاع القالبووردبريس يعتبر القالب «معطوب» ويرجع تلقائيًا لقالب افتراضي لو موجود، فشكل الموقع يتغير فجأة.ارفع الملف تاني، وبعدين فعّل القالب من جديد لأن الإعداد اتغير في الداتابيز.
index.php بتاع القالبنفس اللي فوق: القالب يعتبر ناقص.أعد رفع القالب كامل.
functions.php بتاع القالبالموقع يشتغل بس خصائص تختفي: القوائم، الصور البارزة، ستايلات أو سكربتات.أعد رفع القالب أو ملفك من النسخة الاحتياطية.
مجلد القالب كلهرجوع لقالب افتراضي. لو مفيش أي قالب افتراضي، الواجهة تبقى فاضية.ارفع القالب وفعّله. الإعدادات (theme_mods) لسه في الداتابيز وهترجع.
مجلد إضافةووردبريس يعطّلها تلقائيًا ويظهر رسالة إن ملف الإضافة غير موجود. إعداداتها لسه في الداتابيز.ارفعها تاني وفعّلها، هترجع بإعداداتها.
ملفات من uploadsصور مكسورة. المرفق لسه ظاهر في مكتبة الوسائط لأن سجله في الداتابيز موجود.استرجع المجلد من النسخة الاحتياطية بنفس المسارات بالظبط.
index.php في wp-content أو plugins أو themesمفيش مشكلة في التشغيل، لكن ممكن حد يشوف لستة الملفات لو الـ Directory Listing مفتوح على السيرفر.أنشئ ملف فيه <?php // Silence is golden. وأقفل الـ Indexes من السيرفر.
object-cache.php أو advanced-cache.phpالموقع يشتغل بس أبطأ، وإضافة الكاش تشتكي.من إعدادات إضافة الكاش: عطّل وفعّل تاني عشان تنشئه.

محتوى .htaccess الافتراضي لموقع في جذر الدومين:

# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress

ولو الموقع في مجلد فرعي زي /blog/، غيّر RewriteBase /blog/ والسطر الأخير لـ /blog/index.php.

١٠. الأخطاء الشائعة وحلها

الخطأالسبب الغالبالحل
Error establishing a database connectionبيانات غلط في wp-config، أو سيرفر الداتابيز واقف، أو المستخدم ملوش صلاحيات، أو جداول تالفة.راجع DB_NAME و DB_USER و DB_PASSWORD و DB_HOST مع لوحة الاستضافة. للإصلاح: define('WP_ALLOW_REPAIR', true); وافتح /wp-admin/maint/repair.php ثم امسح السطر.
شاشة بيضاء WSOD أو «There has been a critical error»خطأ PHP في إضافة أو قالب، غالبًا بعد تعديل أو تحديث.شغّل WP_DEBUG_LOG واقرأ debug.log. شوف إيميل «Recovery Mode» اللي ووردبريس بيبعته للأدمن. أو غيّر اسم مجلد plugins لـ plugins-off وجرّب.
Parse error / syntax error, unexpected ...غلطة كتابة في ملف عدّلته (فاصلة منقوطة، قوس).الرسالة فيها اسم الملف ورقم السطر. صلّحه أو رجّع النسخة القديمة عن طريق SFTP.
404 على كل الصفحات ماعدا الرئيسية.htaccess ناقص أو تالف، أو mod_rewrite مش مفعّل، أو على Nginx من غير try_files.احفظ الروابط الدائمة، أو اكتب الملف يدويًا. على Nginx: try_files $uri $uri/ /index.php?$args;
500 Internal Server Errorقاعدة غلط في .htaccess، أو صلاحيات ملفات غلط، أو حد الذاكرة.غيّر اسم .htaccess مؤقتًا وجرّب، راجع صلاحيات الملفات، واقرأ error log السيرفر.
Briefly unavailable for scheduled maintenanceتحديث اتقطع وساب ملف .maintenance في الجذر.امسح ملف .maintenance (ملف مخفي)، وبعدين أعد التحديث.
Allowed memory size exhaustedإضافة أو عملية محتاجة ذاكرة أكتر.define('WP_MEMORY_LIMIT','256M'); في wp-config، والحد الحقيقي بيتحكم فيه memory_limit في إعدادات PHP.
Cannot modify header information – headers already sentمسافة أو سطر فاضي أو BOM قبل <?php أو بعد ?>.الرسالة بتقولك الملف والسطر. امسح المسافة واحفظ UTF-8 بدون BOM.
الموقع بيحوّل لدومين قديم أو Too many redirectsقيم home و siteurl غلط، أو تعارض HTTPS مع البروكسي/Cloudflare.صحح القيم في wp_options أو عرّف WP_HOME و WP_SITEURL مؤقتًا في wp-config.
الصور مش ظاهرة بعد النقلمسارات قديمة في المحتوى أو ملفات uploads ناقصة أو صلاحيات.wp search-replace للدومين، وتأكد إن uploads اتنقل كامل.
مقالات مجدولة «فاتها الموعد»الموقع قليل الزيارات أو DISABLE_WP_CRON مفعّل من غير Cron حقيقي.اعمل Cron Job على السيرفر يشغّل wp-cron.php كل ٥ دقايق.

١١. خطوات استرجاع ملفات الكور

ملفات الكور مش محتاجة نسخة احتياطية عشان ترجعها، لأنها نفس الملفات عند كل الناس. المهم تنزل نفس الإصدار اللي عندك.

  1. اعرف الإصدار من wp-includes/version.php (المتغير $wp_version) أو من قيمة db_version.
  2. نزّل نفس الإصدار من wordpress.org/download/releases.
  3. فك الضغط، وامسح من النسخة الجديدة مجلد wp-content وملف wp-config-sample.php لو حابب، عشان متكتبش فوق شغلك.
  4. ارفع واستبدل: wp-admin و wp-includes بالكامل، وملفات الجذر.
  5. متلمسش wp-config.php ولا wp-content. وراجع .htaccess إنه موجود.

أو بـ WP-CLI، أسرع وأضمن:

# يقارن ملفات الكور بالنسخة الرسمية ويقولك إيه ناقص أو متعدّل
wp core verify-checksums

# يعيد تنزيل الكور بنفس الإصدار من غير ما يلمس wp-content
wp core download --version=$(wp core version) --skip-content --force

# نفس الفحص للإضافات
wp plugin verify-checksums --all
ليه verify-checksums مهم؟لأنه مش بس بيكشف الملفات الناقصة، ده كمان بيكشف الملفات اللي حد عدّلها أو ملفات غريبة اتضافت، ودي من أوضح علامات الاختراق.

١٢. الأمان

تأمين wp-config.php

قواعد .htaccess مفيدة

# منع الوصول لـ wp-config.php و .htaccess نفسه
<Files wp-config.php>
  Require all denied
</Files>
<Files .htaccess>
  Require all denied
</Files>

# قفل xmlrpc.php لو مش محتاجه (Jetpack وتطبيقات قديمة بتحتاجه)
<Files xmlrpc.php>
  Require all denied
</Files>

# منع عرض محتوى المجلدات
Options -Indexes

وفي ملف .htaccess منفصل جوه wp-content/uploads/ عشان تمنع تشغيل أي PHP حد يرفعه متخفي كصورة:

<FilesMatch "\.(php|phtml|php\d)$">
  Require all denied
</FilesMatch>

ملحوظة: Require all denied صيغة Apache 2.4. السيرفرات القديمة بتستخدم Order allow,deny و Deny from all. وعلى Nginx نفس القواعد بتتكتب في إعدادات السيرفر بـ location ... { deny all; }.

صلاحيات الملفات

العنصرالصلاحية
المجلدات755
الملفات644
wp-config.php400 / 440 / 600
أي حاجةأبدًا 777

عادات أمان أساسية

١٣. ملخص سريع

احفظ الجمل دي الملفات = الكود، والداتابيز = المحتوى والإعدادات.
أهم ملف: wp-config.php، ومش متخزن في الداتابيز، فلازم يبقى في النسخة الاحتياطية.
الكور (wp-admin، wp-includes، ملفات الجذر) بيتسترجع من نسخة نظيفة بنفس الإصدار، وممنوع التعديل عليه.
wp-content + الداتابيز + wp-config.php + .htaccess = موقعك الحقيقي.
الترتيب: .htaccessindex.phpwp-blog-header.phpwp-load.phpwp-config.phpwp-settings.php ← الإضافات ← القالب ← initWP_Query ← ملف القالب.
القالب والإضافات المفعّلة متسجلين في wp_options باسم المجلد، فلو اتمسحوا ورجعتهم بنفس الاسم، إعداداتهم بترجع.
التعديل: نسخة احتياطية، SFTP، قالب فرعي، ديباج على ملف log، ومتعدلش الكور.