Agar siz allaqachon bosgan bo'lsangiz SMTP xabarini yuborish → Sozlamalar va WordPress siz ... bilan javob berasiz oq ekran yoki halokatli xatoSiz faqat ... da ishga tushirilgan xatoning odatiy holati bilan ishlayapsiz.admin, sozlamalar sahifasi yuklanganda.

muammo

Asosiy alomat: SMTP post sozlamalari sahifasini ochish halokatli PHP xatosiga olib keladi. Ko'pincha, sayt tashrif buyuruvchilar uchun ochiq bo'lib qoladi, ammo administrator interfeysi o'sha sahifada ishdan chiqadi.

WordPress 6.9.x saytlaridagi jurnallarda ko'rgan ba'zi haqiqiy xato xabarlari (aniq so'zlar xosting provayderi va disk raskadrovka rejimiga qarab farq qiladi):

Fatal error: Uncaught TypeError: array_merge(): Argument #2 must be of type array, string given
in /wp-content/plugins/post-smtp/Postman/PostmanViewController.php:1234
Stack trace:
#0 ...
Fatal error: Uncaught Error: Call to undefined function wp_get_environment_type()
in /wp-content/plugins/post-smtp/Postman/Postman.php:210
Fatal error: Uncaught Error: Class "VendorPackageSomeClass" not found
in /wp-content/plugins/post-smtp/vendor/.../autoload.php:...
Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 20480 bytes)
in /wp-content/plugins/post-smtp/.../Settings.php on line ...

Qayerda paydo bo'ladi:

  • Admin ayniqsa /wp-admin/admin.php?page=postman (yoki varianti).
  • AJAX Ba'zan, yorliq yuklanayotganda, agar Sozlamalar sahifasi chaqirilsa admin-ajax.php.
  • REST API : kamroq tarqalgan, ammo ba'zi zamonaviy plaginlar ma'lumotlarni yuklaydi /wp-json/.

Odatdagi holatlar:

  • Jye yangilanishdan keyin Post SMTP dan yoki WordPress dan (bu yerda WordPress 6.9.4).
  • O'zgarishdan keyin PHP versiyasi (8.1/8.2/8.3 ga o'tish), bu "jim" xatolarni yanada qattiqlashtiradi (TypeError).
  • Administratorni o'zgartiradigan xavfsizlik/kesh plaginini faollashtirgandan so'ng (minifikatsiya, REST/AJAX blokirovkasi, WAF qoidalari).

Kim uchun: Agar siz yangi boshlovchi blogger bo'lsangiz, quyidagilarni o'rganasiz haqiqiy izni qaytarib olish, mojaroni izolyatsiya qilishKeyin xavfsiz tuzatishni qo'llang (WordPress yadrosiga tegmasdan). Oxirida, siz qo'llab-quvvatlash uchun nimalarni taqdim etishni ham bilib olasiz (toza jurnallar, bajarilgan qadamlar, versiyalar).

Tez xulosa

  • Toza diagnostika rejimini yoqing: WP_DEBUG + jurnali, va aniq izini oling xato.
  • Sozlamalar sahifasini sinab ko'ring Sog'liqni saqlash nazorati (muammolarni bartaraf etish rejimi) tasdiqlash uchun plagin/mavzu ziddiyati.
  • Ko'pgina avariyalar quyidagilardan kelib chiqadiBuzilgan Post SMTP parametrlari yangilanishdan so'ng: WP-CLI yoki bazaviy tizim orqali maqsadli tiklash.
  • "Sinf topilmadi" xatolari ko'pincha a ga ishora qiladi sotuvchi/avtomatik yuklash Tugallanmagan: plaginni ko'r-ko'rona yamoq o'rniga (toza) qayta o'rnating.
  • "Xotira tugab qoldi" xatolari server tomonida hal qilindi (PHP chegarasi) + administratorning ortiqcha yuklanishi kamaydi (kesh/minify noto'g'ri sozlangan).

Alomatlar

Serverga qarab, quyidagilarni ko'rishingiz mumkin:

  • 500 xato Post SMTP → Sozlamalar ni ochish orqali.
  • Oq ekran (WSOD) faqat ushbu administrator sahifasida.
  • Xabar "Ushbu veb-saytda jiddiy xatolik yuz berdi"+ Izoh parchasi bilan WordPress elektron pochtasi.
  • Konsolda xatoliklar mavjud bo'lgan (AJAX/REST bloklangan) SMTP yorliqlari/bo'limlarini yuklamaslik.
  • Sozlamalarni saqlab bo'lmadi (yaroqsiz hech biri, ruxsatnomalar yoki yuborish vaqtidagi halokatli xato).

Muayyan sababga ishora qiluvchi belgilar:

  • Front-end ishlaydi, lekin administrator interfeysi ishdan chiqadi: ko'pincha ilmoq administratori noto'g'ri foydalanish yoki "admin optimizator" plagini bilan ziddiyat.
  • Mahalliy darajada ishlaydi, lekin ishlab chiqarishda emas: ko'pincha PHP versiyasi, mémoire, ou WAF (dastur xavfsizlik devori).
  • Bu "yangilanishdan so'ng darhol" buzildi: mos kelmaydigan variantlar, avtomatik yuklovchi sotuvchisi, OPcache keshi.

