Si vous avez déjà clique sur Настройки SMTP → Настройки и WordPress вы ответите белый экран или фатальная ошибкаВы имеете дело с типичным случаем ошибки, проявляющейся только в...и, когда загрузится страница настроек.

проблема

Основной симптом: при открытии страницы настроек SMTP-сервера возникает критическая ошибка PHP. Часто сайт остается доступным для посетителей, но административный интерфейс аварийно завершает работу именно на этой странице.

Вот несколько реалистичных сообщений об ошибках, которые я видел в логах сайтов на WordPress 6.9.x (точная формулировка варьируется в зависимости от хостинг-провайдера и режима отладки):

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 ...

Где это появляется:

  • Админ особенно на /wp-admin/admin.php?page=postman (или вариант).
  • AJAX Иногда во время загрузки вкладки, если страница настроек вызывает Админ-ajax.php.
  • REST API Менее распространённый, но некоторые современные плагины загружают данные через /wp-json/.

Типичные обстоятельства:

  • просто после обновления из Post SMTP или из WordPress (здесь WordPress 6.9.4).
  • После изменения Версия PHP (переход к версиям 8.1/8.2/8.3), который ужесточает правила обработки «тихих» ошибок (TypeError).
  • После активации плагина безопасности/кэширования, изменяющего административную панель (минификация, блокировка REST/AJAX, правила WAF).

Для кого это предназначено: Если вы начинающий блогер, вы научитесь... восстановить истинную трассировку, изолировать конфликтЗатем примените безопасное исправление (не затрагивая ядро ​​WordPress). В итоге вы также будете знать, что предоставить в службу поддержки (чистые логи, предпринятые шаги, версии).

Краткое резюме

  • Активируйте чистый диагностический режим: WP_DEBUG + логи получить точный след ошибка.
  • Проверьте страницу настроек с помощью Проверка работоспособности (Режим устранения неполадок) для подтверждения конфликт плагина/темы.
  • Многие аварии начинаются из-заПовреждены параметры SMTP после выполнения команды. После обновления: целевой сброс через WP-CLI или базовую версию.
  • Ошибки типа "Класс не найден" часто указывают на поставщик/автоматическая загрузка Неполное решение: переустановите плагин (чистым способом), а не используйте патч вслепую.
  • Ошибки "Исчерпана память" устраняются на стороне сервера (лимит PHP) + снижается перегрузка административной панели (неправильная настройка кэша/минификации).

Симптомы

В зависимости от сервера вы можете увидеть следующее:

  • ERREUR 500 открыв Post SMTP → Настройки.
  • Белый экран (WSOD) только на этой странице администратора.
  • Сообщение "На этом сайте произошла критическая ошибка." + Электронное письмо WordPress с фрагментом трассировки."
  • Прикрепите вкладки/разделы SMTP, которые не загружаются, и выведите ошибки в консоли (заблокированы AJAX/REST).
  • Не удалось сохранить настройки (неверное значение «нет», недопустимые разрешения или критическая ошибка при отправке).

Признаки, указывающие на конкретную причину:

  • Фронтальная часть работает, но административный интерфейс часто дает сбои: хук администратора Неправильное использование или конфликт с плагином «оптимизатор администратора».
  • Это работает локально, но не в производственной среде: часто Версия PHP, запискаили WAF (брандмауэр приложений).
  • Проблема возникла «сразу после обновления»: несовместимые параметры, поставщик автозагрузчика, кэш OPcache.

Диаграмма быстрой диагностики

симптом Причина вероятна проверка Решение
Фатальная ошибка «array_merge()… передана строка» Ожидалось, что параметр SMTP будет представлен в виде массива, но хранится как строка. Просмотрите трассировку и проверьте параметр в базе данных. Решение 3 (сброс/преобразование параметра)
«Класс не найден… vendor/autoload.php» Неправильно установлен плагин / неполный список поставщиков Сравните содержимое папки плагина, затем скачайте его заново с сайта wordpress.org. Переустановите плагин без ошибок (и очистите кэш OPcache).
Ошибка 500 без подробностей. Журналы отключены / WAF / кэш Включите WP_DEBUG_LOG + журналы сервера. Решение 1 + отключить кэширование/минификацию администратора
Пустая страница настроек, ошибка в консоли JavaScript. Конфликт JavaScript (минификация) или REST/AJAX заблокирован Консоль браузера + вкладка «Сеть» Отключить минификацию административной панели, разрешить /wp-json/
«Исчерпан допустимый объем памяти» Недостаточно памяти PHP для административной панели. error_log + Состояние сайта Увеличьте memory_limit (сервер) + ограничьте количество ресурсоемких плагинов.

