إذا كنت قد نقرت بالفعل على المقالات في لوحة تحكم ووردبريس، إذا تجمد كل شيء مع ظهور خطأ غريب مثل "الإصدار 3.1.1 يفشل في فتح صفحة 'articles' في لوحة تحكم ووردبريس..."، فمن المحتمل وجود تعارض بين إضافة (الإصدار 3.1.1)، ومقتطف برمجي، وصفحة قائمة المنشورات (edit.php).


المشكلة

تختلف الرسالة الدقيقة باختلاف الإضافة والخادم واللغة، ولكن غالبًا ما يبدأ التتبع على هذا النحو (في شاشة بيضاء(صفحة من 500 صفحة، أو سجل PHP):

v3.1.1 fails to open wp-admin "articles" with a fatal error:
Uncaught TypeError: ... in /wp-content/plugins/mon-plugin/...
or
PHP Fatal error:  Uncaught Error: Call to undefined function ...
or
There has been a critical error on this website.

أين يظهر:

  • للمسؤولين فقط : عن طريق الفتح مقالات> جميع المقالات (عنوان URL نموذجي:) /wp-admin/edit.php)، وأحيانًا أيضًا إضافة (URL: /wp-admin/post-new.php).
  • أحيانًا في AJAX : L 'شاشة عند التحميل، يؤدي إجراء ما (تصفية، بحث، تحرير سريع) إلى حدوث خطأ.
  • نادرًا ما يكون في REST API : إذا قام أحد المكونات الإضافية بتعديل طلب POST عبر REST، فقد يتأثر Gutenberg أيضًا.

الظروف النموذجية التي رأيتها أثناء استكشاف الأخطاء وإصلاحها:

  • مباشرة بعد تحديث الملحق v3.1.1 (الرقم "3.1.1" هو في الغالب رقم إضافة، وليس رقم برنامج) WordPress).
  • بعد إضافة مقتطف "لإعادة تسمية المنشورات إلى مقالات" الموجود في برنامج تعليمي قديم.
  • بعد تفعيل إضافة لتحسين محركات البحث/إعادة التوجيه/الأمان تؤثر على الإمكانيات أو قائمة الإدارة.
  • في المواقع التي تستخدم Divi 5 أو Elementor أو Avada: لا تتعطل هذه الأدوات بشكل مباشر edit.phpلكنها غالباً ما تتعايش مع "القصاصات" والمكونات الإضافية التي تُعطلها.

لمن هذا الدليل؟ إذا كنت مبتدئًا، فستتمكن من تحديد أي طوبة تكسر الشاشة؟ مقالاتاستعادة الوصول إلى لوحة التحكم، وتطبيق إصلاح شامل لـ WordPress 6.9.4 (أبريل 2026) و PHP أكثر من 8.1.

ملخص سريع

  • القائمة المقالات تشير إلى /wp-admin/edit.phpإذا تعطلت هذه الصفحة، فغالباً ما يكون ذلك بسبب... مسؤول الخطاف (إجراء/فلتر) لمكون إضافي أو جزء من التعليمات البرمجية.
  • ابدأ بتفعيل WP_DEBUG_LOG و / أو الصحة تحقق لعزل المكون الإضافي المعيب دون تعطيل الموقع العام.
  • حالة شائعة: رمز CPT "articles" مُعلن عنه بشكل غير صحيح (register_post_type()) مع قدرات غير متسقة أو ضربة قوية مما يؤدي إلى حدوث صراع.
  • بعد التصحيح: أعد حفظ الروابط الدائمة وقم بمسح ذاكرة التخزين المؤقت (المكون الإضافي/الخادم/المتصفح).
  • إذا لم يعد بإمكانك الوصول إلى wp-admin: قم بتعطيل المكون الإضافي عبر FTP (أعد تسمية المجلد) أو WP-CLI.

الأعراض

إليكم ما يمكنكم ملاحظته، من الأكثر شيوعاً إلى الأكثر تضليلاً:

  • الشاشة بلان إن كليكونت سور المقالاتوأحيانًا مع عبارة "خطأ حرج".
  • خطأ 500 حصرياً على /wp-admin/edit.php (صفحات الإدارة الأخرى تعمل).
  • "عذراً، أنت غير مصرح لك بالوصول إلى هذه الصفحة." بينما أنت مسؤول النظام.
  • قائمة فارغة من المقالات (لا توجد نتائج)، ولكن المقالات موجودة.
  • فلتر/بحث معطل (يتم تحميل الصفحة، ثم تتعطل أثناء الفرز حسب المؤلف/الفئة).
  • تعديل سريع (التحرير السريع) الذي لم يعد يفتح، أو يعمل إلى أجل غير مسمى (غالباً ما تكون مشكلة AJAX).
  • وحدة تحكم المتصفح (F12): أخطاء جافا سكريبت edit.php (غالباً ما يرتبط بنص برمجي يتم حقنه بواسطة إضافة).

علامات تعارض الإضافات/القوالب:

  • تختفي المشكلة إذا قمت بتعطيل إضافة "تم تحديثها مؤخرًا".
  • لا تظهر المشكلة إلا في أدوار معينة (المحرر، المؤلف): الشك حول قدرات.
  • تظهر المشكلة بعد لصق "مقتطف" في functions.php (قالب فرعي) أو إضافة مقتطفات.

