Крок за кроком: спочатку знайдіть файл, де з’являється повідомлення про помилку. Я використовую Notepad ++ та команду CTRL+ Fдля пошуку у файлах. Корисно шукати лише перші кілька слів повідомлення про помилку, оскільки деякі повідомлення про помилки поєднуються з різних повідомлень.
Повідомлення про помилку з'являється в wp-login.php
і свята удача, тільки там. Тож давайте подивимось, чому ця помилка може статися.
if ( $message && !wp_mail($user_email, $title, $message) )
Є дві умови. $message
повинні бути істинними (не порожній рядок, не хибний, не нульовий тощо). І wp_mail()
не слід повертати помилкове.
На одному рядку вище є фільтр $message = apply_filters('retrieve_password_message', $message, $key);
, тому можливо, що плагін (або тема) використовує цей фільтр і повертає значення, яке не відповідає дійсності (порожня рядок, помилка, нуль тощо).
Але набагато простіше перевірити wp_mail()
, працює він чи ні. Напишіть невеликий плагін, щоб надіслати пробну пошту собі:
<?php
/**
* Plugin Name: Stackexchange Testplugin
* Plugin URI: http://yoda.neun12.de
* Description: Send me a test email
* Version: 0.1
* Author: Ralf Albert
* Author URI: http://yoda.neun12.de
* Text Domain:
* Domain Path:
* Network:
* License: GPLv3
*/
namespace WordPressStackexchange;
add_action( 'init', __NAMESPACE__ . '\plugin_init' );
function plugin_init(){
$to = 'your-email-adress@some-domain.tld';
$subject = 'Testemail';
$message = 'FooBarBaz Testmail is working';
wp_mail( $to, $subject, $message );
}
(Це код PHP5.3. Якщо ви використовуєте PHP5.2, видаліть речі з простору імен)
Плагін повинен відправити пробну пошту відразу після активації. Якщо ні, то виклик деяких резервних сторінок (наприклад, інформаційної панелі) повинен зробити це.
Якщо тестова пошта не надходить, то, ймовірно, у вас проблема wp_mail()
. Тож увімкніть налагодження:
define( 'WP_DEBUG', true );
define( 'WP_DEBUG_LOG', true );
define( 'WP_DEBUG_DISPLAY', true );
@ini_set( 'display_errors',1 );
Помістіть цей код у свій wp-config.php
і спробуйте надсилати собі тест-пошту. Тепер ви повинні отримати кілька повідомлень про помилки, і вони також повинні бути ввійшли wp-content/debug.log
(Журнал налагодження може зрости дуже великим, якщо буде більше помилок, викликаних плагінами та / або темами).
У цей момент ви отримали хорошу інформацію, якщо wp_mail()
не вдалося, і якщо так, то чому. Якщо ви wp_mail()
працюєте правильно і тестова пошта надійшла, поверніться до початку та з’ясуйте, чому $message
це неправда.
Якщо у вас є проблеми з цим wp_mail()
, майте на увазі, що wp_mail()
не використовується mail()
функція PHP . WordPress використовує клас PHP ( PHPMailer ). Можливо, вам просто потрібен плагін, щоб використовувати SMTP замість sendmail. Або проблема знаходиться в іншому місці. Ми не знаємо. Ви повинні розслідувати.