Почему это происходит

Версия для начинающих: При открытии страницы настроек WordPress загружает плагин, его PHP-файлы, скрипты, а затем выполняет его код для отображения формы. Если хотя бы один фрагмент кода обнаруживает неожиданные данные (например, параметр, сохраненный в неправильном формате), PHP останавливает весь процесс с помощью команды. фатальная ошибка.

Вот что происходит за кулисами (более техническая версия):

  • WordPress загружает плагины, а затем запускает крючкиХук — это «точка прикрепления», через которую плагин может выполнять код. Существуют следующие варианты: действия (выполнить) и фильтры на (изменить значение).
  • На странице настроек осуществляется следующий переход: admin_menu (добавление меню), затем путем загрузки экрана (часто) load- $ hook_suffix), затем дисплей.
  • После чтения SMTP-файлов кредита (хранится в базе данных через) get_option()Если тип не соответствует ожидаемому (строка вместо массива), PHP 8.1 и выше выдает более строгие ошибки TypeError.

Причины, ранжированные от наиболее часто встречающихся к наименее часто встречающимся (на WordPress 6.9.4 / PHP 8.1+):

  1. Поврежденный или устаревший параметр SMTP post с более старой версии (неполная миграция).
  2. конфликт плагинов (кэширование/минификация/оптимизатор администрирования/безопасность), которое нарушает работу AJAX/REST или изменяет порядок загрузки.
  3. Неполная установка плагин (отсутствует папка vendor, файлы после обновления усечены).
  4. Неподдерживаемая версия PHP (слишком старая версия) или, наоборот, более строгое поведение (TypeError), которое выявляет скрытую ошибку.
  5. Ограничение памяти Слишком низкий уровень доступа в административной панели, особенно на крупных сайтах (WooCommerce, конструкторы сайтов и т. д.).

Совместимость с конструкторами страниц: Divi 5, Elementor и Avada, как правило, не имеют отношения к странице настроек плагина. Однако, по моему опыту, они косвенно влияют на совместимость через дополнения для «оптимизации администрирования» или глобальные скрипты, внедряемые повсюду. Поэтому мы также протестируем плагин со стандартной темой, используя проверку работоспособности (Health Check).

Предварительные условия перед началом обучения

  • охрана Выполните все операции (с файлами и базой данных). Не выполняйте эти операции непосредственно в производственной среде без мер безопасности.
  • Доступ к:
    • FTP/SFTP или файловый менеджер
    • файл wp-config.php
    • В идеале используйте WP-CLI (необязательно, но очень удобно).
  • Рекомендуемые версии: WordPress 6.9.4 et PHP + 8.1(Если вы используете PHP 7.4/8.0, начните с миграции: многие современные инструменты больше не тестируют эти версии.)
  • Полезные инструменты:

Основной риск : изменение не того файла (например, прямое изменение плагина) и потеря изменений при следующем обновлении. Для фрагментов кода используйте мю-плагин (плагин, который обязательно нужно использовать) или пользовательский плагин.


Решение 1: Выявить критическую ошибку и получить трассировку (WP_DEBUG, логи, монитор запросов).

Когда мне говорят: «Настройки SMTP после установки вызывают фатальную ошибку», я всегда начинаю с одного и того же: получения точный следБез этого вы будете отключать плагины случайным образом.

Шаг 1 — Включите корректное логирование PHP (без отображения ошибок посетителям).

открытый wp-config.php (в корневом каталоге WordPress) и добавьте/скорректируйте эти константы. Разместите их. перед тем фраза «Вот и всё, прекратите редактировать!»

ДО выполнения кода (распространенная ошибка среди начинающих: отладочная информация отсутствует или отображается на экране):

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

define('WP_DEBUG', false);

// ...

Код AFTER (рекомендуется для диагностики в производственной среде без утечки данных):

<?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');

// ...

Почему это помогает: WordPress будет записывать ошибки в... wp-content/debug.logЭто файл, который вы прочитаете после воспроизведения сбоя.

Официальная справочная информация: Отладка WordPress (developer.wordpress.org)