Tez diagnostika jadvali

alomat Ehtimoliy sabab tekshiruv qaror
“array_merge()… berilgan satr” xatosi SMTP parametrini massivda joylashtirish kutilmoqda, ammo satr sifatida saqlanadi Kuzatuvni kuzatib boring + DBdagi variantni tekshiring 3-yechim (variantni qayta o'rnatish/o'zgartirish)
"Sinf topilmadi ... sotuvchi/autoload.php" Plagin noto'g'ri o'rnatilgan / yetkazib beruvchi to'liq emas Plagin papkasini taqqoslang, keyin uni wordpress.org saytidan qayta yuklab oling Plaginni toza qayta o'rnating (va OPcacheni tozalang)
Tafsilotlarsiz 500 xatosi Jurnallar o'chirilgan / WAF / kesh WP_DEBUG_LOG + server jurnallarini yoqish 1-yechim + keshni/admin minifyni o'chirib qo'yish
Bo'sh Sozlamalar sahifasi, JS konsolida xatolik JS (minifikatsiya) yoki REST/AJAX mojarosi bloklandi Brauzer konsoli + Tarmoq yorlig'i Minify adminni o'chirib qo'ying, /wp-json/ ga ruxsat bering
"Ruxsat etilgan xotira hajmi tugadi" Administrator uchun PHP xotirasi yetarli emas xato_log + Sayt salomatligi Xotira_limitini (server) oshirish + resurslarni ko'p talab qiladigan plaginlarni cheklash

Nima uchun bu sodir bo'lmoqda?

Boshlang'ich versiya: Sozlamalar sahifasini ochganingizda, WordPress plaginni, uning PHP fayllarini, skriptlarini yuklaydi va keyin formani ko'rsatish uchun kodini bajaradi. Agar kodning bitta qismi ham kutilmagan ma'lumotlarga duch kelsa (masalan, noto'g'ri formatda saqlangan parametr), PHP hamma narsani to'xtatadi halokatli xato.

Sahna ortida nimalar bo'layotgani (texnikroq versiya):

  • WordPress plaginlarni yuklaydi, keyin ishga tushiradi ilgaklarIlgak - bu plagin kodni bajarishi mumkin bo'lgan "biriktirish nuqtasi". aksiyadorlik (bajarish) va filtrlar (qiymatni o'zgartirish).
  • Sozlamalar sahifasi o'tadi admin_menu (menyuni qo'shish) keyin ekranni yuklash orqali (ko'pincha) load- $ hook_suffix), keyin displey.
  • SMTP o'qishlaridan keyin imkoniyatlari (ma'lumotlar bazasida saqlanadi get_option()Agar tur kutilgan tur bo'lmasa (massiv o'rniga satr), PHP 8.1+ qattiqroq TypeErrors xatosini ishga tushiradi.

Sabablar eng tez-tez uchraydiganidan eng kam uchraydiganiga qarab tartiblangan (WordPress 6.9.4 / PHP 8.1+ da):

  1. Buzilgan yoki eskirgan SMTP post opsiyasi eski versiyadan (tugallanmagan migratsiya).
  2. plaginlar mojarosi (kesh/minify/admin optimizatori/xavfsizlik), bu AJAX/RESTni buzadi yoki yuklash tartibini o'zgartiradi.
  3. Tugallanmagan o'rnatish plagin (sotuvchi papkasi yo'q, yangilanishdan keyin qisqartirilgan fayllar).
  4. PHP versiyasi qo'llab-quvvatlanmaydi (juda eski) yoki aksincha, yashirin xatoni ochib beradigan qat'iyroq xatti-harakatlar (TypeError).
  5. Xotira chegarasi administratorda juda past, ayniqsa katta saytlarda (WooCommerce, quruvchilar va boshqalar).

Sahifa quruvchisi mosligi: Divi 5, Elementor va Avada odatda plaginning Sozlamalar sahifasi bilan hech qanday aloqasi yo'q. Biroq, mening tajribamga ko'ra, ular bilvosita "admin optimizatsiyasi" qo'shimchalari yoki hamma joyga kiritilgan global skriptlar orqali hissa qo'shadilar. Shuning uchun, biz Health Check yordamida standart mavzu bilan ham sinovdan o'tkazamiz.

