Agar siz allaqachon bosgan bo'lsangiz Maqolalar wp-admin da hamma narsa “v3.1.1 wp-admin 'maqolalarini' ocha olmayapti…” kabi g'alati xato bilan qotib qoladi, ehtimol sizda plagin (3.1.1 versiyasi), parcha va postlar ro'yxati sahifasi o'rtasida ziddiyat mavjud (edit.php).
muammo
Aniq xabar plagin, server va tilga qarab farq qiladi, lekin ko'pincha shunday boshlanadigan iz (bir oq ekran(500 sahifa yoki PHP jurnali):
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.
Qayerda paydo bo'ladi:
- Faqat administrator : ochish orqali Maqolalar> Barcha maqolalar (Odatdagi URL:
/wp-admin/edit.php), ba'zan ham qo'shish (URL:/wp-admin/post-new.php). - Ba'zan ichida AJAX : theécran yuklaydi, keyin esa amal (filtr, qidiruv, tez tahrirlash) xatoga olib keladi.
- Kamdan-kam hollarda REST API : agar plagin post so'rovini REST orqali o'zgartirsa, Gutenbergga ham ta'sir qilishi mumkin.
Muammolarni bartaraf etishda ko'rgan odatiy holatlarim:
- Plagin yangilangandan so'ng darhol v3.1.1 ("3.1.1" raqami deyarli har doim plaginning raqamidir, a emas WordPress).
- Eski qo'llanmada topilgan "Xabarlarni maqolalarga qayta nomlash" parchasini qo'shgandan so'ng.
- Imkoniyatlarga yoki administrator menyusiga ta'sir qiluvchi SEO/qayta yo'naltirish/xavfsizlik plaginini faollashtirgandan so'ng.
- Divi 5, Elementor yoki Avada dan foydalanadigan saytlarda: bu quruvchilar to'g'ridan-to'g'ri buzilmaydi
edit.php, lekin ular ko'pincha uni buzadigan "parchalar" va plaginlar bilan birga mavjud.
Ushbu qo'llanma kimlar uchun? Agar siz yangi boshlovchi bo'lsangiz, aniqlay olasiz Qaysi g'isht ekranni sindiradi? Maqolalaradministrator paneliga kirish huquqini qaytarib oling va WordPress-ga toza tuzatishni qo'llang 6.9.4 (2026-yil aprel) va PHP 8.1 +.
Tez xulosa
- Menyu Maqolalar tomonga ishora qiladi
/wp-admin/edit.phpAgar bu sahifa ishdan chiqsa, bu deyarli har doim... tufayli bo'ladi. ilmoq administratori plagin yoki parchaning (harakati/filtri). - Faollashtirishdan boshlang WP_DEBUG_LOG et / ou Sog'liqni saqlash nazorati ommaviy saytni buzmasdan nosoz plaginni ajratish uchun.
- Umumiy holat: noto'g'ri e'lon qilingan CPT kodi "maqolalar" (
register_post_type()) bilan nomuvofiq qobiliyatlar yoki shilliqqurt bu mojaroga kiradi. - Tuzatishdan keyin: doimiy havolalarni qayta saqlang va keshlarni (plagin/server/brauzer) tozalang.
- Agar endi wp-admin-ga kira olmasangiz: plaginni FTP (papka nomini o'zgartiring) yoki WP-CLI orqali o'chiring.
Alomatlar
Eng tez-tez uchraydiganidan tortib, eng chalg'ituvchisigacha bo'lgan narsalarni kuzatishingiz mumkin:
- ekran blanj tugmasini bosing Maqolalar, ba'zan "Kritik xato" bilan.
- 500 xato faqat
/wp-admin/edit.php(boshqa admin sahifalari ishlayapti). - "Kechirasiz, siz ushbu sahifaga kirish huquqiga ega emassiz." siz administrator bo'lganingizda.
- Bo'sh maqolalar ro'yxati (0 natija), lekin maqolalar mavjud.
- Buzilgan filtrlar/qidiruv (Sahifa yuklanadi, keyin muallif/kategoriya bo'yicha saralash paytida ishdan chiqadi).
- Tez tahrirlash (Tezkor tahrirlash) endi ochilmaydi yoki muddatsiz ishlaydi (ko'pincha AJAX muammosi).
- Brauzer konsoli (F12): JS xatolari yoniq
edit.php(ko'pincha plagin tomonidan kiritilgan skriptga bog'langan).
Plagin/mavzu ziddiyatining belgilari:
- Agar siz "yaqinda yangilangan" plaginni o'chirib qo'ysangiz, muammo yo'qoladi.
- Muammo faqat ma'lum rollar (muharrir, muallif) uchun paydo bo'ladi: shubha Qobiliyatlari.
- Muammo "parcha" joylashtirilgandan so'ng paydo bo'ladi
functions.php(bola mavzusi) yoki parchalar plagini.
Tez tashxis: agar /wp-admin/edit.php?post_type=page (Sahifalar) ishlaydi, lekin /wp-admin/edit.php (Xabarlar) tanaffuslar, biz ko'pincha aniq maqsadga yo'naltirilgan kod bilan ishlaymiz post yoki "Maqolalar" menyusi.
Nima uchun bu sodir bo'lmoqda?
Boshlang'ich versiya: ekran Maqolalar Bu standart administrator sahifasi. Ko'pgina plaginlar bu sahifani "yaxshilaydi" (ustunlar, filtrlar, saralash, rol cheklovlari, statistika). Agar plagin (yoki parcha) PHP/JS xatosiga yo'l qo'ysa, bu sahifa ishdan chiqadi.
Sahna ortida nimalar bo'layotgani: WordPress yuklanmoqda wp-admin/edit.php, ro'yxat so'rovini tuzadi (WP_Query), keyin bir qator amallarni bajaradi ilgaklarIlgak - bu kengaytma nuqtasi. harakat kodni ma'lum bir vaqtda bajaradi, a filtri qiymatni o'zgartiradi (masalan, so'rov, ustunlar, HTML). Agar filtr noto'g'ri turni qaytarsa (masalan, null (massiv o'rniga), PHP 8.1+ kamroq ruxsat beruvchi va a ni ishga tushirishi mumkin TypeError.
Ehtimoliy sabablar (eng tez-tez uchraydiganidan eng kam uchraydiganiga qadar):
- Plagin v3.1.1 versiyasida xatolik bor bu postlar ro'yxatiga ustunlar/filtrlar qo'shadi va halokatli xatoga olib keladi.
- Eski parcha (PHP 8 dan oldingi / zamonaviy WordPressgacha), unda yaroqsiz kanca yoki yuklanmagan funksiya ishlatiladi.
- CPT "maqolalari" "post" (mahalliy maqolalar) bilan ziddiyatga olib keladigan va ruxsatlarni buzadigan slug/imkoniyatlar bilan ro'yxatdan o'tgan.
- REST/qayta yozish mojarosi migratsiyadan keyin: doimiy havolalar qayta yaratilmagan, qayta yozish qoidalari eskirgan.
- Agressiv kesh (admin keshi juda kam uchraydi, lekin noto'g'ri sozlangan teskari proksi orqali mumkin) yoki admin interfeysini buzadigan JS minification.
- Server muammosi PHP xotirasi juda kam, OPcache buzilgan, fayl ruxsatnomalari yoki PHP < 8.1.
Eslatma “v3.1.1”: WordPress 6.9.4 da “v3.1.1” yo'q. Agar siz “v3.1.1” ni ko'rsangiz, bu deyarli har doim plaginning (yoki mavzuning) versiyasidir. Diagnostika jarayoni qaysi birini aniqlashni o'z ichiga oladi.
Boshlashdan oldin zarur shartlar
- saqlash : ma'lumotlar bazasi + fayllar. Ishlab chiqarishda "tasodifiy" sinovdan o'tkazmang.
- Sinov muhiti iloji bo'lsa (sahnalashtirish). Men ko'pincha oddiy nuqta-vergulning yo'qligi butun administrator interfeysini blokirovka qilishini ko'rganman.
- versiyalari WordPress 6.9.4 va PHP 8.1+ (agar xosting provayderingiz ruxsat bersa, ideal holda 8.2/8.3). Ro'yxatdan o'ting Asboblar > Sayt salomatligi.
- vositalari :
- So‘rov monitor (xatolar, so'rovlar, kancalarga qarang).
- Sog'liqni saqlash tekshiruvi va muammolarni bartaraf etish (tashrif buyuruvchilarga ta'sir qilmasdan muammolarni bartaraf etish rejimi).
- Server jurnallariga kirish (yoki hech bo'lmaganda)
wp-content/debug.log).
WordPress jurnallarini yoqish (ichida) wp-config.php(yuqoridagi “tahrirlashni to‘xtatish”):
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', false ); // Affichez false en prod pour éviter de divulguer des infos
Rasmiy ma'lumotnoma: WordPress-da disk raskadrovka.
Xavfsizlik xavfi PHP xatolarini ishlab chiqarishda ekranda hech qachon ko'rsatmang. Stek izi yo'llarni, versiyalarni va ba'zan sirlarni ochib berishi mumkin.
1-yechim: Administrator ekranini buzadigan CPT "maqolalari"ni (slug/imkoniyatlar) tuzating
Bu kimdir WordPress allaqachon mahalliy postlarni "Maqolalar" deb atagan paytda "Maqolalar kontent turini yaratmoqchi" bo'lganida sodir bo'ladi (post). Natija: chalkash yorliqlar, takroriy menyular va ba'zan "Sizga ruxsat berilmagan..." ekrani yoki plagin kutgan taqdirda sahifa ishdan chiqadi post lekin boshqasini oladi post_type.
Tushunchalar :
- CPT = Maxsus Post Turi (maxsus kontent turi), orqali e'lon qilingan
register_post_type(). - shilliqqurt = URL identifikatori (masalan,
article), doimiy havolalarda va ba'zan administratorda ishlatiladi. - qobiliyat = ruxsatnomalar (masalan,
edit_posts,edit_pagesAgar ular noto'g'ri xaritalangan bo'lsa, administrator kirishni rad etadi.
Bu sababga qachon shubha qilish kerak
- Sizda odatiy postlar ro'yxatini ochmaydigan "Maqolalar" menyusi mavjud.
- Siz ushbu turdagi URL manzilini ko'rasiz
/wp-admin/edit.php?post_type=articles. - Muammo “register_post_type('articles', …)” parchasini qo'shgandan keyin boshlandi.
Qayerda tuzatish kerak
To'g'ri joy: kichik maxsus plagin (tavsiya etiladi) yoki mu-plagin (plagin talab qilinadi) agar mavzu o'zgarsa ham yuklanishiga ishonch hosil qilmoqchi bo'lsangiz.
- Buni snippet plaginiga joylashtirmang. Agar siz muammolarni bartaraf etish rejimida bo'lsangiz: agar snippet plagini buzilsa, siz kirish huquqini yo'qotasiz.
- Agar buni tezda qilishingiz kerak bo'lsa: bolalar mavzusi
functions.php, lekin u mo'rtroq.
Koddan oldin (buzilgan)
Men tez-tez duch keladigan realistik misol (slug “maqolalar”, nomuvofiq imkoniyatlar va yorliqlar to'qnashuvi):
<?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,
] );
} );
Nima uchun u buziladi: bilan capability_type => 'page' et map_meta_cap => falseSiz ruxsatnomalar uchun sahifalar kabi ishlaydigan, ammo to'g'ri xaritalashsiz tur yaratasiz. Rollar va xavfsizlik plaginlariga qarab, WordPress cheklovlarni hisoblaganda ro'yxatga kirish rad etilishi yoki xatolarga olib kelishi mumkin.
Kod AFTER (tuzatilgan)
Maqsad: "Maqolalar" (mahalliy postlar) bilan ziddiyatlarning oldini olish va izchil ruxsatlarga ega bo'lish. Men quyidagilarni tavsiya qilaman:
- Aniq slug va identifikator (masalan,
mag_articleouressource). - Aniq yorliqlar (masalan, “Resurslar”).
- Imkoniyatlar to'g'ri xaritada ko'rsatilgan
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 );
Nima uchun to'g'rilaydi
- Siz "Maqolalar" (mahalliy postlar) bilan aqliy va texnik to'qnashuvdan qochasiz.
- WordPress ruxsatlarni "post kabi" (standart) hisoblashni biladi, bu esa rol/xavfsizlik plaginlari bilan ziddiyatlarni sezilarli darajada kamaytiradi.
- CPT REST/Gutenberg bilan mos keladi (
show_in_rest), bu muharrirda g'alati xatti-harakatlardan qochadi.
Ushbu tuzatishdan keyingi muhim qadam
borib Sozlamalar> Permalinks va bosing rekord (hech narsani o'zgartirmasdan). Bu WordPressni qayta yozish qoidalarini qayta yaratishga majbur qiladi.
Rasmiy hujjat: ro'yxatdan o'tish_post_turi().
2-yechim: Yangilanishdan so'ng qayta yozishlarni, RESTni va doimiy havolalarni ta'mirlash
Bu stsenariy quyidagilardan keyin keng tarqalgan:
- Veb-sayt migratsiyasi (URL o'zgarishi),
- CPT/taksonomiyalarni yaratadigan plaginni faollashtirish/o'chirish,
- Slug'larini o'zgartiradigan plaginning "v3.1.1" versiyasini yangilang,
- qisman zaxira nusxasini tiklash.
Bu har doim ham halokatli PHP xatosiga olib kelmaydi. Ba'zan "Maqolalar" ekrani ochiladi, lekin ba'zi filtrlar yoki harakatlar bajarilmaydigan so'rovlarni (REST/AJAX) amalga oshiradi va interfeys "buzilgan" ko'rinadi.
Tez diagnostika (kod talab qilinmaydi)
- sinov
/wp-admin/edit.phpso'ng/wp-admin/edit.php?post_status=trash. - Brauzer konsolini (F12) oching va Tarmoq yorlig'iga qarang: chaqiruvlar
/wp-json/404/401/500 da? - borib Asboblar > Sayt salomatligi va tavsiyalarni tekshiring (REST API, sikllar va boshqalar).
1-tuzatish: Doimiy havolalarni (UI) tozalab tashlash
Eng xavfsiz variant: Sozlamalar> Permalinks > rekord.
2-tuzatish: WP-CLI orqali tozalash (agar administrator interfeysi beqaror bo'lsa)
Agar sizda WP-CLI bo'lsa (ko'pincha VPS/boshqariladigan xostingda), quyidagilarni bajaring:
wp rewrite flush --hard
WP-CLI ma'lumotnomasi: wp qayta yozishni tozalash.
Koddan oldin (buzilgan): noto'g'ri joyda flush
Men ushbu parchaning administrator rejimida sekinlashuvlar, vaqt tugashlari va hatto tartibsiz xatti-harakatlarga olib kelishini ko'rdim:
<?php
// EXEMPLE CASSÉ : flush à chaque chargement
add_action( 'init', function() {
flush_rewrite_rules(); // Très mauvais : lourd, et peut provoquer des effets de bord
} );
AFTER kodi (tuzatilgan): faqat faollashtirilganda flush
Ushbu kodni a ga joylashtiring maxsus plagin (masalan: /wp-content/plugins/mon-fix/mon-fix.php), keyin uni faollashtiring. Keyin uni saqlab qo'yishingiz (doimiy tozalashsiz) yoki o'chirishingiz mumkin.
<?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();
} );
Nima uchun to'g'rilaydi
- Siz anti-naqshni yo'q qilasiz:
flush_rewrite_rules()har bir sahifani yoqmasligi kerak. - Siz CPT/slug o'zgarishidan so'ng qoidalarni qayta o'rnatasiz, bu ba'zi administrator ekranlarini va tegishli REST/AJAX so'nggi nuqtalarini barqarorlashtiradi.
Rasmiy hujjat: flush_rewrite_rules().
3-yechim: “Maqolalar” ekranida (admin kancalari, ustunlar, filtrlar) halokatli PHP xatosini toping.
Bu “v3.1.1 wp-admin maqolalarini ocha olmayapti…” xatosining eng keng tarqalgan sababidir. Plagin (v3.1.1) yoki parcha ustun qo'shadi, so'rovni o'zgartiradi yoki qatorlarni filtrlaydi va PHP xatosini (TypeError, undefined function va boshqalar) ishga tushiradi.
1-qadam: Aniq xatoni toping
ochiq wp-content/debug.log xatoni takrorlagandan so'ng (bosing Maqolalar). Quyidagi kabi “PHP Fatal error” yo'liga ega qatorni qidiring:
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 ...
Agar sizda jurnal bo'lmasa, Query Monitorni o'rnating va "PHP xatolari" yorlig'iga qarang (agar sahifa faqat qisman yuklanayotgan bo'lsa). Query Monitor hujjatlari: WordPress.org.
2-bosqich: Jamoat joylarini buzmasdan izolyatsiya qiling (Sog'liqni saqlash tekshiruvi)
bilan Sog'liqni saqlash tekshiruvi va muammolarni bartaraf etish :
- Muammolarni bartaraf etish rejimini yoqing (faqat sessiyangiz uchun).
- sinov MaqolalarAgar u ishlasa: muammo muammolarni bartaraf etish rejimida o'chirilgan plagin/mavzudan kelib chiqadi.
- Ishdan chiqishni takrorlamaguningizcha plaginlarni birma-bir qayta faollashtiring.
Mening tajribamga ko'ra, bu saytni mavjud bo'lmagan holga keltirmasdan "v3.1.1 plaginini" aniqlashning eng tezkor usuli.
Odatdagi holat: noto'g'ri turni qaytaradigan ustun filtri
haqida edit.phpKo'pgina kodlar filtrdan foydalanadi manage_posts_columns (yoki manage_edit-post_columns) ustunlar qo'shish uchun. PHP 8+ da klassik xato: qaytarish null rasm o'rniga.
Koddan oldin (buzilgan)
Haqiqiy misol: plagin/parcha ustunni o'chirmoqchi, lekin massivni qaytarishni unutadi:
<?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 );
Mumkin bo'lgan natija: bundan keyin WordPress (yoki boshqa plagin) a ni bajaradi array_merge() sur $columns va oladi null → TypeError → Buyurtmadan chiqqan elementlar ekrani.
Kod AFTER (tuzatilgan)
Ushbu tuzatishni maxsus plaginga joylashtiring (yoki functions.php (bolalar mavzusi bo'yicha) saqlagandan keyinAgar plagin muammosidan shubhalansangiz, uni o'z kodingizda tuzating va buzg'unchi plaginni o'chirib qo'ying.
<?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 );
Nima uchun to'g'rilaydi
- Filtr lozim qiymatni qaytaradi. Aks holda, WordPress oladi
null. - Himoya choralari
is_array()boshqa plagin noto'g'ri turni qaytarsa ham sizni himoya qiladi.
Ilgaklar (harakatlar/filtrlar) bo'yicha rasmiy hujjatlar: Plagin APIsi: Hooklar.
Odatdagi holat: ro'yxatni (pre_get_posts) buzadigan "oldindan so'rov" kancasi
Yana bir klassik xato: siz administrator panelidagi postlarni filtrlashni xohlaysiz va barcha so'rovlarni, shu jumladan administrator ro'yxatidagilarni ham o'zgartirasiz. Agar so'rov yaroqsiz bo'lib qolsa, "Maqolalar" sahifasi bo'sh qoladi, sekinlashadi yoki ishdan chiqadi.
Koddan oldin (buzilgan)
<?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' );
} );
Kod AFTER (tuzatilgan)
Maqsad: faqat asosiy front-end so'rovini o'zgartiring, administrator panelini emas. Uni maxsus plagin yoki bolalar mavzusiga joylashtiring.
<?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 );
Rasmiy hujjat: pre_get_posts.
Odatdagi holat: edit.php faylini buzadigan administrator paneliga JS skripti kiritiladi
Agar konsol JS xatolarini ko'rsatsa, administrator bo'ylab skriptni navbatga qo'yadigan, ba'zan miniflangan, ba'zan esa yo'qolgan kutubxonaga bog'liq plaginni qidiring.
Koddan oldin (buzilgan)
<?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
);
} );
Kod AFTER (tuzatilgan)
Biz faqat "Maqolalar" (postlar) ekranini nishonga olamiz va oqilona bog'liqliklarni e'lon qilamiz.
<?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 );
Rasmiy hujjat: admin_enqueue_scripts et wp_enqueue_script ().
Tuzatishdan keyingi tekshiruvlar
- Qayta zaryadlash
/wp-admin/edit.phpshaxsiy ko'rish rejimida (tajovuzkor keshdan saqlaydi). - Sinab ko'ring:
- Maqola qidirilmoqda
- Kategoriya bo'yicha filtrlash
- Tez tahrirlash
- savat
- Tekshirish
wp-content/debug.log: bosish paytida endi "halokatli xato" yo'q. - Agar sizda keshlash plagini bo'lsa: plagin keshini + server keshini (agar mavjud bo'lsa) + brauzer keshini tozalang.
Agar xato ruxsatnomalar/imkoniyatlar ziddiyati bo'lsa: "Muharrir" hisobi bilan sinab ko'ring (faqat administrator hisobi emas). Ko'pgina saytlar administrator foydalanuvchilari uchun "tuzatilgan" ko'rinadi, ammo pastroq rollar uchun buzilganligicha qolmoqda.
Agar bu hali ham ishlamasa
"Maqolalar" ekraniga kirish imkoni bo'lmaganda, men qo'llaydigan muammolarni bartaraf etish protsedurasi.
1) WP-admin (FTP)siz nosoz plaginni o'chirib qo'ying
- FTP/SFTP orqali ulaning.
- borib
/wp-content/plugins/. - Shubhali plagin papkasini qayta nomlang (masalan,
mon-plugin→mon-plugin.off). - wp-admin faylini yangilang.
Agar qaysi birini bilmasangiz: vaqtincha nomini o'zgartiring plugins en plugins.off (barcha plaginlarni o'chiradi), keyin ularni birma-bir qayta yoqing va qayta faollashtiring.
2) PHP xotirasini tekshiring
Maqolalarning katta ro'yxati (ko'plab ustunlar, so'rovlar, statistika) xotiradan foydalanishning keskin oshishiga olib kelishi mumkin. "Ruxsat berilgan xotira hajmi..." xatosini qidiring.
Siz WordPress limitini oshirishingiz mumkin (agar sizning xosting provayderingiz ruxsat bersa):
<?php
// wp-config.php
define( 'WP_MEMORY_LIMIT', '256M' );
define( 'WP_MAX_MEMORY_LIMIT', '512M' ); // Pour l'admin
Malumot: wp-config.php (konstantlar).
3) PHP versiyasini tekshiring
Agar siz PHP 7.4/8.0 dan foydalanayotgan bo'lsangiz, ba'zi so'nggi plaginlar (yoki WordPress 6.9.4) boshqacha ishlashi mumkin. Kamida PHP 8.1 ga intiling.
Hujjat: PHP tomonidan qo'llab-quvvatlanadigan versiyalar.
4) REST/AJAX xatolarini tekshiring
- ochiq
/wp-json/: JSON formatida javob berishi kerak (HTML 404 emas). - Xavfsizlik plagini uni bloklayotganini tekshiring.
/wp-json/ouadmin-ajax.php.
REST hujjati: WordPress REST API qo'llanmasi.
5) So'rov monitori: singan ilgak/filtrni aniqlang
Agar sahifa faqat qisman yuklansa, Query Monitor sizga quyidagilarni ko'rsatishi mumkin:
- PHP xatolari
- sekin so'rovlar
- skriptlar/uslublar xatosi
- tetiklangan ilgaklar
6) So'nggi chora: tiklash rejimini faollashtiring
WordPressda plagin administrator panelida halokatli xatolikni keltirib chiqarganda faollashadigan "tiklash rejimi" mexanizmi mavjud. Agar siz "Saytingizda texnik xatolik yuz bermoqda" degan elektron pochta xabarini olsangiz, buzg'unchi plaginni o'chirish uchun tiklash havolasidan foydalaning.
Hujjat: Qayta tiklash rejimi (qo'llab-quvvatlash).
Umumiy xatolar va kamchiliklar
Diagnostika jadvali
| alomat | Ehtimoliy sabab | tekshiruv | qaror |
|---|---|---|---|
| Faqat "Maqolalar"da jiddiy xatolik | v3.1.1 plagini ustunlar/filtrlar va o'simliklarni qo'shadi | debug.log /plugins/... da yo'lni ko'rsatadi | Plaginni o'chirib qo'ying/orqaga qaytaring, muammoni hal qiling (3-yechim) |
| "Kechirasiz, sizga vakolat berilmagan..." | Noto'g'ri xaritalangan CPT imkoniyatlari yoki rol plagini | Admin va muharrir bilan sinab ko'ring, CPT ni tekshiring | CPT/caps ni to'g'rilash (1-yechim), rollarni ko'rib chiqish plagini |
| Bo'sh ro'yxat (0 ta element), lekin ular mavjud | pre_get_posts administrator so'rovini o'zgartiradi | Parchani o'chirib qo'ying, pre_get_posts kodini tekshiring | is_admin/is_main_query uchun himoya choralarini qo'shing (3-yechim) |
| Tezkor tahrirlash ochilmayapti | JS admin yoki admin-ajax bloklangan xato | Konsol F12 + Tarmoq yorlig'i | Navbatni nishonga oling, minifikatsiyani o'chiring, AJAXga ruxsat bering |
| Migratsiyadan keyingi muammo | Eskirgan qoidalarni qayta yozing | Sozlamalar > Doimiy havolalar, test /wp-json/ | Doimiy havolalarni tozalash (2-yechim) |
Men doim ko'rib turadigan xatolar
- Kodni noto'g'ri joyga nusxalash PHP parchasini konstruktorda yoki sahifa muharririda "CSS" maydoniga joylashtirish hech narsa ishlamasligiga yoki kod oddiy matnda ko'rsatilishiga olib keladi.
- Nuqtali vergulni unutish yilda
functions.phpOddiy xato barcha wp-admin kirishlarini bloklaydi. Staging muhitida ishlang va FTP kirishini saqlang. - Noto'g'ri ilgakdan foydalanish Masalan, administrator so'rovini quyidagicha o'zgartirish mumkin
pre_get_postsSansis_admin(). - Zaxiralar va filtrlar o'rtasidagi chalkashliklar Filtr biror narsani qaytarishi kerak, ammo amal qaytarmaydi. Bu yerda qaytarish xatosi "Maqolalar"ni buzishi mumkin.
- Kesh tozalanmadi Siz uni tuzatdingiz, lekin brauzer eski JS versiyasini taqdim etmoqda. Skript versiyasini oshiring va keshni tozalang.
- Zaxira nusxasisiz ishlab chiqarishda sinovdan o'tkazish : administrator panelida u sizni blokirovka qilishi mumkin.
- Parcha parcha plagini tomonidan buzilgan Agar snippets plagini ishdan chiqsa, uni endi osongina o'chirib qo'yishingiz mumkin emas. Xatolarni tuzatish uchun mu-plagin afzalroq.
- Eski darslikdan kod PHP 8.1+ bilan mos kelmaydi (TypeError, kerakli parametrlar va boshqalar).
Variant / muqobil
Kodsiz usul: “v3.1.1” versiyasiga qaytarish
Agar siz “v3.1.1” plagin versiyasi ekanligini aniqlagan bo'lsangiz va xato darhol keyin paydo bo'lgan bo'lsa:
- WordPress.org saytidagi plagin sahifasini tekshirib, unda bo'lim bor-yo'qligini tekshiring. Kengaytirilgan ko'rinish oldingi versiyasini yuklab olishga imkon beradi.
- Yoki orqaga qaytarish plaginidan foydalaning (masalan, WP Rollback) ehtiyotkorlik bilan va faqat ishonchli manbadan.
Keyin, plagin uchun qo'llab-quvvatlash chiptasini oching:
- WordPress versiyangiz (6.9.4), PHP,
- to'liq xato jurnali,
- ko'paytirish bosqichlari.
Murakkab usul: edit.php faylida halokatli xatolarning oldini olish uchun mu-plagin "bumperlari"
Administratorni zudlik bilan barqarorlashtirish kerak bo'lganda, ma'lum bir ilmoqni (masalan, ustun filtri) himoya kodi bilan almashtirish orqali uni zararsizlantirishingiz mumkin. Diqqat: bu vaqtinchalik yechim. Keyin asosiy muammoni hal qilishingiz kerak.
Misol: siz ba'zan qaytadigan filtrni aniqladingiz nullSiz plaginni o'zgartira olmaysiz (yoki uning kodiga tegishni xohlamaysiz). Siz "tuzatadigan" kech bosqichli filtrni qo'shasiz:
<?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 );
Bu plaginni "tuzatmaydi", lekin tashxisni davom ettirish uchun sizga ekranga yana kirish huquqini berishi mumkin.
Kelajakda bu muammodan qoching
- CPTni "maqolalar" deb atashdan saqlaning : mahalliy postlar uchun "Maqolalar" ni saqlang. CPTlaringizni ularning biznes roliga (resurslar, loyihalar, retseptlar...) qarab nomlang.
- Doimiy yuvish yo'q :
flush_rewrite_rules()faqat faollashtirish/o'chirishda. - Filtrlardagi himoya kodi : turlarini tasdiqlash (
is_array,is_string) boshqa plaginlar tomonidan ishlatiladigan qiymatlarni filtrlaganingizda. - Tizimli bosqichlashtirish Katta plagin yangilanishlaridan oldin, 3.1.1 versiyasi ma'lum bir administrator ekranida regressiyani o'z ichiga olishi mumkin.
- Xatolarni kuzatib boring saqlash
WP_DEBUG_LOGosongina faollashtiriladi va server tomonidagi jurnal aylanishini sozlaydi. - Plaginlar va quruvchilar Divi 5, Elementor va Avada bu tuzatishlarning oldini olmaydi. Biroq, administrator funksiyalarini ham minimallashtiradigan "hammasi bir joyda" ishlash plaginlaridan qoching: bu JS xatolarining klassik manbai.
edit.php.
Agar siz ishlab chiqayotgan bo'lsangiz: ilgaklaringizni hujjatlashtiring. Hech narsa qaytarmaydigan filtr, ayniqsa PHP 8.1+ da, vaqt bombasi kabi ishlaydi.
resurslari
- WordPressda nosozliklarni tuzatish (WP_DEBUG, logs)
- Plagin APIsi: Hooklar (harakatlar va filtrlar)
- register_post_type() (CPT)
- pre_get_posts hook (so'rovni o'zgartirish)
- flush_rewrite_rules() (qayta yozadi)
- Sog'liqni tekshirish va muammolarni bartaraf etish (muammolarni bartaraf etish rejimi)
- So'rovlar monitori (profillash va xatolar)
- GitHub’dagi WordPress Core (kod havolasi)
- WordPress Core Trac (chiptalar va regressiyalar)
- Qo'llab-quvvatlanadigan PHP versiyalari
tez-tez so'raladigan savollar
Qaysi plagin "v3.1.1" ga mos kelishini qanday bilsam bo'ladi?
nazar wp-content/debug.log : nosoz faylga yo'l deyarli har doim ga ishora qiladi /wp-content/plugins/nom-du-plugin/Shu bilan bir qatorda, plaginlarni birma-bir qayta faollashtirish orqali Health Check-dan foydalaning.
Menda wp-adminga kirish imkoni yo'q, nima qilishim kerak?
Shubhali plagin papkasini FTP/SFTP orqali qayta nomlang (yoki barcha plaginlarni qayta nomlash orqali ularni o'chirib qo'ying). /wp-content/pluginsKeyin qayta ulang va asta-sekin qayta faollashtiring.
Divi 5 / Elementor / Avada bu xatoga sabab bo'lishi mumkinmi?
Ular kamdan-kam hollarda uni to'g'ridan-to'g'ri qo'zg'ashadi edit.phpBiroq, "quruvchi bilan" o'rnatilgan qo'shimcha dastur, parcha plagini yoki optimallashtirish (minifikatsiya) administrator interfeysini buzishi mumkin. Tashxis o'zgarishsiz qoladi: jurnallar + plagin izolyatsiyasi.
Nima uchun xato faqat "Maqolalar"da ko'rinadi va boshqa joylarda ko'rinmaydi?
Chunki ko'plab plaginlar postlar ro'yxatiga tegishli maxsus ilgaklardan (ustunlar, saralash, filtrlar, cheklovlar) foydalanadi. Ushbu koddagi xato faqat quyidagi vaqtda ishga tushiriladi wp-admin/edit.php.
Buni nosoz plaginni o'zgartirish orqali tuzata olamanmi?
Bunga yo'l qo'ymang. Har qanday yangilanish sizning o'zgarishlaringizni qayta yozib qo'yadi. Buning o'rniga quyidagilarni sinab ko'ring: (1) maxsus plagin/mu-plaginni tuzatish, (2) xato haqida dasturchiga xabar berish, (3) agar qo'llab-quvvatlash mavjud bo'lmasa, boshqa plaginga o'tish.
Kodni tuzatdim, lekin hech narsa o'zgarmadi.
Keshlarni (plagin, server, brauzer) tozalang. Agar JavaScript administrator darajasida bo'lsa, versiyani oshiring... wp_enqueue_script()Shuningdek, to'g'ri faylni o'zgartirganingizni tekshiring (bola mavzusi va ota-ona mavzusi).
“Kechirasiz, siz vakolatli emassiz…” garchi men administrator bo'lsam ham.
Bu roles/xavfsizlik plagini imkoniyatlarni o'zgartirgan bo'lsa yoki CPT mos kelmaydigan imkoniyatlarga ega bo'lsa sodir bo'ladi. Roles plaginini vaqtincha o'chirib qo'ying, keyin CPT deklaratsiyasini to'g'rilang (1-yechim).
Maqolalar ro'yxati bo'sh, ammo old qismda hali ham postlar ko'rsatiladi.
Ilgak pre_get_posts Yoki cheklov plagini so'rovni faqat administrator rejimida o'zgartirishi mumkin. Majburlaydigan parchani qidiring post_status, author, ou posts_per_page himoya choralarisiz is_admin().
Bardoshli yamoqni qo'llashning eng yaxshi usuli qanday?
Un mu-plagin Agar mavzu o'zgarsa ham, tuzatish faol bo'lib qolishini istasangiz, standart maxsus plagindan foydalaning. Administrator mantig'i uchun mavzuga tayanishdan saqlaning.
Xosting provayderimga qachon murojaat qilishim kerak?
Agar siz 500 ta xatoni izsiz ko'rsangiz debug.log, yoki ruxsat/OPcache muammolari bo'lishi mumkin yoki PHP juda eski bo'lsa va siz uni o'zgartira olmasangiz. Unga testning aniq vaqtini va URL manzilini bering. /wp-admin/edit.php server jurnallari bilan o'zaro bog'liqlik uchun.