Шаг 2 — Воспроизведите ошибку и получите трассировку.

  1. Откройте панель администратора, нажмите «Post SMTP» → «Настройки» (или аналогичную запись).
  2. Если экран белый: перезагрузите страницу один раз (иногда лог записывается при втором нажатии).
  3. открытый wp-content/debug.log и скопировать:
    • строка «Роковая ошибка…»
    • 10–30 строк трассировки стека

Si debug.log не заполняется:

  • Ваш хостинг-провайдер может отключить доступ на запись. Проверьте права доступа. wp-content.
  • Просматривайте журналы сервера (Apache/Nginx) через панель управления.
  • Если вы используете агрессивный серверный кэш, очистите его.

Шаг 3 — Подтверждение конфликта без нарушения работы общедоступного сайта (Проверка работоспособности)

Установить/активировать Проверка работоспособности, затем:

  1. Инструменты → Состояние сайта → вкладка помощь
  2. Активируйте режим устранения неполадок (это не затронет ваших посетителей).
  3. Проверка SMTP-соединения → Настройки.
  4. Если в режиме устранения неполадок все работает: активируйте плагины по одному в этом режиме, пока ошибка не воспроизведется.

По моему опыту, наиболее частые конфликты следующие:

  • Плагины минификации, влияющие на административную панель
  • плагины безопасности, которые блокируют admin-ajax.php ou /wp-json/
  • плагины для загрузки неработающего кода admin_init

Шаг 4 — Проверьте консоль браузера (если страница загружается только наполовину).

Если вы видите интерфейс отправки SMTP-сообщений, но с пустыми вкладками:

  • Откройте Инструменты разработчика → Консоль: найдите ошибки JavaScript.
  • Откройте DevTools → Сеть: фильтр. admin-ajax.php et /wp-json/

Если вы видите ошибки 403/401 при использовании REST API, это часто связано с плагином безопасности или правилами сервера. См. документацию по REST API: Справочник по REST API


Решение 2: Исправить страницу настроек, которая не работает из-за некорректно загруженного административного хука.

Это происходит, когда фатальная ошибка возникает не «напрямую» из SMTP-запроса, а из фрагмента кода или плагина, работающего на нем. все Страницы администрирования… и ошибка возникает только на странице отправки SMTP-запроса (поскольку ожидаемая переменная на этом экране отсутствует).

Типичный пример: код «настройки административной панели», который предполагает, что $_GET['page'] Функция всегда определена, или же вызывается слишком рано.

Диагностика быстрого действия

  • В debug.logслед указывает на functions.php (тема оформления), плагин для создания фрагментов кода или плагин для «настройки административной панели».
  • В режиме проверки работоспособности (устранения неполадок), если после переключения обратно на тему Twenty Twenty-Five (или стандартную тему) все работает, проблема либо в вашей теме, либо в административном дополнении.

Пример из реальной жизни: чрезмерно агрессивный хук admin_init (ДО → ПОСЛЕ)

Срок : действие = хук, который выполняет функцию. Здесь admin_init Запускается при каждой загрузке административной панели.

Где находится этот код? часто в functions.php из темы оформления (иногда дочерней темы) или в плагине для создания фрагментов кода. Не вносить изменений родительская тема. Работайте в дочерней теме или, что еще лучше, в mu-плагине.

ДО кода (неверно: предполагается, что $_GET['page'] (существует и изменяет параметры без проверки):

<?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);
	}
});

Что ломается: если get_option('postman_options') возвращает string (искаженный вариант) или false, доступ $settings['force_smtp'] вызывает фатальную ошибку в PHP 8.1 и выше.

Код ПОСЛЕ (исправлено: мы проверяем контекст и тип, и не изменяем параметры чтения/записи при каждой загрузке):

<?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.
});

Почему это решает проблему: вы предотвращаете «сбой» в работе экрана отправки SMTP-сообщения сторонним кодом из-за доступа к непроверенным данным. И самое главное, вы избегаете записи в базу данных при каждой загрузке административной панели, что является еще одним источником ошибок.

Создайте mu-плагин (рекомендуется).

Создайте папку wp-content/mu-plugins Если его нет, то файл postman-admin-guard.php внутри. Плагины mu загружаются WordPress автоматически.

Официальный документ: Обязательные плагины


Решение 3: Удаление поврежденной/несовместимой опции после обновления (WP-CLI / база данных)

Это, безусловно, наиболее экономически эффективная причина для устранения неполадок, когда в трассировке указываются ошибки следующего типа:

  • 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