التشخيص السريع: إذا /wp-admin/edit.php?post_type=page (الصفحات) تعمل ولكن /wp-admin/edit.php (المنشورات) الفواصل، غالبًا ما نتعامل مع التعليمات البرمجية التي تستهدف على وجه التحديد post أو قائمة "المقالات".

لماذا وصلت؟

نسخة المبتدئين: الشاشة المقالات هذه صفحة إدارة قياسية. تُحسّن العديد من الإضافات هذه الصفحة (الأعمدة، الفلاتر، الفرز، قيود الأدوار، الإحصائيات). إذا تسببت إضافة (أو جزء من الكود) في خطأ PHP/JS، فستتعطل هذه الصفحة.

إليكم ما يحدث في الخفاء: يتم تحميل ووردبريس wp-admin/edit.php، يقوم بإنشاء استعلام قائمة (WP_Queryثم ينفذ سلسلة من السنانيرالخطاف هو نقطة تمديد. عمل ينفذ التعليمات البرمجية في وقت محدد، مرشحات يُعدِّل قيمةً (مثل الاستعلام، أو الأعمدة، أو HTML). إذا أعاد عامل التصفية نوعًا غير صحيح (مثلًا، null (بدلاً من المصفوفة)، فإن PHP 8.1 والإصدارات الأحدث أقل تساهلاً ويمكن أن تؤدي إلى حدوث خطأ خطأ مطبعي.

الأسباب المحتملة (من الأكثر شيوعاً إلى الأقل شيوعاً):

  • الملحق الإصدار 3.1.1 به أخطاء مما يؤدي إلى إضافة أعمدة/فلاتر إلى قائمة المنشورات ويتسبب في حدوث خطأ فادح.
  • مقتطف قديم (قبل PHP 8 / قبل WordPress الحديث) الذي يستخدم خطافًا غير مناسب، أو دالة غير محملة.
  • CPT "مقالات" مسجل باستخدام slug/capabilities يتعارض مع "post" (المقالات الأصلية) ويكسر الأذونات.
  • تعارض إعادة كتابة REST بعد الترحيل: لم يتم إعادة إنشاء الروابط الدائمة، وأصبحت قواعد إعادة الكتابة قديمة.
  • مخبأ عدواني (ذاكرة التخزين المؤقت للمسؤول نادرة للغاية ولكنها ممكنة عبر وكيل عكسي تم تكوينه بشكل خاطئ) أو تصغير جافا سكريبت الذي يعطل واجهة المسؤول.
  • مشاكل في الخادم : ذاكرة PHP منخفضة جدًا، أو OPcache تالف، أو أذونات الملفات، أو PHP < 8.1.

ملاحظة: الإصدار "v3.1.1" غير موجود في ووردبريس 6.9.4. إذا رأيت "v3.1.1"، فغالبًا ما يكون هذا الإصدار خاصًا بإضافة (أو قالب). تتضمن عملية التشخيص تحديد أي منهما.

المتطلبات الأساسية قبل البدء

  • حماية : قاعدة البيانات + الملفات. لا تختبر "بشكل عشوائي" على بيئة الإنتاج.
  • بيئة الاختبار إن أمكن (في بيئة الاختبار). كثيراً ما رأيتُ فاصلة منقوطة مفقودة تُعطّل واجهة الإدارة بأكملها.
  • إصدارات ووردبريس 6.9.4 و PHP 8.1+ (ويُفضّل 8.2/8.3 إذا كان مزوّد خدمة الاستضافة يسمح بذلك). سجّل الدخول الأدوات > صحة الموقع.
  • أدوات :

تفعيل سجلات ووردبريس (في wp-config.php(أعلى عبارة "إيقاف التحرير"):

define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false ); // Affichez false en prod pour éviter de divulguer des infos

المرجع الرسمي: تصحيح في وورد.

مخاطر أمنية لا تعرض أخطاء PHP على الشاشة في بيئة الإنتاج. يمكن أن يكشف تتبع الأخطاء عن المسارات والإصدارات، وأحيانًا عن معلومات سرية.

الحل الأول: إصلاح نوع المنشور المخصص "articles" (slug/capabilities) الذي يُعطل شاشة الإدارة

يحدث هذا عندما يرغب شخص ما في "إنشاء نوع محتوى مقالات" في حين أن ووردبريس يطلق بالفعل على المنشورات الأصلية اسم "مقالات" (postالنتيجة: تسميات مُربكة، وقوائم مُكررة، وأحيانًا شاشة "أنت غير مُصرّح لك..." أو تعطل الصفحة إذا كان أحد المكونات الإضافية يتوقع ذلك post لكنه يتلقى آخر post_type.

المفاهيم :

  • CPT = نوع منشور مخصص (نوع محتوى مخصص)، تم تعريفه عبر register_post_type().
  • ضربة قوية = مُعرِّف عنوان URL (على سبيل المثال، article), تُستخدم في الروابط الدائمة وأحيانًا في لوحة التحكم.
  • القدرات = الأذونات (على سبيل المثال، edit_posts, edit_pagesإذا تم تعيينها بشكل غير صحيح، فإن المسؤول يمنع الوصول.

متى يُشتبه في هذا السبب؟

  • لديك قائمة "المقالات" التي لا تفتح قائمة المنشورات المعتادة.
  • سترى عنوان URL من النوع /wp-admin/edit.php?post_type=articles.
  • بدأت المشكلة بعد إضافة جزء من التعليمات البرمجية "register_post_type('articles', …)".

أين يتم التصحيح؟

المكان المناسب: إضافة مخصصة صغيرة (موصى بها)، أو مو البرنامج المساعد (يلزم وجود إضافة) إذا كنت تريد التأكد من تحميلها حتى في حالة تغيير المظهر.

  • لا تقم بلصق هذا في إضافة مقتطفات. إذا كنت في وضع استكشاف الأخطاء وإصلاحها: إذا تعطلت إضافة المقتطفات، فستفقد الوصول.
  • إذا كنت بحاجة إلى القيام بذلك بسرعة: موضوع الأطفال functions.phpلكنها أكثر هشاشة.

الكود السابق (معطل)

مثال واقعي أواجهه كثيراً (الروابط المختصرة "articles"، والقدرات غير المتناسقة، وتضارب التصنيفات):

<?php
// functions.php (thème enfant) - EXEMPLE CASSÉ
add_action( 'init', function() {
	register_post_type( 'articles', [
		'label' => 'Articles',
		'public' => true,
		'show_in_menu' => true,
		'show_in_rest' => true,
		'rewrite' => [ 'slug' => 'articles' ],
		// Problème : capabilities bricolées, et parfois l’auteur n’a plus accès à edit.php
		'capability_type' => 'page',
		'map_meta_cap' => false,
	] );
} );

سبب العطل: مع capability_type => 'page' et map_meta_cap => falseتقوم بإنشاء نوع بيانات يعمل كصفحات فيما يتعلق بالأذونات، ولكن بدون ربط صحيح. اعتمادًا على الأدوار ومكونات الأمان الإضافية، قد يتم رفض الوصول إلى القائمة أو قد يتسبب ذلك في حدوث أخطاء عند حساب ووردبريس للحدود القصوى.

الكود بعد (مصحح)

الهدف: تجنب التعارض مع "المقالات" (المنشورات الأصلية) وضمان اتساق الأذونات. أوصي بما يلي:

  • اسم مستعار ومعرف واضحان (على سبيل المثال، mag_article ou ressource).
  • تسميات صريحة (على سبيل المثال، "الموارد").
  • تم تحديد القدرات بشكل صحيح عبر map_meta_cap => true.
<?php
/**
 * Plugin: Mon CPT Ressources (corrigé)
 * Emplacement : /wp-content/mu-plugins/cpt-ressources.php
 * (Créez le dossier mu-plugins s'il n'existe pas)
 */

add_action( 'init', function() {

	$labels = [
		'name'                  => 'Ressources',
		'singular_name'         => 'Ressource',
		'add_new'               => 'Ajouter',
		'add_new_item'          => 'Ajouter une ressource',
		'edit_item'             => 'Modifier la ressource',
		'new_item'              => 'Nouvelle ressource',
		'view_item'             => 'Voir la ressource',
		'search_items'          => 'Rechercher des ressources',
		'not_found'             => 'Aucune ressource trouvée',
		'not_found_in_trash'    => 'Aucune ressource dans la corbeille',
		'all_items'             => 'Toutes les ressources',
		'menu_name'             => 'Ressources',
	];

	register_post_type( 'ressource', [
		'labels'            => $labels,
		'public'            => true,
		'show_in_menu'      => true,
		'show_in_rest'      => true, // Compatible Gutenberg + REST
		'menu_position'     => 21,
		'menu_icon'         => 'dashicons-media-document',
		'supports'          => [ 'title', 'editor', 'thumbnail', 'excerpt', 'author' ],
		'has_archive'       => true,
		'rewrite'           => [ 'slug' => 'ressources', 'with_front' => false ],
		'capability_type'   => 'post',
		'map_meta_cap'      => true, // Important : mapping correct des permissions
	] );

}, 10 );

لماذا يتم تصحيحه؟

  • يمكنك تجنب الاصطدام الذهني والتقني مع "المقالات" (المنشورات الأصلية).
  • يعرف ووردبريس كيفية حساب الأذونات "مثل المنشور" (قياسي)، مما يقلل بشكل كبير من التعارضات مع إضافات الأدوار/الأمان.
  • يتوافق CPT مع REST/Gutenberg (show_in_rest)، مما يتجنب السلوك الغريب في المحرر.

خطوة أساسية بعد هذا التصحيح

اذهب الإعدادات> الروابط الثابتة وانقر سجّل (دون تغيير أي شيء). هذا يجبر ووردبريس على إعادة إنشاء قواعد إعادة الكتابة.

وثيقة رسمية: register_post_type().

هذا السيناريو شائع بعد:

  • نقل الموقع الإلكتروني (تغيير عنوان URL)،
  • تفعيل/إلغاء تفعيل إضافة تقوم بإنشاء أنواع المنشورات المخصصة/التصنيفات،
  • قم بتحديث الإصدار "v3.1.1" من إضافة تقوم بتعديل عناوين URL الخاصة بها،
  • استعادة نسخة احتياطية جزئية.

لا يؤدي هذا دائمًا إلى خطأ فادح في PHP. في بعض الأحيان، تفتح شاشة "المقالات"، ولكن بعض المرشحات أو الإجراءات تُرسل طلبات تفشل (REST/AJAX)، فتظهر الواجهة "معطلة".

تشخيص سريع (لا يتطلب رمزًا)

  • اختبار /wp-admin/edit.php ثم /wp-admin/edit.php?post_status=trash.
  • افتح وحدة تحكم المتصفح (F12) وانظر إلى علامة تبويب الشبكة: المكالمات إلى /wp-json/ في 404/401/500؟
  • اذهب الأدوات > صحة الموقع وتحقق من التوصيات (واجهة برمجة تطبيقات REST، الحلقات، إلخ).

التصحيح 1: مسح كامل للروابط الدائمة (واجهة المستخدم)

الخيار الأكثر أماناً: الإعدادات> الروابط الثابتة > سجّل.

التصحيح الثاني: قم بالتنظيف عبر WP-CLI (إذا كانت واجهة الإدارة غير مستقرة)

إذا كنت تستخدم WP-CLI (غالباً على الخوادم الافتراضية الخاصة/الاستضافة المُدارة)، فقم بتشغيل الأمر التالي:

wp rewrite flush --hard

مرجع WP-CLI: wp rewrite flush.

الكود السابق (معطل): تم تنفيذ عملية التفريغ في المكان الخطأ

لقد رأيت هذا الجزء البرمجي يتسبب في تباطؤ الأداء، وانقطاع الاتصال، وحتى سلوك غير منتظم في وضع المسؤول:

<?php
// EXEMPLE CASSÉ : flush à chaque chargement
add_action( 'init', function() {
	flush_rewrite_rules(); // Très mauvais : lourd, et peut provoquer des effets de bord
} );

بعد الكود (مصحح): يتم التنظيف فقط عند التفعيل

ضع هذا الرمز في المكونات الإضافية المخصصة (السابق : /wp-content/plugins/mon-fix/mon-fix.phpثم قم بتفعيله. بعد ذلك يمكنك الاحتفاظ به (دون الحاجة إلى مسحه نهائياً) أو حذفه.

<?php
/**
 * Plugin Name: Fix Permaliens (flush à l'activation)
 * Description: Force une régénération des règles de réécriture à l'activation uniquement.
 */

register_activation_hook( __FILE__, function() {
	// On régénère proprement les règles une seule fois
	flush_rewrite_rules();
} );

register_deactivation_hook( __FILE__, function() {
	// Optionnel : on flush à la désactivation si le plugin ajoutait des règles
	flush_rewrite_rules();
} );

لماذا يتم تصحيحه؟

  • أنت تتخلص من نمط سلبي: flush_rewrite_rules() لا ينبغي تقليب كل صفحة.
  • تقوم بإعادة ضبط القواعد بعد تغيير CPT/slug، مما يؤدي إلى استقرار بعض شاشات الإدارة ونقاط نهاية REST/AJAX ذات الصلة.

وثيقة رسمية: flush_rewrite_rules().

الحل الثالث: تتبع خطأ PHP فادح في شاشة "المقالات" (خطافات الإدارة، الأعمدة، الفلاتر)

هذا هو السبب الأكثر شيوعًا وراء خطأ "الإصدار 3.1.1 يفشل في فتح مقالات لوحة تحكم ووردبريس...". يقوم أحد الإضافات (الإصدار 3.1.1) أو جزء من التعليمات البرمجية بإضافة عمود، أو تعديل الاستعلام، أو تصفية الصفوف، مما يؤدي إلى ظهور خطأ في لغة PHP (مثل TypeError، أو دالة غير معرّفة، إلخ).

الخطوة 1: استرجاع الخطأ المحدد

فتح wp-content/debug.log بعد إعادة إنتاج الخلل (انقر على المقالاتابحث عن سطر يحتوي على مسار "خطأ فادح في PHP" مثل هذا:

PHP Fatal error:  Uncaught TypeError: array_merge(): Argument #2 must be of type array, null given
in /wp-content/plugins/mon-plugin/includes/admin-columns.php:123
Stack trace:
#0 ...

إذا لم يكن لديك سجل الأخطاء، فقم بتثبيت برنامج Query Monitor واطلع على تبويب "أخطاء PHP" (إذا كانت الصفحة تُحمّل جزئيًا فقط). وثائق Query Monitor: WordPress.org.

الخطوة الثانية: العزل دون الإخلال بالموقع العام (الفحص الصحي)

مع فحص الصحة واستكشاف الأخطاء وإصلاحها :

  1. قم بتفعيل وضع استكشاف الأخطاء وإصلاحها (لجلسة العمل الخاصة بك فقط).
  2. اختبار المقالاتإذا نجح الأمر: فالمشكلة تكمن في إضافة/قالب تم تعطيله في وضع استكشاف الأخطاء وإصلاحها.
  3. أعد تنشيط الإضافات واحدة تلو الأخرى حتى تتمكن من إعادة إنتاج العطل.

حسب تجربتي، هذه هي أسرع طريقة لتحديد "المكون الإضافي v3.1.1" دون جعل الموقع غير متاح.

حالة نموذجية: عامل تصفية الأعمدة الذي يُرجع النوع الخاطئ

في edit.phpتستخدم العديد من البرامج المرشح manage_posts_columns (أو manage_edit-post_columnsلإضافة أعمدة. خطأ شائع في PHP 8 والإصدارات الأحدث: إرجاع null بدلاً من لوحة فنية.

الكود السابق (معطل)

مثال واقعي: تريد إضافة/مقتطف برمجي حذف عمود، لكنها تنسى إرجاع المصفوفة:

<?php
// EXEMPLE CASSÉ : filtre qui ne retourne rien (donc null)
add_filter( 'manage_posts_columns', function( $columns ) {

	unset( $columns['comments'] );

	// Oubli : return $columns;
}, 10, 1 );

النتيجة المحتملة: لاحقًا، يقوم ووردبريس (أو إضافة أخرى) بتنفيذ array_merge() في $columns ويحصل null → خطأ في النوع → شاشة العناصر غير المرتبة.

الكود بعد (مصحح)

ألصق هذا الإصلاح في إضافة مخصصة (أو functions.php (في موضوع الأطفال) بعد الادخارإذا كنت تشك في وجود مشكلة في أحد المكونات الإضافية، فقم بتصحيحها في التعليمات البرمجية الخاصة بك وقم بتعطيل المكون الإضافي المسبب للمشكلة.

<?php
/**
 * Correctif : toujours retourner un tableau de colonnes.
 * Emplacement : functions.php (thème enfant) OU plugin custom.
 */
add_filter( 'manage_posts_columns', function( $columns ) {

	if ( ! is_array( $columns ) ) {
		// Sécurité : évite les TypeError si un autre code a renvoyé n'importe quoi
		$columns = [];
	}

	unset( $columns['comments'] );

	return $columns;

}, 10, 1 );

لماذا يتم تصحيحه؟

  • مرشح يجب يُعيد قيمة. وإلا، يسترجع ووردبريس null.
  • الحماية is_array() يحميك هذا حتى لو أعاد مكون إضافي آخر نوعًا غير صحيح.

الوثائق الرسمية حول الخطافات (الإجراءات/الفلاتر): واجهة برمجة التطبيقات للملحقات: الخطافات.

الحالة النموذجية: خطاف "قبل الطلب" الذي يكسر القائمة (pre_get_posts)

خطأ شائع آخر: عندما تريد تصفية المنشورات في لوحة التحكم، تقوم بتعديل جميع الاستعلامات، بما في ذلك تلك الموجودة في قائمة الإدارة. تصبح صفحة "المقالات" فارغة، أو بطيئة، أو تتعطل إذا أصبح الاستعلام غير صالح.

الكود السابق (معطل)

<?php
// EXEMPLE CASSÉ : modifie toutes les requêtes, y compris l'admin
add_action( 'pre_get_posts', function( $query ) {

	// Mauvais : pas de garde-fous, touche REST, admin, widgets, etc.
	$query->set( 'posts_per_page', 500 );
	$query->set( 'post_status', 'publish' );

} );

الكود بعد (مصحح)

الهدف: تعديل طلب الواجهة الأمامية الرئيسي فقط، وليس لوحة التحكم الإدارية. ضعه في إضافة مخصصة أو قالب فرعي.

<?php
/**
 * Correctif : limiter l'impact de pre_get_posts.
 * Emplacement : functions.php (thème enfant) OU plugin custom.
 */
add_action( 'pre_get_posts', function( $query ) {

	// Toujours vérifier qu'on ne casse pas l'admin
	if ( is_admin() ) {
		return;
	}

	// Ne modifier que la requête principale
	if ( ! $query->is_main_query() ) {
		return;
	}

	$query->set( 'posts_per_page', 12 );

}, 10, 1 );

وثيقة رسمية: pre_get_posts.

مثال نموذجي: تم حقن سكربت جافا سكريبت في لوحة التحكم الإدارية مما أدى إلى تعطيل ملف edit.php

إذا عرضت وحدة التحكم أخطاء JS، فابحث عن إضافة تقوم بوضع برنامج نصي في جميع أنحاء لوحة التحكم، وأحيانًا يكون البرنامج مصغرًا، وأحيانًا يعتمد على مكتبة مفقودة.

الكود السابق (معطل)

<?php
// EXEMPLE CASSÉ : charge un script admin partout, sans dépendances ni ciblage
add_action( 'admin_enqueue_scripts', function() {
	wp_enqueue_script(
		'mon-admin',
		plugin_dir_url( __FILE__ ) . 'admin.js',
		[],
		'3.1.1',
		true
	);
} );

الكود بعد (مصحح)

نحن نستهدف فقط شاشة "المقالات" (المنشورات) ونعلن عن التبعيات المعقولة.

<?php
/**
 * Correctif : charger le JS uniquement sur l'écran des articles.
 * Emplacement : plugin custom (recommandé).
 */
add_action( 'admin_enqueue_scripts', function( $hook_suffix ) {

	// L'écran liste des posts natifs est généralement edit.php
	if ( 'edit.php' !== $hook_suffix ) {
		return;
	}

	// Optionnel : s'assurer qu'on est bien sur post (et pas un CPT)
	$post_type = isset( $_GET['post_type'] ) ? sanitize_key( $_GET['post_type'] ) : 'post';
	if ( 'post' !== $post_type ) {
		return;
	}

	wp_enqueue_script(
		'mon-admin',
		plugin_dir_url( __FILE__ ) . 'admin.js',
		[ 'jquery' ], // Exemple : dépendance explicite si votre script utilise jQuery
		'3.1.2', // Bump de version pour casser le cache navigateur
		true
	);

}, 10, 1 );

وثيقة رسمية: admin_enqueue_scripts et wp_enqueue_script ().

عمليات التحقق بعد التصحيح

  • إعادة شحن /wp-admin/edit.php في وضع التصفح الخاص (لتجنب التخزين المؤقت المفرط).
  • جربها:
    • البحث عن مقال
    • تصفية حسب الفئة
    • تعديل سريع
    • سلة
  • الاختيار wp-content/debug.log لن تظهر رسالة "خطأ فادح" عند النقر.
  • إذا كان لديك مكون إضافي للتخزين المؤقت: قم بمسح ذاكرة التخزين المؤقت للمكون الإضافي + ذاكرة التخزين المؤقت للخادم (إن وجدت) + ذاكرة التخزين المؤقت للمتصفح.

إذا كان الخلل ناتجًا عن تعارض في الصلاحيات/الصلاحيات: اختبر باستخدام حساب "محرر" (وليس حساب مدير فقط). يبدو أن العديد من المواقع قد تم إصلاحها لمستخدمي المديرين، لكنها لا تزال معطلة بالنسبة للمستخدمين ذوي الصلاحيات الأقل.

إذا لم ينجح ذلك أيضاً

إجراءات استكشاف الأخطاء وإصلاحها التي أطبقها عندما تظل شاشة "المقالات" غير قابلة للوصول.

1) قم بتعطيل الإضافة المعيبة بدون استخدام لوحة تحكم ووردبريس (عبر بروتوكول نقل الملفات FTP).

  1. الاتصال عبر بروتوكول نقل الملفات (FTP) أو بروتوكول نقل الملفات الآمن (SFTP).
  2. اذهب /wp-content/plugins/.
  3. أعد تسمية مجلد الملحق المشبوه (على سبيل المثال، mon-pluginmon-plugin.off).
  4. قم بتحديث لوحة تحكم ووردبريس (wp-admin).

إذا كنت لا تعرف أي واحد: أعد تسميته مؤقتًا plugins en plugins.off (يعطل جميع الإضافات)، ثم أعد تمكينها وتنشيطها واحدة تلو الأخرى.

2) تحقق من ذاكرة PHP

قد يؤدي وجود قائمة كبيرة من المقالات (أعمدة كثيرة، استعلامات، إحصائيات) إلى زيادة استهلاك الذاكرة بشكل كبير. ابحث عن خطأ "حجم الذاكرة المسموح به...".

يمكنك زيادة حد ووردبريس (إذا كان مزود الاستضافة الخاص بك يسمح بذلك):

<?php
// wp-config.php
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' ); // Pour l'admin

إشارة: ملف wp-config.php (الثوابت).

3) تحقق من إصدار PHP

إذا كنت تستخدم PHP 7.4/8.0، فقد تتصرف بعض الإضافات الحديثة (أو WordPress 6.9.4) بشكل مختلف. لذا، يُنصح باستخدام PHP 8.1 كحد أدنى.

دكتور: إصدارات PHP المدعومة.

4) تحقق من وجود أخطاء REST/AJAX

  • فتح /wp-json/ يجب أن يكون الرد بتنسيق JSON (وليس بتنسيق HTML 404).
  • تحقق مما إذا كانت إحدى إضافات الأمان تحظر ذلك. /wp-json/ ou admin-ajax.php.

وثيقة REST: دليل واجهة برمجة تطبيقات REST الخاصة بـ WordPress.

5) مراقبة الاستعلام: تحديد الخطاف/الفلتر المكسور

إذا تم تحميل الصفحة جزئيًا فقط، يمكن لبرنامج مراقبة الاستعلامات أن يُظهر لك ما يلي:

  • أخطاء PHP
  • استفسارات كثيرة
  • خطأ في البرامج النصية/الأنماط
  • الخطافات المُفعّلة

6) الملاذ الأخير: تفعيل وضع الاسترداد

يحتوي ووردبريس على آلية "وضع الاسترداد" التي تُفعّل عند حدوث خطأ فادح في لوحة التحكم بسبب أحد الإضافات. إذا تلقيت بريدًا إلكترونيًا يُفيد بوجود "خطأ تقني في موقعك"، فاستخدم رابط الاسترداد لتعطيل الإضافة المُسببة للمشكلة.

دكتور: وضع الاسترداد (دعم).

الأخطاء الشائعة والمزالق

مخطط تشخيصي

عرض السبب المحتمل التحقق الحلول
خطأ فادح في قسم "المقالات" فقط يُضيف الملحق الإصدار 3.1.1 أعمدة/فلاتر ونباتات يُظهر ملف debug.log مسارًا في /plugins/... قم بتعطيل/استعادة الملحق، ثم أصلح الخطاف (الحل 3)
"عذراً، أنت غير مخوّل..." تم تعيين إمكانيات CPT أو مكون إضافي للدور بشكل غير صحيح اختبر باستخدام لوحة التحكم مقابل لوحة التحرير، وافحص نوع المنشور المخصص (CPT). تصحيح CPT/caps (الحل 1)، مراجعة إضافة الأدوار
قائمة فارغة (0 عنصر) ولكنها موجودة تقوم الدالة pre_get_posts بتعديل طلب المسؤول قم بتعطيل المقتطف، وتحقق من كود pre_get_posts أضف إجراءات وقائية لـ is_admin/is_main_query (الحل 3)
لا يفتح خيار التحرير السريع خطأ في حظر لوحة تحكم جافا سكريبت أو لوحة تحكم أجاكس وحدة التحكم F12 + علامة تبويب الشبكة استهدف قائمة الانتظار، وعطّل التصغير، واسمح باستخدام AJAX.
مشكلة بعد الترحيل إعادة صياغة القواعد القديمة الإعدادات > الروابط الدائمة، اختبار /wp-json/ مسح الروابط الدائمة (الحل الثاني)

أخطاء أراها طوال الوقت

  • نسخ الكود إلى المكان الخطأ يؤدي لصق جزء من كود PHP في حقل "CSS" في أداة الإنشاء، أو في محرر الصفحة، إلى عدم عمل أي شيء، أو عرض الكود كنص عادي.
  • نسيان الفاصلة المنقوطة في functions.php خطأ بسيط يحجب الوصول إلى لوحة تحكم ووردبريس بالكامل. اعمل على بيئة تجريبية وحافظ على إمكانية الوصول عبر بروتوكول نقل الملفات (FTP).
  • استخدام خطاف غير مناسب على سبيل المثال، قم بتعديل طلب المسؤول عبر pre_get_posts بلا is_admin().
  • الخلط بين المخزونات والمرشحات يجب أن تُرجع الدالة التصفية قيمةً ما، بينما لا يُرجع الإجراء قيمةً. هنا، قد يؤدي خطأ في القيمة المُرجعة إلى تعطيل "المقالات".
  • لم يتم مسح ذاكرة التخزين المؤقت لقد قمتَ بتصحيح المشكلة، لكن المتصفح لا يزال يعرض إصدار جافا سكريبت القديم. قم بتحديث إصدار البرنامج النصي وامسح ذاكرة التخزين المؤقت.
  • اختبار في بيئة الإنتاج بدون نسخة احتياطية : في لوحة التحكم الإدارية، قد يتم حظرك من الوصول.
  • تم تعطيل المقتطف بواسطة إضافة المقتطفات إذا تعطلت إضافة Snippets، فلن تتمكن من تعطيلها بسهولة. يُفضل استخدام إضافة mu-plugin لإصلاح المشكلة.
  • الكود من درس تعليمي قديم غير متوافق مع PHP 8.1+ (خطأ في النوع، معلمات مطلوبة، إلخ).

بديل / متغير

طريقة بدون كتابة كود: الرجوع إلى الإصدار "v3.1.1"

إذا كنت قد حددت أن "v3.1.1" هو إصدار أحد المكونات الإضافية وظهرت المشكلة مباشرة بعد ذلك:

  • تحقق من صفحة الإضافة على موقع WordPress.org لمعرفة ما إذا كان هناك قسم مخصص لها. عرض متقدم يسمح بتنزيل إصدار سابق.
  • أو استخدم إضافة للتراجع (مثل إضافة WP Rollback). بحذر ومن مصدر موثوق فقط.

بعد ذلك، افتح تذكرة دعم للملحق باستخدام ما يلي:

  • إصدار ووردبريس الخاص بك (6.9.4)، PHP،
  • سجل الأخطاء الكامل،
  • خطوات إعادة الإنتاج.

طريقة متقدمة: استخدام "حواجز" في إضافة mu-plugin لمنع حدوث أخطاء فادحة في ملف edit.php

عند الحاجة إلى استقرار لوحة تحكم إدارية بشكل عاجل، يمكنك تعطيل خطاف معروف (مثل فلتر عمود) باستبداله بشفرة برمجية وقائية. تنبيه: هذا حل مؤقت، ويجب عليك بعد ذلك إصلاح المشكلة الأساسية.

مثال: لقد حددتَ عامل تصفية يُعيد أحيانًا nullلا يمكنك تعديل الإضافة (أو لا ترغب في تعديل شفرتها البرمجية). يمكنك إضافة فلتر في المرحلة الأخيرة يقوم "بإصلاح":

<?php
/**
 * Emplacement : /wp-content/mu-plugins/admin-edit-php-safety.php
 * Objectif : sécuriser le tableau des colonnes si un plugin renvoie un type invalide.
 */

add_filter( 'manage_posts_columns', function( $columns ) {

	// Si un plugin a renvoyé null, on rétablit un tableau minimal
	if ( ! is_array( $columns ) ) {
		$columns = [
			'cb'    => '<input type="checkbox" />',
			'title' => 'Titre',
			'date'  => 'Date',
		];
	}

	return $columns;

}, 9999, 1 );

هذا لا "يصلح" الملحق، ولكنه قد يمنحك إمكانية الوصول إلى الشاشة مرة أخرى لمواصلة التشخيص.

تجنب هذه المشكلة في المستقبل

  • تجنب تسمية CPT بـ "مقالات" احتفظ بمصطلح "المقالات" للمنشورات الأصلية. سمِّ أنواع المنشورات المخصصة (CPTs) وفقًا لدورها التجاري (الموارد، المشاريع، الوصفات...).
  • لا يوجد شطف دائم : flush_rewrite_rules() فقط عند التنشيط/إلغاء التنشيط.
  • التعليمات البرمجية الدفاعية على المرشحات : التحقق من صحة الأنواع (is_array, is_string) عند تصفية القيم المستخدمة بواسطة إضافات أخرى.
  • التصنيف المنهجي قبل التحديثات الرئيسية للملحق، قد يحتوي الإصدار 3.1.1 على خلل في شاشة إدارة معينة.
  • مراقبة الأخطاء يحفظ WP_DEBUG_LOG يتم تفعيلها وإعدادها بسهولة لتدوير سجلات الخادم.
  • الإضافات والمنشئين لا تمنع إضافات Divi 5 وElementor وAvada هذه الإصلاحات. مع ذلك، تجنب استخدام إضافات تحسين الأداء الشاملة التي تُقلل من وظائف لوحة التحكم، فهذا مصدر شائع لأخطاء جافا سكريبت. edit.php.

إذا كنت مطورًا: وثّق خطافاتك. إن الفلتر الذي لا يُرجع أي شيء هو بمثابة قنبلة موقوتة، خاصة مع PHP 8.1 والإصدارات الأحدث.

الموارد

أسئلة fréquentes

كيف أعرف أي إضافة تتوافق مع الإصدار "v3.1.1"؟

بحث wp-content/debug.log يشير مسار الملف المعيب دائمًا تقريبًا إلى /wp-content/plugins/nom-du-plugin/أو يمكنك استخدام خاصية فحص الحالة الصحية عن طريق إعادة تنشيط الإضافات واحدة تلو الأخرى.

ليس لدي صلاحية الوصول إلى لوحة تحكم ووردبريس، ماذا أفعل؟

أعد تسمية مجلد المكون الإضافي المشبوه عبر FTP/SFTP (أو قم بتعطيل جميع المكونات الإضافية عن طريق إعادة تسميتها). /wp-content/pluginsثم أعد الاتصال وقم بإعادة التنشيط تدريجياً.

هل يمكن أن يكون Divi 5 / Elementor / Avada سببًا في هذه المشكلة؟

نادراً ما يثيرونها بشكل مباشر edit.phpمع ذلك، قد يؤدي تثبيت إضافة أو ملحق مقتطف أو أداة تحسين (تصغير) مع أداة الإنشاء إلى تعطيل واجهة الإدارة. ويبقى التشخيص كما هو: عزل السجلات والملحقات.

لماذا يظهر الخطأ فقط في قسم "المقالات" وليس في أي مكان آخر؟

لأن العديد من الإضافات تستخدم خطافات محددة متعلقة بقائمة المنشورات (الأعمدة، والفرز، والفلاتر، والقيود). يحدث خطأ في هذا الكود فقط عند wp-admin/edit.php.

هل يمكنني إصلاح هذا عن طريق تعديل الإضافة المعيبة؟

تجنّب هذا. أي تحديث سيستبدل تغييراتك. بدلاً من ذلك، جرّب ما يلي: (1) إصلاح في إضافة مخصصة/إضافة متعددة، (2) الإبلاغ عن الخطأ للمطور، (3) التبديل إلى إضافة أخرى إذا لم يتوفر الدعم.

قمت بتصحيح الكود ولكن لم يتغير شيء.

امسح ذاكرة التخزين المؤقت (للملحق، والخادم، والمتصفح). إذا كان ملف جافا سكريبت بصلاحيات المسؤول، فقم بزيادة رقم الإصدار في... wp_enqueue_script()تأكد أيضًا من أنك قمت بتعديل الملف الصحيح (الملف الفرعي مقابل الملف الرئيسي).

"عذراً، أنت غير مخول..." على الرغم من أنني مدير النظام.

يحدث هذا إذا قام أحد ملحقات الأدوار/الأمان بتعديل الصلاحيات، أو إذا كان نوع المنشور المخصص (CPT) يحتوي على صلاحيات غير متناسقة. قم بتعطيل ملحق الأدوار مؤقتًا، ثم صحح تعريف نوع المنشور المخصص (الحل 1).

قائمة المقالات فارغة، لكن واجهة المستخدم لا تزال تعرض المنشورات.

خطاف pre_get_posts أو يمكن لمكوّن إضافي للتقييد تعديل الطلب فقط في وضع المسؤول. ابحث عن جزء من التعليمات البرمجية التي تُجبر post_status, authorأو posts_per_page بدون ضمانات is_admin().

ما هي أفضل طريقة لوضع لاصقة تدوم طويلاً؟

Un مو البرنامج المساعد إذا كنت ترغب في أن يظل الإصلاح فعالاً حتى مع تغيير القالب، فاستخدم إضافة مخصصة قياسية. تجنب الاعتماد على القالب في منطق الإدارة.

متى يجب عليّ الاتصال بمزود خدمة الاستضافة؟

إذا رأيت 500 خطأ بدون أي أثر في debug.logأو قد تكون هناك مشاكل في الأذونات/ذاكرة التخزين المؤقت OPcache، أو إذا كان إصدار PHP قديمًا جدًا ولا يمكنك تغييره. أعطه الوقت المحدد للاختبار وعنوان URL. /wp-admin/edit.php للربط مع سجلات الخادم.