Вопрос или проблема
Я пытаюсь настроить WooCommerce и сталкиваюсь с ошибкой: “На этом сайте произошла критическая ошибка” во время оформления заказа. Я отключил все плагины и протестировал новую установку WordPress на поддомене, но проблема остается.
[25-Сен-2024 11:11:23 UTC] Фатальная ошибка PHP: Неперехваченная ошибка: Вызов неопределенной функции PHPMailer\PHPMailer\mail() в /home/bontonst/public_html/wp-includes/PHPMailer/PHPMailer.php:881
Стек вызовов:
#0 /home/bontonst/public_html/wp-includes/PHPMailer/PHPMailer.php(1972): PHPMailer\PHPMailer\PHPMailer->mailPassthru()
#1 /home/bontonst/public_html/wp-includes/PHPMailer/PHPMailer.php(1693): PHPMailer\PHPMailer\PHPMailer->mailSend()
#2 /home/bontonst/public_html/wp-includes/PHPMailer/PHPMailer.php(1525): PHPMailer\PHPMailer\PHPMailer->postSend()
#3 /home/bontonst/public_html/wp-includes/pluggable.php(546): PHPMailer\PHPMailer\PHPMailer->send()
#4 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/emails/class-wc-email.php(741): wp_mail()
#5 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/emails/class-wc-email-new-order.php(112): WC_Email->send()
#6 /home/bontonst/public_html/wp-includes/class-wp-hook.php(324): WC_Email_New_Order->trigger()
#7 /home/bontonst/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
#8 /home/bontonst/public_html/wp-includes/plugin.php(565): WP_Hook->do_action()
#9 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/class-wc-emails.php(172): do_action_ref_array()
#10 /home/bontonst/public_html/wp-includes/class-wp-hook.php(324): WC_Emails::send_transactional_email()
#11 /home/bontonst/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
#12 /home/bontonst/public_html/wp-includes/plugin.php(517): WP_Hook->do_action()
#13 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/class-wc-order.php(420): do_action()
#14 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/class-wc-order.php(253): WC_Order->status_transition()
#15 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/class-wc-order.php(365): WC_Order->save()
#16 /home/bontonst/public_html/wp-content/plugins/woocommerce/includes/gateways/bacs/class-wc-gateway-bacs.php(390): WC_Order->update_status()
#17 /home/bontonst/public_html/wp-content/plugins/woocommerce/src/StoreApi/Legacy.php(54): WC_Gateway_BACS->process_payment()
#18 /home/bontonst/public_html/wp-includes/class-wp-hook.php(324): Automattic\WooCommerce\StoreApi\Legacy->process_legacy_payment()
#19 /home/bontonst/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
#20 /home/bontonst/public_html/wp-includes/plugin.php(565): WP_Hook->do_action()
#21 /home/bontonst/public_html/wp-content/plugins/woocommerce/src/StoreApi/Utilities/CheckoutTrait.php(83): do_action_ref_array()
#22 /home/bontonst/public_html/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Checkout.php(349): Automattic\WooCommerce\StoreApi\Routes\V1\Checkout->process_payment()
#23 /home/bontonst/public_html/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/AbstractRoute.php(119): Automattic\WooCommerce\StoreApi\Routes\V1\Checkout->get_route_post_response()
#24 /home/bontonst/public_html/wp-content/plugins/woocommerce/src/StoreApi/Routes/V1/Checkout.php(138): Automattic\WooCommerce\StoreApi\Routes\V1\AbstractRoute->get_response_by_request_method()
#25 /home/bontonst/public_html/wp-includes/rest-api/class-wp-rest-server.php(1230): Automattic\WooCommerce\StoreApi\Routes\V1\Checkout->get_response()
#26 /home/bontonst/public_html/wp-includes/rest-api/class-wp-rest-server.php(1063): WP_REST_Server->respond_to_request()
#27 /home/bontonst/public_html/wp-includes/rest-api/class-wp-rest-server.php(439): WP_REST_Server->dispatch()
#28 /home/bontonst/public_html/wp-includes/rest-api.php(420): WP_REST_Server->serve_request()
#29 /home/bontonst/public_html/wp-includes/class-wp-hook.php(324): rest_api_loaded()
#30 /home/bontonst/public_html/wp-includes/class-wp-hook.php(348): WP_Hook->apply_filters()
#31 /home/bontonst/public_html/wp-includes/plugin.php(565): WP_Hook->do_action()
#32 /home/bontonst/public_html/wp-includes/class-wp.php(418): do_action_ref_array()
#33 /home/bontonst/public_html/wp-includes/class-wp.php(813): WP->parse_request()
#34 /home/bontonst/public_html/wp-includes/functions.php(1336): WP->main()
#35 /home/bontonst/public_html/wp-blog-header.php(16): wp()
#36 /home/bontonst/public_html/index.php(17): require('/home/bontonst/...')
#37 {main}
выброшено в /home/bontonst/public_html/wp-includes/PHPMailer/PHPMailer.php на строке 881
Ответ или решение
Когда вы видите ошибку "There has been a critical error on this website" при оформлении заказа в WooCommerce, и журнал ошибок указывает на проблему с библиотекой PHPMailer, как в вашем случае, есть несколько шагов по устранению неполадок, которые могут помочь решить проблему.
-
Проверка конфигурации PHP:
Убедитесь, что ваша версия PHP совместима с WooCommerce. Рекомендуется использовать PHP версии 7.4 или выше, так как более ранние версии могут иметь несовместимости. -
Проверка функции mail:
ОшибкаCall to undefined function PHPMailer\PHPMailer\mail()
указывает на то, что функцияmail
в PHP недоступна. Это может происходить по двум причинам:- Функция
mail()
отключена в конфигурации вашего PHP (проверьте файл php.ini на наличие строкиdisable_functions
). - На вашем хостинге могут быть ограничения или настройки, препятствующие использованию функции
mail()
.
Чтобы проверить это, вы можете создать файл
info.php
с содержимым:<?php phpinfo(); ?>
Откройте этот файл в браузере и найдите секцию
disable_functions
, чтобы убедиться, чтоmail()
не указана там. - Функция
-
Тестирование отправки почты:
Для проверки отправки электронной почты вы можете использовать плагин, такой как "WP Mail SMTP", который позволяет настроить SMTP-сервер для отправки писем. Установите плагин и следуйте его инструкциям, чтобы настроить SMTP с использованием вашего email-провайдера. Это может помочь установить, является ли проблема связанной с функциейmail()
. -
Логи ошибок:
Продолжайте проверять журнал ошибок сервера на наличие других ошибок, которые могут дать дополнительные подсказки. Иногда другие проблемы могут проявляться параллельно. -
Тестирование на минимальной конфигурации:
Поскольку вы уже отключили все плагины, попробуйте сменить тему сайта на стандартную (например, Twenty Twenty-One или другую базовую тему WordPress). Это может помочь выяснить, является ли проблема связанной с темой. -
Обновление плагинов и тем:
Убедитесь, что все ваши плагины и темы обновлены до последней версии, так как устаревшие версии могут вызывать конфликты. -
Обращение к хостингу:
Если все вышеперечисленные шаги не решают проблему, стоит обратиться к вашему хостинг-провайдеру. Иногда проблемы связаны с конфигурацией сервера или ограничениями, установленными вашим хостингом. -
Разработка предыдущих резервных копий:
В качестве последнего курсового механизма, если ничего не помогло, подумайте о восстановлении сайта из резервной копии до момента появления ошибки, пока вы не найдете конечное решение.
Следуйте указанным шагам, и это должно помочь вам устранить ошибку с PHPMailer и восстановить функционирование оформления заказа в WooCommerce. Если проблема не решается, возможно, вам стоит рассмотреть возможность получения помощи у профессионала или в сообществе WordPress.