Ситуация: Post SMTP ожидает параметр, сериализованный в виде массива, но база данных содержит строку, иногда по следующим причинам:

  • прерванная миграция
  • Плагин кэширования объектов (Redis/Memcached), который выдал устаревшее значение.
  • фрагмент, который создал update_option() с плохой структурой

Шаг 1 — Определите рассматриваемый вариант.

В трассировке найдите точное название параметра. Названия различаются в зависимости от версии, но часто вы увидите что-то похожее на:

  • postman_options
  • post_smtp_settings
  • postman_plugin_options

Если вы этого не видите, посмотрите внутри. debug.log линия с get_option или файл «Настройки/Параметры».

Вариант А — Полная перезагрузка через WP-CLI (самый безопасный вариант)

Если у вас установлен WP-CLI:

1) Перечислите варианты:

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

2) Проверьте параметр (чтобы убедиться, что это строка, а не сериализованный массив):

wp option get postman_options

3) Сохраните параметр перед удалением (очень полезно, если вам потребуется его восстановить):

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

4) Удалите поврежденный параметр (Post SMTP создаст его заново со значениями по умолчанию):

wp option delete postman_options

Документация WP-CLI (справочник): Команда опции WP-CLI

Почему это эффективно Вы удаляете некорректные данные, вызывающие ошибку. Плагин перезапускается с чистой конфигурацией, и страница настроек снова отображается.

Вариант B — Сброс через phpMyAdmin (если у вас нет WP-CLI)

Сохраните базу данных Раньше. Тогда:

  1. Откройте стол wp_options (префикс может отличаться).
  2. Найдите нужный вариант (например, postman_options).
  3. Скопируйте его значение в текстовый файл (для резервного копирования).
  4. Удалите строку (или измените) option_value en a:0:{} (если вы знаете, что делаете).

Заменить на a:0:{} (Сериализованный пустой массив) может позволить избежать некоторых этапов установки, но это не универсальное решение. Удаление часто оказывается более чистым вариантом.

Вариант C — Временное решение для «выживания» и доступа к панели администратора.

Если вы столкнулись с проблемой и вам просто нужно снова открыть панель администратора, чтобы отключить плагин или экспортировать данные, вы можете добавить временную защиту с помощью mu-плагина. Это не "исправление" для плагина, а страховка.

Куда вставить : /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);
	}
});

Почему это работает: SMTP больше не будет сталкиваться с «невозможными» значениями и сможет восстановить свои настройки по умолчанию. Риск: Вы потеряете конфигурацию SMTP (поэтому важно предварительно сделать резервную копию через WP-CLI/DB).

Ссылка на get_option() : get_option ()


Проверки после внесения исправлений

После устранения причины проверьте результат с помощью простого контрольного списка:

  1. открытый Настройки SMTP → Настройки Страница должна отображаться без ошибок.
  2. открытый wp-content/debug.log Больше никаких «фатальных ошибок».
  3. Отправьте тестовое письмо через Post SMTP (или из контактной формы).
  4. Убедитесь, что отправка также работает через WP-Cron если у вас запланированы рассылки (информационные бюллетени, WooCommerce).
  5. Затем отключите режим отладки (или оставьте его включенным). WP_DEBUG_LOG (активно только в тестовой среде).

Если у вас есть кэш (плагина, сервера, CDN), очистите его:

  • Плагин кэширования (кэширование страниц)
  • Кэш сервера (микрокэш Varnish / Nginx)
  • OPcache (если ваш хостинг-провайдер это разрешает) — очень полезен после переустановки плагина.

Если это всё ещё не поможет

Когда страница настроек постоянно зависает, я следую установленной процедуре. Это позволяет избежать ненужных переключений.

1) Выполните чистую переустановку Post SMTP (по возможности без потери конфигурации).

Неполная установка (отсутствует поставщик) приводит к ошибкам "Класс не найден". Процедура:

  1. Сохраните параметры (по возможности экспортируйте в JSON через WP-CLI).
  2. Отключить Post SMTP.
  3. Удалить папку /wp-content/plugins/post-smtp/ (только этот плагин).
  4. Переустановить из WordPress.org (SMTP Post) (не из сомнительного ZIP-файла).
  5. Активируйте и протестируйте страницу настроек.

2) Подтвердите версию PHP и расширения.

  • В меню «Инструменты» → «Состояние сайта» установите флажок «PHP. Целевой объект». 8.1+.
  • Проверьте расширения: openssl, mbstring, curlЗачастую Post SMTP косвенно зависит от этого.