Boshlashdan oldin zarur shartlar

  • saqlash To'liq (fayllar + ma'lumotlar bazasi). Ushbu operatsiyalarni to'g'ridan-to'g'ri ishlab chiqarishda xavfsizlik tarmog'isiz bajarmang.
  • Kirish:
    • FTP/SFTP yoki fayl menejeri
    • fayl wp-config.php
    • Ideal holda, WP-CLI dan foydalaning (ixtiyoriy, lekin juda amaliy).
  • Tavsiya etilgan versiyalar: WordPress 6.9.4 et PHP 8.1 +(Agar siz PHP 7.4/8.0 dan foydalanayotgan bo'lsangiz, avval migratsiya qiling: ko'plab zamonaviy vositalar endi bu versiyalarni sinovdan o'tkazmaydi.)
  • Foydali vositalar:

Asosiy xavf : noto'g'ri faylga teginish (masalan, plaginni to'g'ridan-to'g'ri o'zgartirish) va keyingi yangilanishda o'zgarishlaringizni yo'qotish. Parchalar uchun, a dan foydalaning mu-plagin ("foydalanish shart" plagini) yoki maxsus plagin.


1-yechim: Fatal xatoni ajratib oling va izni oling (WP_DEBUG, logs, Query Monitor)

Kimdir menga "SMTP sozlamalarini yuborish halokatli xatoga olib keladi" deb aytganda, men har doim bir xil narsadan boshlayman: olish aniq izBusiz, siz plaginlarni tasodifiy ravishda o'chirib qo'yasiz.

1-qadam — Toza PHP jurnalini yoqish (xatolarni tashrif buyuruvchilarga ko'rsatmasdan)

ochiq wp-config.php (WordPress ildiz katalogida) va ushbu konstantalarni qo'shing/sozlang. Ularni joylashtiring avant “Bo‘ldi, tahrirlashni to‘xtating!” degan satr.

OLDIN kod (yangi boshlanuvchilar orasida keng tarqalgan: disk raskadrovka yo'q yoki ekranda ko'rsatiladi):

<?php
// ... contenu existant ...

define('WP_DEBUG', false);

// ...

AFTER kodi (ma'lumotlar oqmasdan ishlab chiqarishda diagnostika qilish uchun tavsiya etiladi):

<?php
// ... contenu existant ...

/**
 * Diagnostic : active les logs sans afficher d’erreurs aux visiteurs.
 * Pensez à désactiver après dépannage.
 */
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);

// Évite que PHP affiche des erreurs malgré WP_DEBUG_DISPLAY à false.
@ini_set('display_errors', '0');

// ...

Nima uchun bu yordam beradi: WordPress xatolarni yozadi wp-content/debug.logBu siz avariyani takrorlaganingizdan keyin o'qiydigan fayl.

Rasmiy ma'lumotnoma: WordPressdagi xatolarni tuzatish (developer.wordpress.org)

2-qadam — Xatoni takrorlang va izni oling

  1. Administrator panelini oching, SMTP yuborish → Sozlamalar (yoki unga tenglashtirilgan yozuv) ni bosing.
  2. Agar oq ekran bo'lsa: bir marta qayta yuklang (ba'zan jurnal ikkinchi marta urilganda yoziladi).
  3. ochiq wp-content/debug.log va nusxa ko'chirish:
    • “Oʻlimga olib keladigan xato…” qatori
    • 10–30 qatorli stek izi

Si debug.log to'ldirilmaydi:

  • Xosting provayderingiz yozishga kirishni o'chirib qo'yishi mumkin. Ruxsatnomalarni tekshiring wp-content.
  • Panel orqali server jurnallarini (Apache/Nginx) ko'ring.
  • Agar siz agressiv server keshidan foydalanayotgan bo'lsangiz, uni tozalang.

3-qadam — Ommaviy saytni buzmasdan mojaroni tasdiqlang (Sog'liqni saqlash tekshiruvi)

O'rnatish/faollashtirish Sog'liqni saqlash nazorati, Keyin:

  1. Asboblar → Sayt salomatligi → yorlig'i yordam
  2. Muammolarni bartaraf etish rejimini yoqing (tashrif buyuruvchilaringizga ta'sir qilmaydi).
  3. Sinovdan keyingi SMTP → Sozlamalar.
  4. Agar u muammolarni bartaraf etish rejimida ishlayotgan bo'lsa: xatolik takrorlanguncha plaginlarni ushbu rejimda birma-bir qayta faollashtiring.

Mening tajribamda, eng ko'p uchraydigan to'qnashuvlar quyidagilar:

  • administratorga ta'sir qiluvchi minifikatsiya plaginlari
  • bloklaydigan xavfsizlik plaginlari admin-ajax.php ou /wp-json/
  • buzilgan kodni yuklaydigan parcha plaginlari admin_init

4-qadam — Brauzer konsolini tekshiring (agar sahifa faqat yarim yuklanayotgan bo'lsa)

Agar siz Post SMTP interfeysini ko'rsangiz, lekin bo'sh yorliqlar bilan:

  • DevTools → Console ni oching: JS xatolarini qidiring
  • DevTools → Tarmoq: filtrni oching admin-ajax.php et /wp-json/

Agar siz RESTda 403/401 xatolarini ko'rsangiz, bu ko'pincha xavfsizlik plagini yoki server qoidalari bilan bog'liq. REST API hujjatlariga qarang: REST API qo'llanmasi


2-yechim: Noto'g'ri yuklangan administrator kancasi tufayli buzilgan Sozlamalar sahifasini tuzating

Bu halokatli xato SMTP postidan "to'g'ridan-to'g'ri" emas, balki unda ishlayotgan parcha yoki plagindan kelib chiqqanida yuz beradi. hamma administrator sahifalari… va bu faqat Post SMTP sahifasida bajarilmaydi (chunki bu ekranda kutilgan o'zgaruvchi mavjud emas).

Odatda: buni taxmin qiladigan "administratorni sozlash" kodi $_GET['page'] har doim aniqlanadi yoki funksiyani juda erta chaqiradi.

Tez tashxis

  • yilda debug.logiz tomonga ishora qiladi functions.php (mavzu), parchalar plagini yoki “administrator sozlash” plagini.
  • Sog'liqni saqlash tekshiruvi (muammolarni bartaraf etish) rejimida, agar siz Yigirma Yigirma Beshga (yoki standart mavzuga) qaytsangiz va u ishlasa, muammo sizning mavzuingiz yoki administrator qo'shimchangizda bo'ladi.

Haqiqiy misol: haddan tashqari tajovuzkor admin_init kancasi (OLDIN → OFF)

Termin: harakat = funksiyani bajaradigan ilgak. Bu yerda admin_init har bir administrator yuklamasida ishlaydi.

Bu kod qayerda joylashgan? tez-tez functions.php mavzudan (ba'zan bolalar mavzusidan) yoki parchalar plaginidan. O'zgartirmang ota-ona mavzusi. Bola mavzusida yoki undan ham yaxshiroq: mu-plaginda ishlash.

BEFOR kodi (buzilgan: deb taxmin qiladi $_GET['page'] (mavjud va tekshirmasdan variantlarni boshqaradi):

<?php
add_action('admin_init', function () {
	// Mauvaise pratique : $_GET peut être absent, et la page peut ne pas correspondre.
	if ($_GET['page'] === 'postman') {
		// Exemple : on modifie une option sans vérifier son type.
		$settings = get_option('postman_options');
		$settings['force_smtp'] = true; // Fatal si $settings est une chaîne (string).
		update_option('postman_options', $settings);
	}
});

Nima buziladi: agar get_option('postman_options') qaytaradi string (buzilgan variant) yoki falsekirish $settings['force_smtp'] PHP 8.1+ da halokatli xatoga olib keladi.

Kod AFTER (tuzatilgan: biz kontekstni + turini tekshiramiz va har bir yuklamada o'qish/yozish parametrlariga tegmaymiz):

<?php
/**
 * MU-plugin recommandé : /wp-content/mu-plugins/postman-admin-guard.php
 * Sauvegardez avant de modifier.
 */
add_action('admin_init', function () {
	// Ne jamais supposer que $_GET existe.
	$page = isset($_GET['page']) ? sanitize_key(wp_unslash($_GET['page'])) : '';

	// On limite strictement au slug de page visé.
	if ($page !== 'postman') {
		return;
	}

	// On lit l’option et on valide le type.
	$settings = get_option('postman_options');

	if (!is_array($settings)) {
		// On évite le fatal error. À ce stade, on journalise pour diagnostic.
		error_log('[Post SMTP] Option postman_options inattendue (non-array) sur la page Settings.');
		return;
	}

	// Exemple : si vous devez vraiment ajuster un flag, faites-le sur une action explicite
	// (submit de formulaire) plutôt qu’à chaque admin_init.
});

Nima uchun bu muammoni hal qiladi: Siz tasdiqlanmagan ma'lumotlarga kirish orqali uchinchi tomon kodining Post SMTP ekranini "buzishiga" yo'l qo'ymaysiz. Va eng muhimi, siz har bir administrator yuklamasida ma'lumotlar bazasiga yozishdan qochasiz, bu esa xatolarning yana bir manbai hisoblanadi.

Mu-plaginni yarating (tavsiya etiladi)

Jild yarating wp-content/mu-plugins agar u mavjud bo'lmasa, unda fayl postman-admin-guard.php ichida. Mu-plaginlar WordPress tomonidan avtomatik ravishda yuklanadi.

Rasmiy hujjat: Foydalanish shart bo'lgan plaginlar


3-yechim: Yangilanishdan so'ng buzilgan/mos kelmaydigan variantni tozalang (WP-CLI / ma'lumotlar bazasi)

Bu, iz quyidagi turdagi xatolarni eslatib o'tganda, hal qilish uchun eng tejamkor sababdir:

  • array_merge(): Argument #2 must be of type array, string given
  • Cannot access offset of type string on string
  • foreach() argument must be of type array|object, string given

Stsenariy: Post SMTP massiv sifatida ketma-ketlashtirilgan parametrni kutadi, lekin ma'lumotlar bazasida ba'zan quyidagilar tufayli satr mavjud:

  • uzilib qolgan migratsiya
  • eskirgan qiymatga xizmat ko'rsatgan obyektni keshlash plagini (Redis/Memcached)
  • yaratgan parcha update_option() yomon tuzilishga ega

1-qadam — Ko'rib chiqilayotgan variantni aniqlang

Izda variantning aniq nomini toping. Nomlar versiyaga qarab farq qiladi, lekin ko'pincha shunga o'xshash narsani ko'rasiz:

  • postman_options
  • post_smtp_settings
  • postman_plugin_options

Agar ko'rmasangiz, ichkariga qarang debug.log bilan chiziq get_option yoki “Sozlamalar/Tanlovlar” fayli.

A varianti — WP-CLI orqali toza tiklash (eng xavfsiz variant)

Agar sizda WP-CLI bo'lsa:

1) Nomzod variantlarini sanab o'ting:

wp option list --search=postman --fields=option_name,autoload --format=table
wp option list --search=post_smtp --fields=option_name,autoload --format=table

2) Variantni tekshiring (ketma-ket massiv o'rniga satr ekanligini tekshirish uchun):

wp option get postman_options

3) Variantni o'chirishdan oldin saqlang (agar uni qayta tiklashingiz kerak bo'lsa, juda foydali):

wp option get postman_options --format=json > /tmp/postman_options_backup.json

4) Buzilgan parametrni o'chiring (SMTP xabari uni standart qiymatlar bilan qayta yaratadi):

wp option delete postman_options

WP-CLI hujjatlari (ma'lumotnoma): WP-CLI parametr buyrug'i

Nima uchun bu samarali Xatoga sabab bo'lgan zaharli ma'lumotlarni olib tashlaysiz. Plagin toza konfiguratsiya bilan qayta ishga tushadi va Sozlamalar sahifasi yana ko'rsatiladi.

B varianti — phpMyAdmin orqali tiklash (agar sizda WP-CLI bo'lmasa)

Ma'lumotlar bazasini saqlang Oldin. Keyin:

  1. Stolni oching wp_options (prefiks boshqacha bo'lishi mumkin).
  2. Variantni qidiring (masalan, postman_options).
  3. Uning qiymatini matn fayliga (zaxira nusxasi) nusxalash.
  4. Qatorni o'chirish (yoki o'zgartirish) option_value en a:0:{} (agar nima qilayotganingizni bilsangiz).

Eslatma: bilan almashtiring a:0:{} (Serializatsiyalangan bo'sh massiv) ba'zi o'rnatish ish oqimlaridan qochishi mumkin, ammo bu universal emas. Olib tashlash ko'pincha tozaroq.

C varianti — "Omon qolish" va administrator paneliga kirish uchun vaqtinchalik yamoq

Agar siz muammoga duch kelsangiz va plaginni o'chirish yoki ma'lumotlarni eksport qilish uchun administrator panelini qayta ochishingiz kerak bo'lsa, mu-plagin orqali vaqtinchalik himoya qo'shishingiz mumkin. Bu plagin uchun "tuzatish" emas, balki xavfsizlik tarmog'i.

Qayerga yopishish kerak : /wp-content/mu-plugins/postman-option-safety.php

<?php
/**
 * Filet de sécurité temporaire : corrige une option Post SMTP si elle est manifestement corrompue.
 * À retirer après dépannage.
 */

add_action('plugins_loaded', function () {
	// Changez ce nom d’option selon ce que vous voyez dans vos logs.
	$option_name = 'postman_options';

	$value = get_option($option_name, null);

	// Si l’option est une string non sérialisée, on la remet à zéro.
	// Attention : cela réinitialise potentiellement la configuration SMTP.
	if (is_string($value) && $value !== '' && !is_serialized($value)) {
		error_log('[Post SMTP] Option corrompue détectée (' . $option_name . '), réinitialisation.');
		delete_option($option_name);
	}
});

Nima uchun ishlaydi: SMTP endi "imkonsiz" qiymatga duch kelmaydi va standart sozlamalarini qayta tiklay oladi. Xavf: Siz SMTP konfiguratsiyangizni yo'qotasiz (shuning uchun oldindan WP-CLI/DB orqali zaxira nusxasini yaratish muhim).

Malumotnoma yoqilgan get_option() : get_option()


Tuzatishdan keyingi tekshiruvlar

Sabab aniqlangandan so'ng, oddiy nazorat ro'yxati bilan tasdiqlang:

  1. ochiq SMTP xabarini yuborish → Sozlamalar Sahifa xatosiz ko'rsatilishi kerak.
  2. ochiq wp-content/debug.log : endi "halokatli xato" yo'q.
  3. Post SMTP dan (yoki aloqa formasidan) sinov elektron pochta xabarini yuboring.
  4. Yuborish orqali ham ishlayotganini tekshiring WP-Cron agar sizda rejalashtirilgan pochta jo'natmalari bo'lsa (axborot byulletenlari, WooCommerce).
  5. Keyin disk raskadrovka rejimini o'chiring (yoki uni yoqilgan holda qoldiring). WP_DEBUG_LOG faqat sahna muhitida faol).

Agar sizda kesh (plagin, server, CDN) bo'lsa, uni tozalang:

  • kesh plagini (sahifa keshi)
  • server keshi (Varnish / Nginx mikrokeshi)
  • OPcache (agar sizning xosting provayderingiz ruxsat bersa) — plaginni qayta o'rnatgandan so'ng juda foydali

Agar bu hali ham ishlamasa

Sozlamalar sahifasi ishlamay qolganda, men belgilangan protseduraga amal qilaman. Bu keraksiz oldinga va orqaga o'tishlarning oldini oladi.

1) Post SMTP ni toza tarzda qayta o'rnating (iloji bo'lsa, konfiguratsiyani yo'qotmasdan)

Tugallanmagan o'rnatish (yetkazib beruvchi yo'q) "Class not found" xatolariga olib keladi. Jarayon:

  1. Variantlarni saqlang (iloji bo'lsa, WP-CLI JSON ni eksport qiladi).
  2. Post SMTP-ni o'chirib qo'yish.
  3. Jildni o'chirish /wp-content/plugins/post-smtp/ (faqat ushbu plagin).
  4. Qayta o'rnatish WordPress.org (SMTP posti) (shubhali ZIP faylidan emas).
  5. Sozlamalar sahifasini qayta yoqing va sinab ko'ring.

2) PHP versiyasi va kengaytmalarini tasdiqlang

  • Asboblar → Sayt salomatligi bo'limida PHP ni tekshiring. Target 8.1 +.
  • Kengaytmalarni tekshiring: openssl, mbstring, curlSMTPdan keyingi xabarlar ko'pincha bilvosita unga bog'liq.

PHP hujjatlari (masalan, OpenSSL): PHP OpenSSL

3) "admin" va "security" plaginlarini vaqtincha o'chirib qo'ying

Sog'liqni saqlash tekshiruvida (muammolarni bartaraf etish rejimi) quyidagilarni o'chirib qo'ying:

  • JS/CSS ni minify/concat qilish (ayniqsa, agar u administrator maydoniga ta'sir qilsa)
  • REST/AJAX ni filtrlaydigan xavfsizlik plaginlari
  • parcha plaginlari (buzilgan parcha yetarli)

Har safar SMTP xabarini yuborish → Sozlamalar bo'limiga o'tib, sinab ko'ring. Muammo qayta paydo bo'lganda, siz aybdorni topdingiz.

4) Xotira chegaralarini tekshiring

Agar iz xotira haqida gapirsa:

  • o'sish memory_limit WordPress orqali emas, balki PHP tomonida (xosting paneli).
  • Tayanishdan saqlaning define('WP_MEMORY_LIMIT', ...) agar sizning xosting provayderingiz pastki chegarani majbur qilsa.

WordPress ma'lumotnomasi (xotira): WP_MEMORY_LIMIT

5) Doimiy havolalar / qayta yozish qoidalarini tekshiring (bu yerda kam uchraydi, lekin oldin ko'rilgan)

Agar Post SMTP ichki so'nggi nuqtalarni yuklasa va u 404 xatosini qaytarsa:

  1. Sozlamalar → Doimiy havolalar → Saqlash (o'zgartirmasdan)

Bu WordPressni qayta yozish qoidalarini qayta yaratishga majbur qiladi. Malumot: flush_rewrite_rules() (har bir sahifada chaqirilmasligi kerak).

6) Agar siz ma'lum bir ilgakda qulashni ko'rsangiz

Umumiy muammo: o'rtasidagi chalkashlik aksiyadorlik et filtrlarFiltr kerak qaytish Qiymat. Aksiya hech narsa qaytarmaydi.

Misol BEFORE (buzilgan: add_filter dan foydalanadi, lekin hech narsa qaytarmaydi):

<?php
add_filter('admin_menu', function () {
	// Mauvais : admin_menu est une action, pas un filtre.
	// Et on ne retourne rien : comportement imprévisible.
});

Misol AFTER (tuzatilgan):

<?php
add_action('admin_menu', function () {
	// Correct : admin_menu est une action.
});

Doc ilgaklari: Plagin APIsi: Hooklar

Umumiy xatolar va kamchiliklar

Alomat / xato Ehtimoliy sabab Tavsiya etilgan yechim
Siz parchani noto'g'ri faylga joylashtiryapsiz Kod ota-ona mavzusiga yoki o'zini yangilaydigan plaginga joylashtirilgan foydalaning a mu-plagin yoki maxsus plagin, hech qachon asosiy emas, hech qachon ota-ona mavzusi emas
Kod qo'shgandan keyin halokatli xato: “kutilmagan token” Nuqta-vergulni unutdingiz, qo'shimcha jingalak qavs, noto'g'ri yopilgan PHP tegi O'zgarishlarni FTP orqali qaytaring, sintaksisni to'g'rilang va ularni muharrir bilan tasdiqlang.
Jurnal bo'sh qoladi Ruxsatnomalar, WP_DEBUG noto'g'ri joylashtirilgan, xosting provayderi yozishga kirishni bloklamoqda Joylashuvni tekshiring wp-config.php + server jurnallari
U Sog'liqni saqlash tekshiruvi muammolarini bartaraf etish rejimida ishlaydi, lekin "odatda" emas. Plagin yoki mavzu ziddiyati Aybdorni topmaguningizcha, ularni muammolarni bartaraf etish rejimida birma-bir qayta yoqing.
Sozlamalar sahifasi yuklanadi, ammo yorliqlar bo'sh qoladi. REST/AJAX bloklangan, administrator minifatsiyasi Konsol + Tarmoq, minify adminni o'chirib qo'ying, ruxsat bering /wp-json/
"Ruxsat berilgan xotira hajmi tugadi" xatosi PHP xotira chegarasi juda past o'sish memory_limit server tomonida, keyin yana sinovdan o'tkazing
Siz zaxira nusxasisiz ishlab chiqarishda sinovdan o'tkazmoqdasiz. Yog'ingarchilik Variantlarni olib tashlashdan oldin klonlash bosqichi yoki hech bo'lmaganda ma'lumotlar bazasining zaxira nusxasi
Siz WordPress 6.9.4 da eski qo'llanmadan (PHP 7) foydalanmoqdasiz. Kod PHP 8.1+ bilan mos kelmaydi (TypeError, eskirgan funksiyalar) Turni tasdiqlash bilan moslashtiring, sanitize_*va to'g'ri ilgaklar

Variant / muqobil

Kodsiz usul: Post SMTP ni vaqtincha almashtiring

Muammoni aniqlayotganingizda elektron pochta xabarlarini yuborishni tiklashingiz kerak bo'lsa:

  • Boshqa obro'li SMTP plaginini o'rnating, uni sozlang va yuborishni sinab ko'ring.
  • Post qoldiring SMTP quyidagi muddat davomida o'chirib qo'yilgan: to'g'ri.

Ogohlantirish: bir vaqtning o'zida faollashtirilgan ikkita SMTP plagini ulanish uchun raqobatlashishi mumkin wp_mail va nomuvofiq xatti-harakatlarni keltirib chiqaradi (ikki marta yuborish, buzilgan sarlavhalar).

Keyinchalik ilg'or usul: plaginni o'zgartirmasdan wp_mail va ilgaklarni kuzatib boring

Dasturchilar uchun (yoki agar siz xizmat ko'rsatuvchi provayder bilan ishlayotgan bo'lsangiz), WordPress tomonida mu-plagin orqali elektron pochta xabarlarini yuborishni amalga oshirishingiz mumkin. Maqsad: SMTP posti to'g'ri o'zgartirilganligini tekshirish. wp_mail va agar xato administrator ekranidan yoki pochta quvuridan kelib chiqsa.

Qayerga yopishish kerak : /wp-content/mu-plugins/mail-trace.php

<?php
/**
 * Trace légère de wp_mail (ne loggez jamais des contenus sensibles en production).
 * À utiliser temporairement.
 */

add_filter('wp_mail', function ($args) {
	// $args contient to/subject/message/headers/attachments.
	// Risque sécurité : ne loggez pas le message complet si vous envoyez des données privées.
	$to = is_array($args['to']) ? implode(',', $args['to']) : (string) $args['to'];

	error_log('[MailTrace] wp_mail appelé vers: ' . $to . ' | sujet: ' . (string) $args['subject']);

	return $args; // Filtre = on doit retourner la valeur
}, 10, 1);

Rasmiy ma'lumotnoma: wp_mail filtri

Kelajakda bu muammodan qoching

  • Yangilanishlarni bosqichma-bosqich nusxada bajaring. Iloji bo'lsa. Sozlamalar sahifalari ko'pincha migratsiya xatosi birinchi bo'lib ko'rinadi.
  • PHP ni yangilab turing (Minimal 8.1+ tavsiya etiladi). Ko'pgina "g'alati" xatolar eskirgan PHP versiyasidan yoki etishmayotgan kengaytmalarning aralashmasidan kelib chiqadi.
  • admin_init da "global" parchalardan foydalanishdan saqlaning himoya choralarisiz. Har doim tasdiqlang:
    • kontekst (sahifa/ekran)
    • ruxsatnomalar (current_user_can())
    • variantlar turi (is_array(), is_string())
  • Administratorga minification qo'llamang Agar nima qilayotganingizni aniq bilmasangiz. Men JavaScript-ning birlashtirilganligi sababli sozlamalar sahifalarining uzilib qolishini ko'p ko'rganman.
  • Jurnallarni kuzatib boring : oson aylanish va kirishni ta'minlang. Halokatli xato deyarli har doim foydali ogohlantirishlar bilan birga keladi.

Administrator sahifalari uchun "Xavfsizlik" parchasi (qayta foydalanish mumkin bo'lgan shablon)

Ushbu model sizni barcha administrator sahifalarida kodni bajarishdan qutqaradi. Bu nizolar xavfini sezilarli darajada kamaytiradi.

Qayerga yopishish kerak : mu-plagin yoki maxsus plagin.

<?php
/**
 * Modèle : exécuter du code uniquement sur un écran admin précis.
 */

add_action('current_screen', function ($screen) {
	if (!($screen instanceof WP_Screen)) {
		return;
	}

	// Exemple : adaptez selon l’ID réel de l’écran (à lire via Query Monitor).
	if ($screen->id !== 'toplevel_page_postman') {
		return;
	}

	// Ici, votre code spécifique à la page Post SMTP.
	// Toujours valider les types et permissions.
	if (!current_user_can('manage_options')) {
		return;
	}
});

Malumot: Hozirgi ekranni kancalash

resurslari

tez-tez so'raladigan savollar

Post SMTP ni darhol o'chirib qo'yishim kerakmi?

Agar ommaviy sayt ishlayotgan bo'lsa va faqat Sozlamalar sahifasi ishlamay qolsa, avval jurnalni yozishni yoqib, muammoni aniqlash uchun Sog'liqni saqlash tekshiruvidan foydalanishingiz mumkin. Agar administrator paneli beqaror bo'lib qolsa (global xato), papka nomini o'zgartirish orqali plaginni FTP orqali o'chirib qo'ying. post-smtp.

Men “Jiddiy xatolik yuz berdi...” degan xabarni olaman, lekin tafsilotlar yo'q.

Faollashtirish WP_DEBUG_LOG (1-yechim) va shuningdek, server jurnallarini tekshiring. Ba'zi xosting rejalarida WordPressga yozishga ruxsat berilmaydi. wp-content ruxsatnomalar to'g'ri bo'lmaguncha.

Variantni o'chirish elektron pochta xabarlarimni buzadimi?

Ha, ehtimol: siz konfiguratsiyani qayta o'rnatasiz. Variantni oldindan saqlang (WP-CLI JSON eksporti yoki DB nusxasi), keyin xato tuzatilgandan so'ng interfeysda SMTPni qayta sozlang.

Divi 5 / Elementor / Avada bu halokatli xatoga olib kelishi mumkinmi?

To'g'ridan-to'g'ri emas. Lekin ularning ekotizimlari ko'pincha optimallashtirish plaginlari, xavfsizlik plaginlari yoki administrator qo'shimchalarini o'z ichiga oladi. Standart mavzuga ega Health Check testi tezkor aniqlash imkonini beradi.

Men PHP 8.0 dan foydalanmoqdaman va 8.1+ ga yangilashdan qo'rqaman.

2026-yilda WordPress 6.9.4 da PHP 8.1+ tavsiya etilgan asosiy versiya hisoblanadi. Ko'pgina plaginlar faqat shu versiyalardagi xatolarni tuzatadi. Sahnalashtirishga o'ting va muhim plaginlaringizni tekshiring.

Nima uchun xato faqat Sozlamalar sahifasida ko'rinadi?

Chunki ma'lum parametrlarni o'qiydigan/yozadigan, ma'lum fayllarni yuklaydigan yoki ma'lum bir foydalanuvchi interfeysini ishga tushiradigan kod faqat shu ekranda ishlaydi. Saytning qolgan qismi ishlashda davom etishi mumkin.

Men sotuvchi/autoload.php faylida "Sinf topilmadi" xatosini olaman

Bu ko'pincha to'liq bo'lmagan yangilanish (qisqartirilgan ZIP fayli, ruxsatnomalar bilan bog'liq muammolar, server antivirusi) tufayli yuzaga keladi. Eng tezkor yechim - bu wordpress.org saytidan plaginni toza qayta o'rnatish va iloji bo'lsa, kesh/OPcache-ni tozalash.

Buni tuzatish uchun plagin fayllarini o'zgartirishim kerakmi?

Bunga yo'l qo'ymang. Har qanday o'zgarishlar keyingi yangilanishda qayta yoziladi. Buning o'rniga, sababini aniqlayotganingizda, qayta o'rnatishga, parametrlarni tozalashga yoki vaqtinchalik mu-plagin himoyasidan foydalanishga harakat qiling.

Men endi administrator paneliga umuman kira olmayapman, nima qilishim kerak?

FTP orqali plagin papkasini vaqtincha qayta nomlash (post-smtppost-smtp.off) uni majburan o'chirish uchun. Keyin, WP_DEBUG_LOG ni qayta faollashtiring va diagnostikani davom ettiring.

Post SMTP qo'llab-quvvatlash xizmatiga yuborish uchun "minimal" miqdor qancha?

To'liq kuzatuv (maxfiy ma'lumotlarsiz), sizning versiyalaringiz (WordPress 6.9.4, PHP, Post SMTP), faol plaginlar ro'yxati va Sog'liqni saqlash tekshiruvi natijasi (boshqa barcha plaginlar o'chirilganda u ishlamayaptimi).