Использование wp_mail WordPress в плагине Call to undefined function wp_mail

Call to undefined function wp_mail()

Добрый день дорогие читатели. Сегодня, разрабатывая очередной плагин столкнулся с проблемой использования штатной функции 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.

Как избежать ошибки Call to undefined function wp_mail() в 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, постараюсь ответить на ваш вопрос в течении часа.

Обязательно указывайте:

  • адрес вашего сайта;
  • действия, которые вы делаете;
  • желательно скин ошибки Call to undefined function wp_mail(), если ее не видно простому пользователю

Функция WordPress WP_MAIL

Для понимания какие параметры нужно подставлять в функцию привожу список ее переменных. Как вы поняли, эта функция отвечает за отправку сообщения с 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 - файлы, которые следует прикрепить к письму. Указываем полный путь до файла и его название. Если нужно прикрепить несколько файлов указываем их названия файла и путь к нему в массиве.

Комментарии к записи «Использование wp_mail WordPress в плагине Call to undefined function wp_mail»:
  1. webzorg:

    Проблема: Fatal error: Call to undefined function wp_authenticate()

    РЕШЕНИЕ: require_once(ABSPATH.'wp-includes/pluggable.php');

    (-spam-url-)

  2. Сергей:

    Где ж вы были раньше 🙁 , из-за ошибки Fatal error: Call to undefined function wp_mail() мне пришлось переписывать весь код под функцию PHP mail() со всеми вытекающими.
    Думал что не правильно отправляю данные на почту, оказывается все я делал правильно, только не в той момент что надо пробовал отправлять информацию

  3. Olxa:

    Пыталась написать маленький скриптик плагин для оптимизации ответов в комментариях через ajax, но письма не приходили на почту - решила что проблема с хостингом, написала кучу писем в тех. поддержку (затупила надо было проверить в самой теме эту функцию :-)) в итоге они мне дали ответ ПХП с ошибкой Fatal error: Call to undefined function wp_mail() которая все это время у меня висела. При отправке ошибки не было, оно то й понятно, Вордпресс их скрывал, а если бы даже показывал то я из-за аякса не увидела бы 🙂

  4. Stella:

    А как у тебя получилось в Аякс получить ошибку Fatal error: Call to undefined function wp_mail()

    Хочу у себя в коде отследить но не знаю как это сделать.

    • admin:

      Для начала нужно включить ошибки ВП в файле wp-config.php
      Переменную define('WP_DEBUG', false); ставим значение true.
      В самом аякс запросе jQuery.ajax ставим параметр dataType: 'html' , если это параметр установлен с другим значением надо изменить в html

      Теперь перед отправкой запроса открываем фиребаг в ФФ и смотрим что мы посылаем и какой ответ нам приходит и какая там ошибка.

      Если ошибка Fatal error: Call to undefined function wp_mail() то решение этой проблемы вы уже знаете.

      Так же учтите там может быть много разных варнингов, в принципе на них не стоит обращать внимание.

  5. Andry:

    хм.. забавно, когда увидел ошибку Fatal error: Call to undefined function wp_mail() думал что то не так с кодом отправки, или ошибка сервера.

    Получается что я вызываю функцию которой ещё не существует 🙁

Сделать заказ
Онлайн помощь по WordPress