Документация PHP (например, OpenSSL): PHP OpenSSL

3) Временно отключите плагины «admin» и «security».

В режиме проверки работоспособности (режим устранения неполадок) отключите:

  • Сокращение/объединение JS/CSS (особенно если это затрагивает административную панель).
  • Плагины безопасности, фильтрующие REST/AJAX
  • Плагины для создания сниппетов (достаточно даже неработающего сниппета)

Каждый раз проверяйте, переходя в раздел «Отправить SMTP» → «Настройки». Если проблема повторится, значит, вы нашли причину.

4) Проверьте ограничения памяти.

Если в трассировке упоминается память:

  • Augmentez memory_limit на стороне PHP (панель хостинга), а не через WordPress.
  • Избегайте чрезмерной зависимости от define('WP_MEMORY_LIMIT', ...) если ваш хостинг-провайдер устанавливает более низкий лимит.

Справочник по WordPress (по памяти): WP_MEMORY_LIMIT

5) Проверьте постоянные ссылки / правила перезаписи (здесь это редкость, но встречалось и раньше).

Если Post SMTP загружает внутренние конечные точки и возвращает ошибку 404:

  1. Настройки → Постоянные ссылки → Сохранить (без изменений)

Это заставляет WordPress заново генерировать правила перезаписи. Ссылка: flush_rewrite_rules() (не следует повторять это на каждой странице).

6) Если вы видите сбой на конкретном участке маршрута.

Распространенная проблема: путаница между действия et фильтры наФильтр должен возвращение Это значение. Операция «Акция» ничего не возвращает.

Пример ДО (не работает: используется add_filter, но ничего не возвращает):

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

Пример ПОСЛЕ (исправлено):

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

Крючки для документов: API плагинов: Хуки

Распространенные ошибки и ловушки

Симптом / ошибка Причина вероятна Рекомендуемое решение
Вы вставляете фрагмент кода не в тот файл. Код размещается в родительской теме или в плагине, который обновляется сам по себе. Используйте мю-плагин или пользовательский плагин, никогда не основной, никогда не родительскую тему.
Фатальная ошибка после добавления кода: «неожиданный токен» Забытая точка с запятой, лишняя фигурная скобка, неправильно закрытый тег PHP Отмените изменения через FTP, исправьте синтаксис и проверьте их в текстовом редакторе.
Журнал остается пустым. Права доступа, ошибка WP_DEBUG, хостинг-провайдер блокирует доступ на запись. Проверьте местоположение в wp-config.php + журналы сервера
В режиме проверки работоспособности это работает, но не в «обычном» режиме. Конфликт плагина или темы В режиме устранения неполадок активируйте их по одному, пока не найдете виновника.
Страница настроек загружается, но вкладки остаются пустыми. REST/AJAX заблокирован, минимизация административной панели. Консоль + Сеть, отключить минификацию администратора, разрешить /wp-json/
Ошибка «Исчерпан допустимый объем памяти» В PHP слишком низкий лимит памяти. Augmentez memory_limit на стороне сервера, затем протестируйте еще раз.
Вы проводите тестирование в рабочей среде без резервной копии. осадки Клонирование тестовой среды или, по крайней мере, резервное копирование базы данных перед удалением параметров.
Вы используете устаревшее руководство (PHP 7) на WordPress 6.9.4. Код несовместим с PHP 8.1+ (TypeError, устаревшие функции) Адаптировать с проверкой типов. sanitize_*и правильные крючки

Вариант / альтернатива

Метод без использования кода: временная замена Post SMTP

Если вам абсолютно необходимо восстановить отправку электронной почты на время диагностики проблемы:

  • Установите другой надежный SMTP-плагин, настройте его и протестируйте отправку.
  • Оставьте Post SMTP отключенным на время выполнения правильный.

Предупреждение: одновременно активированные два SMTP-плагина могут конкурировать за право использования перехватчика. wp_mail и приводят к непоследовательному поведению (двойная отправка, некорректные заголовки).

Более продвинутый метод: отслеживание wp_mail и хуков без изменения плагина.

Для разработчиков (или если вы работаете с поставщиком услуг) можно реализовать отправку электронных писем на стороне WordPress с помощью mu-плагина. Цель: проверить правильность изменения SMTP-запроса. wp_mail и если ошибка возникает на экране администратора или в почтовом конвейере.

