Ak ste už klikli na Nastavenia SMTP odosielania → a WordPress odpovieš s biela obrazovka alebo fatálna chybaMáte do činenia s typickým prípadom chyby spustenej iba v...admin, keď sa načíta stránka s nastaveniami.
Problém
Hlavný príznak: otvorenie stránky nastavení Post SMTP spôsobí fatálnu chybu PHP. Stránka často zostáva prístupná návštevníkom, ale administrátorské rozhranie na danej stránke zlyhá.
Tu sú niektoré realistické chybové hlásenia, ktoré som videl v protokoloch na stránkach WordPress 6.9.x (presné znenie sa líši v závislosti od poskytovateľa hostingu a režimu ladenia):
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 ...
Kde sa objavuje:
- admin najmä na /wp-admin/admin.php?page=poštár (alebo variant).
- AJAX Niekedy, počas načítavania karty, ak stránka Nastavenia volá admin-ajax.php.
- REST API : menej bežné, ale niektoré moderné pluginy načítavajú dáta cez /wp-json/.
Typické okolnosti:
- Fér po aktualizácii z Post SMTP alebo z WordPressu (tu WordPress 6.9.4).
- Po zmene Verzia PHP (prechod na verzie 8.1/8.2/8.3), čo sprísňuje obmedzenia „tichých“ chýb (TypeError).
- Po aktivácii doplnku zabezpečenia/cache, ktorý upravuje administrátorské nastavenia (minifikacia, blokovanie REST/AJAX, pravidlá WAF).
Pre koho je to určené: Ak ste začínajúci bloger, naučíte sa nájsť skutočnú stopu, izolovať konfliktPotom aplikujte bezpečnú opravu (bez dotyku jadra WordPressu). Na konci budete tiež vedieť, čo poskytnúť podpore (čisté protokoly, vykonané kroky, verzie).
Rýchle zhrnutie
- Aktivujte čistý diagnostický režim: WP_DEBUG + protokola získať presnú stopu chyba.
- Otestujte stránku Nastavenia pomocou Health Check (režim riešenia problémov) na potvrdenie konflikt pluginu/témy.
- Mnohé nehody vznikajú zMožnosti SMTP pre poškodené príspevky po aktualizácii: cielený reset cez WP-CLI alebo základňu.
- Chyby „Trieda sa nenašla“ často poukazujú na dodávateľ/automatické načítanie Neúplné: preinštalujte plugin (čisto) namiesto slepej záplaty.
- Chyby „Vyčerpaná pamäť“ sú vyriešené na strane servera (limit PHP) + zníženie preťaženia administrátora (nesprávna konfigurácia vyrovnávacej pamäte/minifikácie).
Príznaky
V závislosti od servera sa môže zobraziť:
- erreur 500 otvorením položky Post SMTP → Nastavenia.
- Biela obrazovka (WSOD) iba na tejto administrátorskej stránke.
- Správa "Na tejto webovej stránke sa vyskytla kritická chyba„+ E-mail z WordPressu s výňatkom zo sledovania.“
- Odosielanie kariet/sekcií SMTP, ktoré sa nenačítajú, s chybami v konzole (AJAX/REST blokovaný).
- Nastavenia sa nepodarilo uložiť (neplatné žiadne, povolenia alebo závažná chyba pri odoslaní).
Znaky, ktoré poukazujú na konkrétnu príčinu:
- Front-end funguje, ale administrátorské rozhranie padá: často a admin hook zneužitie alebo konflikt s pluginom „admin optimizer“.
- Funguje lokálne, ale nie v produkcii: často Verzia PHP, mémoireAlebo WAF (aplikačný firewall).
- Pokazilo sa to „hneď po aktualizácii“: nekompatibilné možnosti, dodávateľ automatického načítavania, vyrovnávacia pamäť OPcache.
Rýchla diagnostická tabuľka
| symptóm | Príčina pravdepodobná | overenie | Riešenie |
|---|---|---|---|
| Závažná chyba „array_merge()… zadaný reťazec“ | V poli sa očakávala možnosť SMTP, ale bola uložená ako reťazec | Sledujte sledovanie + skontrolujte možnosť v databáze | Riešenie 3 (resetovanie/konvertovanie možnosti) |
| „Trieda sa nenašla … vendor/autoload.php“ | Nesprávne nainštalovaný doplnok / neúplný dodávateľ | Porovnajte priečinok s pluginom a potom ho znova stiahnite z wordpress.org | Preinštalujte plugin čisto (a vymažte OPcache) |
| Chyba 500 bez podrobností | Zakázané protokoly / WAF / vyrovnávacia pamäť | Povoliť WP_DEBUG_LOG + protokoly servera | Riešenie 1 + zakázať minifikáciu vyrovnávacej pamäte/administrátora |
| Prázdna stránka nastavení, chyba konzoly JS | Konflikt JS (minifikacia) alebo REST/AJAX bol zablokovaný | Konzola prehliadača + karta Sieť | Zakázať minifikáciu administrátora, povoliť /wp-json/ |
| „Vyčerpaná povolená veľkosť pamäte“ | Nedostatok pamäte PHP pre administrátora | error_log + Stav lokality | Zvýšiť limit memory_limit (server) + obmedziť pluginy náročné na zdroje |
Prečo sa to deje?
Verzia pre začiatočníkov: Keď otvoríte stránku nastavení, WordPress načíta doplnok, jeho PHP súbory, jeho skripty a potom vykoná jeho kód na zobrazenie formulára. Ak čo i len jeden kúsok kódu narazí na neočakávané údaje (napr. možnosť uložená v nesprávnom formáte), PHP všetko zastaví s chybou fatálna chyba.
Tu je to, čo sa deje v zákulisí (technickejšia verzia):
- WordPress načíta pluginy a potom ich spustí hákyHook je „bod pripojenia“, kde môže plugin spustiť kód. Existujú akcie (vykonať) a filtre (upraviť hodnotu).
- Stránka Nastavenia prechádza admin_menu (pridaním ponuky) a potom načítaním obrazovky (často zatížení- $ hook_suffix), potom displej.
- Čítania po SMTP možnosti (uložené v databáze prostredníctvom
get_option()Ak typ nie je očakávaný (reťazec namiesto poľa), PHP 8.1+ spúšťa prísnejšie TypeErrors.
Príčiny zoradené od najčastejších po najvzácnejšie (na WordPress 6.9.4 / PHP 8.1+):
- Poškodená alebo staršia možnosť odosielania SMTP zo staršej verzie (neúplná migrácia).
- konflikt pluginov (cache/minify/admin optimizer/security), ktoré narúša AJAX/REST alebo mení poradie načítavania.
- Neúplná inštalácia plugin (chýbajúci priečinok dodávateľa, skrátené súbory po aktualizácii).
- Nepodporovaná verzia PHP (príliš staré) alebo naopak prísnejšie správanie (TypeError), ktoré odhaľuje skrytú chybu.
- Limit pamäte príliš nízke administrátorské práva, najmä na veľkých stránkach (WooCommerce, tvorcovia atď.).
Kompatibilita s nástrojmi na tvorbu stránok: Divi 5, Elementor a Avada vo všeobecnosti nemajú nič spoločné so stránkou nastavení pluginu. Podľa mojich skúseností však prispievajú nepriamo prostredníctvom doplnkov „optimalizácia pre správcov“ alebo globálnych skriptov vkladaných všade. Preto budeme testovať aj so štandardnou témou pomocou kontroly stavu.
Predpoklady pred začatím
- zabezpečiť Dokončené (súbory + databáza). Nevykonávajte tieto operácie priamo v produkcii bez bezpečnostnej siete.
- Prístup k:
- FTP/SFTP alebo správca súborov
- súbor
wp-config.php - V ideálnom prípade použite WP-CLI (voliteľné, ale veľmi praktické).
- Odporúčané verzie: WordPress 6.9.4 et PHP 8.1 +(Ak používate PHP 7.4/8.0, začnite migráciou: mnohé moderné nástroje už tieto verzie netestujú.)
- Užitočné nástroje:
- Monitor dopytov (PHP logy, hooky, požiadavky)
- Kontrola stavu a riešenie problémov (režim riešenia problémov bez vplyvu na návštevníkov)
- Stránka o zdraví na webovej stránke: Stav lokality (API)
Hlavné riziko : dotyk nesprávneho súboru (napr. priama úprava pluginu) a strata zmien v ďalšej aktualizácii. Pre úryvky použite mu-plugin („povinný plugin“) alebo vlastný plugin.
Riešenie 1: Izolujte závažnú chybu a získajte jej sledovanie (WP_DEBUG, protokoly, monitor dotazov)
Keď mi niekto povie „Nastavenia SMTP protokolu pošty spôsobujú fatálnu chybu“, vždy začnem tou istou vecou: získanie presná stopaBez tohto budete pluginy náhodne deaktivovať.
Krok 1 – Povoľte čisté protokolovanie PHP (bez zobrazovania chýb návštevníkom)
otvorené wp-config.php (v koreňovom adresári WordPressu) a pridajte/upravte tieto konštanty. Umiestnite ich pred riadok „To je všetko, prestaňte s úpravami!“
Kód PRED (bežné medzi začiatočníkmi: ladenie chýba alebo sa zobrazuje na obrazovke):
<?php
// ... contenu existant ...
define('WP_DEBUG', false);
// ...
Kód AFTER (odporúčaný pre diagnostiku v produkčnom prostredí bez úniku údajov):
<?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');
// ...
Prečo to pomáha: WordPress zapíše chyby do wp-content/debug.logToto je súbor, ktorý si prečítate po reprodukcii havárie.
Oficiálna referencia: Ladenie WordPressu (developer.wordpress.org)
Krok 2 – Reprodukujte chybu a načítajte trasovanie
- Otvorte administrátorský panel a kliknite na položku Post SMTP → Nastavenia (alebo ekvivalentnú položku).
- Ak je biela obrazovka: znova načítajte (niekedy sa protokol zapíše až pri druhom zásahu).
- otvorené
wp-content/debug.loga skopírujte:- riadok „Fatálna chyba…“
- 10–30 riadkov stopy zásobníka
Si debug.log nenapĺňa sa:
- Váš poskytovateľ hostingu môže zakázať prístup na zápis. Skontrolujte povolenia
wp-content. - Zobrazte si protokoly servera (Apache/Nginx) cez panel.
- Ak používate agresívnu vyrovnávaciu pamäť servera, vymažte ju.
Krok 3 – Potvrdenie konfliktu bez narušenia verejnej stránky (kontrola stavu)
Inštalovať/aktivovať Health Check, Potom :
- Nástroje → Stav lokality → karta pomôcť
- Aktivujte režim riešenia problémov (vašich návštevníkov to neovplyvní).
- Testovací príspevok SMTP → Nastavenia.
- Ak to funguje v režime riešenia problémov: v tomto režime postupne aktivujte doplnky, kým sa chyba nezopakuje.
Podľa mojich skúseností sú najčastejšie konflikty:
- minifikačné pluginy, ktoré ovplyvňujú administrátora
- bezpečnostné pluginy, ktoré blokujú
admin-ajax.phpou/wp-json/ - pluginy úryvkov, ktoré načítavajú poškodený kód
admin_init
Krok 4 – Skontrolujte konzolu prehliadača (ak sa stránka načítava iba do polovice)
Ak sa vám zobrazí rozhranie Post SMTP, ale s prázdnymi kartami:
- Otvorte DevTools → Konzola: vyhľadajte chyby JS
- Otvorte DevTools → Network: filter
admin-ajax.phpet/wp-json/
Ak sa v REST zobrazí chyba 403/401, často je to spôsobené bezpečnostným doplnkom alebo pravidlami servera. Pozrite si dokumentáciu k REST API: Príručka REST API
Riešenie 2: Oprava stránky nastavení, ktorá sa pokazí z dôvodu nesprávne načítaného administrátorského hooku
K tomu dochádza, keď závažná chyba nepochádza „priamo“ z SMTP príspevku, ale z úryvku alebo pluginu, ktorý na ňom beží. všetko stránky administrátora… a čo zlyhá iba na stránke Post SMTP (pretože na tejto obrazovke neexistuje očakávaná premenná).
Typické: kód „prispôsobenia administrátorom“, ktorý predpokladá, že $_GET['page'] je vždy definovaná alebo volá funkciu príliš skoro.
Rýchla diagnostika
- v
debug.logstopa ukazuje nafunctions.php(téma), doplnok úryvkov alebo doplnok „prispôsobenia pre správcu“. - Ak v režime kontroly stavu (riešenie problémov) prepnete späť na Twenty Twenty-Five (alebo štandardnú tému) a funguje to, problém je vo vašej téme alebo administrátorskom doplnku.
Príklad z reálneho sveta: príliš agresívny hook admin_init (PRED → PO)
Termín: akčná = háčik, ktorý vykonáva funkciu. Tu admin_init spúšťa sa pri každom administrátorskom zaťažení.
Kde sa tento kód nachádza? často v functions.php z témy (niekedy z podradenej témy) alebo v plugine úryvkov. Neupravujte rodičovská téma. Pracujte v podradenej téme alebo lepšie: v mu-plugine.
kód PRED (poškodený: predpokladá, že $_GET['page'] (existuje a manipuluje s možnosťami bez kontroly):
<?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);
}
});
Čo sa pokazí: ak get_option('postman_options') vráti reťazec (poškodená možnosť) alebo falseprístup $settings['force_smtp'] spôsobuje fatálnu chybu v PHP 8.1+.
Kód PO (opravené: kontrolujeme kontext + typ a pri každom načítaní sa nedotýkame možností čítania/zápisu):
<?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.
});
Prečo to rieši: Zabránite tak kódu tretej strany v „narušení“ obrazovky Post SMTP prístupom k neovereným údajom. A predovšetkým sa vyhnete zápisu do databázy pri každom načítaní administrátorských nastavení, čo je ďalší zdroj chýb.
Vytvorte mu-plugin (odporúčané)
Vytvoriť priečinok wp-content/mu-plugins ak neexistuje, tak súbor postman-admin-guard.php vnútri. WordPress automaticky načítava pluginy mu.
Oficiálny dokument: Pluginy, ktoré musíte použiť
Riešenie 3: Vyčistite poškodenú/nekompatibilnú možnosť po aktualizácii (WP-CLI / databáza)
Toto je zďaleka najnákladovo efektívnejšia príčina, ktorú treba riešiť, keď sledovanie uvádza chyby nasledujúceho typu:
array_merge(): Argument #2 must be of type array, string givenCannot access offset of type string on stringforeach() argument must be of type array|object, string given
Scenár: Post SMTP očakáva možnosť serializovanú ako pole, ale databáza obsahuje reťazec, niekedy z dôvodu:
- prerušená migrácia
- plugin pre ukladanie objektov do vyrovnávacej pamäte (Redis/Memcached), ktorý slúžil ako zastaraná hodnota
- úryvok, ktorý vytvoril
update_option()so zlou štruktúrou
Krok 1 – Identifikujte danú možnosť
V sledovaní vyhľadajte presný názov možnosti. Názvy sa líšia v závislosti od verzie, ale často uvidíte niečo podobné ako:
postman_optionspost_smtp_settingspostman_plugin_options
Ak to nevidíš, pozri sa dnu debug.log riadok s get_option alebo súbor „Nastavenia/Možnosti“.
Možnosť A – Čistý reset cez WP-CLI (najbezpečnejšia možnosť)
Ak máte WP-CLI:
1) Uveďte zoznam kandidátskych možností:
wp option list --search=postman --fields=option_name,autoload --format=table
wp option list --search=post_smtp --fields=option_name,autoload --format=table
2) Skontrolujte možnosť (aby ste skontrolovali, či ide o reťazec namiesto serializovaného poľa):
wp option get postman_options
3) Pred odstránením si možnosť uložte (veľmi užitočné, ak ju potrebujete obnoviť):
wp option get postman_options --format=json > /tmp/postman_options_backup.json
4) Odstráňte poškodenú možnosť (Post SMTP ju znova vytvorí s predvolenými hodnotami):
wp option delete postman_options
Dokumentácia k WP-CLI (referencia): Príkaz WP-CLI
Prečo je to účinné Odstránite toxické údaje, ktoré spúšťajú chybu. Doplnok sa reštartuje s čistou konfiguráciou a znova sa zobrazí stránka Nastavenia.
Možnosť B – Obnovenie cez phpMyAdmin (ak nemáte WP-CLI)
Uložte databázu Predtým. Potom:
- Otvorte stôl
wp_options(predpona sa môže líšiť). - Vyhľadajte možnosť (napr.
postman_options). - Skopírujte jeho hodnotu do textového súboru (záloha).
- Odstráňte riadok (alebo zmeňte
option_valueena:0:{}(ak vieš, čo robíš).
Poznámka: nahraďte za a:0:{} (Serializované prázdne pole) môže zabrániť niektorým inštalačným pracovným postupom, ale nie je to univerzálne. Odstránenie je často čistejšie.
Možnosť C – Dočasná záplata na „prežitie“ a prístup k administrátorskému panelu
Ak ste sa zasekli a potrebujete znova otvoriť administrátorský panel, aby ste deaktivovali doplnok alebo exportovali údaje, môžete pridať dočasnú ochranu pomocou mu-pluginu. Toto nie je „oprava“ pre doplnok, ale bezpečnostná sieť.
Kam sa prilepiť : /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);
}
});
Prečo to funguje: SMTP už nenarazí na „nemožnú“ hodnotu a bude môcť obnoviť svoje predvolené nastavenia. Riziko: Stratíte svoju konfiguráciu SMTP (preto je dôležité vopred si vytvoriť zálohu cez WP-CLI/DB).
Odkaz na get_option() : získať_možnosť()
Kontroly po korekcii
Po odstránení príčiny overte jej príčinu pomocou jednoduchého kontrolného zoznamu:
- otvorené Nastavenia SMTP odosielania → Stránka by sa mala zobraziť bez chyby.
- otvorené
wp-content/debug.log: už žiadna „fatálna chyba“. - Odošlite testovací e-mail z Post SMTP (alebo z kontaktného formulára).
- Skontrolujte, či odosielanie funguje aj cez WP-Cron ak máte naplánované odosielanie e-mailov (newslettery, WooCommerce).
- Potom vypnite režim ladenia (alebo ho nechajte zapnutý).
WP_DEBUG_LOGaktívne iba v testovacom prostredí).
Ak máte vyrovnávaciu pamäť (plugin, server, CDN), vymažte ju:
- doplnok pre vyrovnávaciu pamäť (vyrovnávacia pamäť stránky)
- vyrovnávacia pamäť servera (mikrovyrovnávacia pamäť Varnish / Nginx)
- OPcache (ak to váš poskytovateľ hostingu umožňuje) – veľmi užitočné po preinštalovaní pluginu
Ak to stále nefunguje
Keď stránka s nastaveniami neustále padá, dodržiavam pevný postup. Vyhýba sa tak zbytočnému dohadovaniu sa.
1) Čisto preinštalujte Post SMTP (ak je to možné, bez straty konfigurácie)
Neúplná inštalácia (chýbajúci dodávateľ) spôsobuje chyby „Trieda sa nenašla“. Postup:
- Uložte možnosti (ak je to možné, exportujte JSON z WP-CLI).
- Zakázať SMTP odosielania.
- Odstrániť priečinok
/wp-content/plugins/post-smtp/(iba tento plugin). - Preinštalujte z WordPress.org (príspevok SMTP) (nie z pochybného ZIP súboru).
- Znova aktivujte a otestujte stránku Nastavenia.
2) Potvrďte verziu PHP a rozšírenia
- V časti Nástroje → Stav stránky začiarknite políčko PHP. Cieľ 8.1+.
- Skontrolujte rozšírenia:
openssl,mbstring,curlPost SMTP naň často nepriamo závisí.
Dokumentácia PHP (napr. OpenSSL): PHP OpenSSL
3) Dočasne vypnite pluginy „admin“ a „security“
V režime Kontrola stavu (režim riešenia problémov) vypnite:
- minifikovať/zjednotiť JS/CSS (najmä ak to ovplyvňuje administrátorskú oblasť)
- bezpečnostné pluginy, ktoré filtrujú REST/AJAX
- pluginy pre úryvky kódu (stačí aj poškodený úryvok kódu)
Vždy to otestujte v časti Post SMTP → Nastavenia. Keď sa problém vráti, našli ste vinníka.
4) Skontrolujte limity pamäte
Ak stopa spomína pamäť:
- zvýšiť
memory_limitna strane PHP (hostingový panel) a nie cez WordPress. - Vyhnite sa spoliehaniu sa na
define('WP_MEMORY_LIMIT', ...)ak váš poskytovateľ hostingu vyžaduje nižší limit.
Referencia WordPressu (pamäť): WP_MEMORY_LIMIT
5) Skontrolujte pravidlá trvalých odkazov / prepisovania (zriedkavé, ale už som to videl)
Ak Post SMTP načíta interné koncové body a vráti chybu 404:
- Nastavenia → Trvalé odkazy → Uložiť (bez zmien)
Toto núti WordPress regenerovať pravidlá prepisovania. Referencia: flush_rewrite_rules() (nevyvoláva sa na každej stránke).
6) Ak uvidíte pád na konkrétnom háku
Bežný problém: zámena medzi akcie et filtreFilter musí spiatočný Hodnota. Akcia nič nevracia.
Príklad PRED (nefunkčný: používa add_filter, ale nič nevracia):
<?php
add_filter('admin_menu', function () {
// Mauvais : admin_menu est une action, pas un filtre.
// Et on ne retourne rien : comportement imprévisible.
});
Príklad PO (opravené):
<?php
add_action('admin_menu', function () {
// Correct : admin_menu est une action.
});
Hooky dokumentov: API doplnku: Hooky
Časté úskalia a chyby
| Príznak / chyba | Príčina pravdepodobná | Odporúčané riešenie |
|---|---|---|
| Vkladáte úryvok kódu do nesprávneho súboru | Kód umiestnený v nadradenej téme alebo v plugine, ktorý sa sám aktualizuje | použite mu-plugin alebo vlastný plugin, nikdy nie jadro, nikdy nie nadradená téma |
| Závažná chyba po pridaní kódu: „neočakávaný token“ | Zabudnutá bodkočiarka, nadbytočná zložená zátvorka, nesprávne uzavretý PHP tag | Vráťte zmeny cez FTP, opravte syntax a overte ich pomocou editora. |
| Denník zostáva prázdny | Povolenia, WP_DEBUG je nesprávne umiestnený, poskytovateľ hostingu blokuje prístup na zápis | Skontrolujte si miesto v wp-config.php + protokoly servera |
| Funguje to v režime riešenia problémov s kontrolou stavu, ale nie „normálne“. | Konflikt pluginu alebo témy | Postupne ich aktivujte v režime riešenia problémov, kým nenájdete vinníka. |
| Stránka s nastaveniami sa načíta, ale karty zostanú prázdne. | REST/AJAX blokovaný, minimalizácia administrátorom | Konzola + Sieť, vypnúť minifikáciu administrátora, povoliť /wp-json/ |
| Chyba „Vyčerpaná povolená veľkosť pamäte“ | Limit pamäte PHP je príliš nízky | zvýšiť memory_limit na strane servera, potom otestujte znova |
| Testujete v produkcii bez zálohy. | Zrážky | Klonovanie stagingu alebo aspoň záloha databázy pred odstránením volieb |
| Používate starý tutoriál (PHP 7) na WordPresse 6.9.4 | Kód nie je kompatibilný s PHP 8.1+ (TypeError, zastarané funkcie) | Prispôsobiť s overením typu, sanitize_*a správne háčiky |
Variant / alternatíva
Metóda bez kódu: dočasné nahradenie Post SMTP
Ak je absolútne nevyhnutné obnoviť odosielanie e-mailov počas diagnostikovania problému:
- Nainštalujte si ďalší renomovaný SMTP plugin, nakonfigurujte ho a otestujte odosielanie.
- Nechajte SMTP odosielania vypnutý počas trvania korektné.
Upozornenie: dva SMTP pluginy aktivované súčasne môžu súťažiť o hook wp_mail a spôsobovať nekonzistentné správanie (dvojité odosielanie, poškodené hlavičky).
Pokročilejšia metóda: sledovanie wp_mail a hookov bez úpravy pluginu
Pre vývojárov (alebo ak spolupracujete s poskytovateľom služieb) môžete implementovať odosielanie e-mailov na strane WordPressu pomocou mu-pluginu. Cieľ: overiť, či je SMTP príspevok správne upravený. wp_mail a či chyba pochádza z administrátorskej obrazovky alebo z poštového kanála.
Kam sa prilepiť : /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);
Oficiálna referencia: filter wp_mail
Vyhnite sa tomuto problému v budúcnosti
- Vykonajte aktualizácie na pracovnej kópii. Keď je to možné. Stránky nastavení sú často prvým miestom, kde sa objaví chyba migrácie.
- Udržiavajte PHP aktuálne (Odporúča sa minimálne 8.1 alebo viac). Mnoho „zvláštnych“ chýb pochádza zo zastaranej verzie PHP alebo z kombinácie chýbajúcich rozšírení.
- Nepoužívajte „globálne“ úryvky kódu v admin_init bez záruk. Vždy overte:
- kontext (stránka/obrazovka)
- povolenia (
current_user_can()) - typ možností (
is_array(),is_string())
- Neaplikovať minifikáciu na administrátora Pokiaľ presne neviete, čo robíte. Často som videl stránky nastavení, ktoré sa kvôli zreťazeniu JavaScriptu pokazili.
- Monitorovanie protokolov : zachovať jednoduché otáčanie a prístup. Fatálnej chybe takmer vždy predchádzajú užitočné varovania.
Úryvok kódu „Safeguard“ pre administrátorské stránky (opakovane použiteľná šablóna)
Tento model vám ušetrí nutnosť spúšťať kód na všetkých administrátorských stránkach. Výrazne znižuje riziko konfliktov.
Kam sa prilepiť mu-plugin alebo vlastný plugin.
<?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;
}
});
Referencia: Zapojiť current_screen
zdroje
- Ladenie WordPressu (WP_DEBUG, protokoly)
- Kontrola stavu a riešenie problémov
- Monitor dopytov
- API plugin: Hooky (akcie a filtre)
- get_option() (odkaz)
- WP-CLI: Príkazy volieb
- PHP: Chyby a výnimky
- Oficiálna stránka SMTP pre príspevok (wordpress.org)
- WordPress Core Trac (sledovanie chýb)
- Zrkadlo WordPressu na GitHub (na porovnanie základného kódu)
často kladené otázky
Mám hneď vypnúť Post SMTP?
Ak verejná stránka funguje a padá iba stránka Nastavenia, môžete najprv povoliť protokolovanie a pomocou Kontroly stavu izolovať problém. Ak sa administrátorský panel stane nestabilným (globálna chyba), deaktivujte doplnok cez FTP premenovaním priečinka. post-smtp.
Dostávam hlásenie „Vyskytla sa kritická chyba...“, ale žiadne podrobnosti.
umožniť WP_DEBUG_LOG (Riešenie 1) a tiež skontrolujte protokoly servera. Na niektorých hostingových plánoch WordPress nemá povolený zápis do wp-content pokiaľ nie sú povolenia správne.
Zničí odstránenie možnosti moje e-maily?
Áno, potenciálne: resetujete konfiguráciu. Vopred uložte možnosť (export JSON z WP-CLI alebo kopírovanie DB) a po oprave chyby znova nakonfigurujte SMTP v rozhraní.
Môže Divi 5 / Elementor / Avada spôsobiť túto fatálnu chybu?
Nie priamo. Ich ekosystémy však často zahŕňajú optimalizačné pluginy, bezpečnostné pluginy alebo administrátorské doplnky. Test kontroly stavu so štandardnou témou umožňuje rýchle určenie.
Používam PHP 8.0 a bojím sa prejsť na 8.1+
Na WordPresse 6.9.4 v roku 2026 je odporúčanou základnou verziou PHP 8.1+. Mnoho pluginov opravuje chyby iba v týchto verziách. Prepnite na staging a skontrolujte kritické pluginy.
Prečo sa chyba zobrazuje iba na stránke Nastavenia?
Pretože kód, ktorý číta/zapisuje určité možnosti, načítava určité súbory alebo inicializuje konkrétne používateľské rozhranie, beží iba na tejto obrazovke. Zvyšok stránky môže naďalej bežať.
V súbore vendor/autoload.php sa mi zobrazuje chyba „Trieda sa nenašla“.
Často je to spôsobené neúplnou aktualizáciou (skrátený ZIP súbor, problémy s oprávneniami, antivírusový program na serveri). Najrýchlejším riešením je čistá preinštalácia pluginu z wordpress.org a následné vyčistenie vyrovnávacej pamäte/OPcache, ak je to možné.
Musím upraviť súbory pluginu, aby som to opravil?
Vyhnite sa tomu. Všetky zmeny budú v ďalšej aktualizácii prepísané. Namiesto toho skúste preinštalovať, vymazať možnosti alebo použiť dočasné zabezpečenie mu-pluginom, kým nezistíte príčinu.
Už vôbec nemám prístup k administrátorskému panelu, čo mám robiť?
Dočasne premenujte priečinok s pluginom cez FTP (post-smtp → post-smtp.off) na vynútenie jeho deaktivácie. Potom znova aktivujte WP_DEBUG_LOG a obnovte diagnostiku.
Aká je „minimálna“ suma, ktorú treba poslať podpore Post SMTP?
Kompletná trasa (bez citlivých údajov), vaše verzie (WordPress 6.9.4, PHP, Post SMTP), zoznam aktívnych pluginov a výsledok testu kontroly stavu (či sa pokazí, aj keď sú všetky ostatné pluginy deaktivované).