Добрый день дорогие читатели. Сегодня, разрабатывая очередной плагин столкнулся с проблемой использования штатной функции WordPress WP_MAIL($to, $subject, $message, $headers, $attachments) при использовании Ajax технологии через стандартный wp-admin/admin-ajax.php. Ошибка выдавалась такого характера: Fatal error: Call to undefined function wp_mail() перейти к описанию функции
Как известно, Call to undefined function означает что мы вызываем функцию до того момента пока она загрузилась. Эта проблема у разработчиков плагинов довольно частая, так как плагины вызываются раньше чем некоторые штатные функции WordPress.
Решение проблемы Call to undefined function wp_mail() очень простое для обычного плагина, достаточно создать хук:
add_action( 'plugins_loaded', 'myFunctionSend' );
function myFunctionSend(){
wp_mail("test@help-wp.ru", "Заголовок", "Тело сообщение");
}
и всё будет работать, но увы не в плагине который использует отправку данных по технологии Ajax.
Что я только не пробовал чтоб подключить мою функцию в хук "plugins_loaded" ведь для вызова Аякс у меня уже был подключен хук add_action('wp_ajax_ajaxwork_action', 'ajaxwork_action_callback') , который не получалось состыковать с хуком для подключению отправки почты wp_mail и в конечном итоге пришел к выводу, что нужно самостоятельно запускать "plugins_loaded" через do_action('plugins_loaded').
Выглядело у меня это примерно так:
function ajaxwork_action_callback(){
global $wpdb;
do_action('plugins_loaded');
wp_mail("test@help-wp.ru", "Заголовок", "Тело сообщение");
exit;
}
Такое простое решение єтой проблемы, правда для того чтоб избежать ошибки пришлось потратить прилично времени 🙂 .
Вот и всё, теперь если у вас не получается использовать wp_mail в плагине WordPress с использованием Ajax или без использования Ajax, вы знаете что нужно сделать.Fatal error: Call to undefined function wp_mail() - больше не проблема, просто используйте нужный хук add_action( 'plugins_loaded', 'ваша функция для обработки' ); или в самой функции хук do_action('plugins_loaded').
Если эта статья не помогла решить вашу проблему с Call to undefined function wp_mail(), опишите вашу проблему в комментариях, или отправьте свой вопрос мне на почту помощь wordpress, постараюсь ответить на ваш вопрос в течении часа.
Обязательно указывайте:
Для понимания какие параметры нужно подставлять в функцию привожу список ее переменных. Как вы поняли, эта функция отвечает за отправку сообщения с WordPress и полностью заменяет функцию ПХП mail().
Описание функции WordPress WP_MAIL($to, $subject, $message, $headers, $attachments)
$to - адрес получателя
$subject - тема письма
$message - сообщение письма. По умолчанию теги HTML недопустимы
$headers - атрибуты письма (можеть быть пустое). Можно указывать кодировку, тип письма и т. д. Например: "Content-type: text/html; charset=utf-8 \r\n"
$attachments - файлы, которые следует прикрепить к письму. Указываем полный путь до файла и его название. Если нужно прикрепить несколько файлов указываем их названия файла и путь к нему в массиве.
Проблема: Fatal error: Call to undefined function wp_authenticate()
РЕШЕНИЕ: require_once(ABSPATH.'wp-includes/pluggable.php');
(-spam-url-)
Где ж вы были раньше 🙁 , из-за ошибки Fatal error: Call to undefined function wp_mail() мне пришлось переписывать весь код под функцию PHP mail() со всеми вытекающими.
Думал что не правильно отправляю данные на почту, оказывается все я делал правильно, только не в той момент что надо пробовал отправлять информацию
Пыталась написать маленький скриптик плагин для оптимизации ответов в комментариях через ajax, но письма не приходили на почту - решила что проблема с хостингом, написала кучу писем в тех. поддержку (затупила надо было проверить в самой теме эту функцию :-)) в итоге они мне дали ответ ПХП с ошибкой Fatal error: Call to undefined function wp_mail() которая все это время у меня висела. При отправке ошибки не было, оно то й понятно, Вордпресс их скрывал, а если бы даже показывал то я из-за аякса не увидела бы 🙂
А как у тебя получилось в Аякс получить ошибку Fatal error: Call to undefined function wp_mail()
Хочу у себя в коде отследить но не знаю как это сделать.
хм.. забавно, когда увидел ошибку Fatal error: Call to undefined function wp_mail() думал что то не так с кодом отправки, или ошибка сервера.
Получается что я вызываю функцию которой ещё не существует 🙁
Если ничего не помогло, тогда попробуйте вот так. У меня сработало
add_action( 'wp_loaded', 'cron_time' );
Работает везде и тем более в аяксе