Куда вставить : /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);

Официальная справочная информация: фильтр wp_mail

Избегайте этой проблемы в будущем.

  • Выполните обновления на тестовой копии. По возможности. Страницы настроек часто являются первым местом, где обнаруживается ошибка миграции.
  • Поддерживайте PHP в актуальном состоянии. (Рекомендуется версия 8.1 и выше). Многие «странные» ошибки возникают из-за устаревшей версии PHP или из-за отсутствия некоторых расширений.
  • Избегайте использования «глобальных» фрагментов кода в admin_init. без мер безопасности. Всегда проверяйте:
    • контекст (страница/экран)
    • разрешения (current_user_can())
    • тип опций (is_array(), is_string())
  • Не применяйте минификацию к административной панели. Если вы точно не знаете, что делаете. Я часто видел, как страницы настроек ломаются из-за объединенного JavaScript-кода.
  • Отслеживайте журналы : Обеспечивать легкое вращение и доступ. Критической ошибке почти всегда предшествуют полезные предупреждения.

Фрагмент кода "Защита" для страниц административной панели (многоразовый шаблон)

Эта модель избавляет вас от необходимости выполнять код на всех страницах административной панели. Она значительно снижает риск конфликтов.

Куда вставить : mu-плагин или пользовательский плагин.

<?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;
	}
});

ссылка: Hook current_screen

Ресурсы

Часто задаваемые вопросы

Следует ли мне немедленно отключить Post SMTP?

Если общедоступный сайт работает, и зависает только страница настроек, сначала включите логирование и используйте проверку работоспособности, чтобы локализовать проблему. Если панель администратора становится нестабильной (глобальная ошибка), отключите плагин через FTP, переименовав папку. post-smtp.

Я получаю сообщение «Произошла критическая ошибка…», но никаких подробностей.

Включить WP_DEBUG_LOG (Решение 1) Также проверьте журналы сервера. На некоторых тарифных планах хостинга WordPress не имеет права записывать данные. wp-content до тех пор, пока права доступа не будут указаны корректно.

Удаление опции приведет к сбою в работе моей электронной почты?

Да, возможно: вам нужно сбросить конфигурацию. Сохраните параметр заранее (экспорт JSON из WP-CLI или копирование базы данных), а затем перенастройте SMTP в интерфейсе после устранения ошибки.

Может ли Divi 5 / Elementor / Avada вызвать эту фатальную ошибку?

Не напрямую. Но в их экосистемы часто входят плагины для оптимизации, плагины безопасности или административные дополнения. Тест проверки работоспособности со стандартной темой позволяет быстро это определить.

Я использую PHP 8.0 и боюсь переходить на версию 8.1 и выше.

В WordPress 6.9.4 в 2026 году рекомендуемая базовая версия PHP — 8.1+. Многие плагины исправляют ошибки только в этих версиях. Переключитесь на тестовый сервер и проверьте свои критически важные плагины.

Почему ошибка появляется только на странице настроек?

Потому что код, который читает/записывает определенные параметры, загружает определенные файлы или инициализирует конкретный пользовательский интерфейс, выполняется только на этом экране. Остальная часть сайта может продолжать работать.

В файле vendor/autoload.php у меня возникает ошибка "Класс не найден".

Часто это происходит из-за неполного обновления (усеченный ZIP-файл, проблемы с правами доступа, антивирус сервера). Самое быстрое решение — чистая переустановка плагина с wordpress.org, после чего, если возможно, выполните очистку кэша/OPcache.

Нужно ли мне изменить файлы плагина, чтобы это исправить?

Избегайте этого. Все изменения будут перезаписаны в следующем обновлении. Вместо этого попробуйте переустановить программу, очистить параметры или использовать временную защиту с помощью mu-плагина, пока вы не выясните причину проблемы.

Я больше не могу получить доступ к панели администратора, что мне делать?

Временно переименуйте папку плагина через FTP (post-smtppost-smtp.off) чтобы принудительно деактивировать его. Затем повторно активируйте WP_DEBUG_LOG и возобновите диагностику.

Какова минимальная сумма, которую необходимо отправить в службу поддержки Post SMTP?

Полная трассировка (без конфиденциальных данных), ваши версии (WordPress 6.9.4, PHP, Post SMTP), список активных плагинов и результат проверки работоспособности (срабатывает ли ошибка при отключении всех остальных плагинов).