Как использовать wp_mail на странице CPT

У меня есть CPT, а внутри CPT у меня есть контактная форма. Контактная форма напрямую отправляется на панель управления WordPress. Теперь я пытаюсь реализовать, когда пользователь отправит контактную форму и получит сообщение «Спасибо за обращение к нам» на свой адрес электронной почты (пользователь заполнил письмо в форме). Я новичок в WordPress & amp; PHP. Я использую проверку формы Ajax & amp; передать данные. $ email = sanitize_email ($ _ POST ['email']); . Эта переменная данные захвата с адреса электронной почты пользователя и после отправки их адрес электронной почты спасибо электронной почте. Буду признателен за любую помощь.

РЕДАКТИРОВАТЬ

Я могу отправить электронное письмо на мой адрес электронной почты, размещенный на сайте WordPress, например: user@example.com еще один Gmail, hotmail, жить, как электронная почта не работает. Я проверил небольшой плагин проверить электронную почту , это не SMTP, но он может отправлять электронную почту на любой почтовые провайдеры. Я не знаю, что со мной не так, я попробовал все, что мог.

public function submit_testimonial()    {        if (! DOING_AJAX || ! check_ajax_referer('testimonial-nonce', 'nonce') ) {            return $this->return_json('error');        }        $name = sanitize_text_field($_POST['name']);        $package = sanitize_text_field($_POST['package']);        $phone = sanitize_text_field($_POST['phone']);        $date = sanitize_text_field($_POST['date']);        $email = sanitize_email($_POST['email']);        $message = sanitize_textarea_field($_POST['message']);        $data = array(            'name' => $name,            'package' => $package,            'phone' => $phone,            'email' => $email,            'date' => $date,            'date' => $message,            'approved' => 0,            'featured' => 0,        );        $args = array(            'post_title' => $name,            'post_content' => $message,            'post_author' => 1,            'post_status' => 'publish',            'post_type' => 'testimonial',            'meta_input' => array(                '_zon_testimonial_key' => $data            )        );        $postID = wp_insert_post( $args );        if ($postID) {            $headers = "MIME-Version: 1.0
" .            "From: " . $current_user->user_email . "
" .            "Content-Type: text/plain; charset=\"" . get_option('blog_charset') . "\"
";            $to = $email;            $title = "Test email from";            $body = "Hello " .  $name . " Your ZonPackage " . $package . " Booking Confirmed ." ;            $subject ="Zon Package Booking";            wp_mail( $to, $subject, $body, $headers );        }        if ($postID) {            return $this->return_json('success');        }    }    public function return_json( $status ) {        $return = array(            'status' => $status            );            wp_send_json($return);    }

Ответы и комментарии:

Трудно помочь без каких-либо подробностей. Я понимаю, что wp_insert_post ($ args), который мы запускаем, сохранил сообщение в базе данных? Просто письмо не отправляется?
Создан 12-12-2018 10:55 Greg Winiarski

Электронная почта не отправляется. запись сохранена в базе данных, но не работает
Создан 12-12-2018 11:08 Noufal Binu

обновленный ответ ниже для решения проблем в вашем пересмотренном вопросе
Создан 15-12-2018 01:55 butlerblog

Не повезло, я проверил «плагин журнала электронной почты», он показывает, что сообщение выполнено, но все еще не может отправить его в Gmail.
Создан 12-12-2018 01:46 Noufal Binu

Как я уже сказал в своем ответе, регистратор, скорее всего, скажет вам, что оно было «успешно» отправлено - потому что wp_mail () просто возвращает true или false, основываясь на передаче сообщения. На самом деле это не означает, что сообщение было отправлено сервером. Таким образом, ваша проблема - это проблема почты (вне WordPress), которую вам нужно будет отследить (см. Последний раздел ответа выше, в котором содержится справка для этого). Я рекомендую начать с настройки SMTP - это решает большинство проблем, является более надежным и делает вас «законным».
Создан 12-12-2018 01:17 butlerblog

Работаем хорошо, спасибо за вашу Великую Помощь.
Создан 17-12-2018 11:41 Noufal Binu

Не работает я сделал Что вы сказали, что не так?
Создан 12-12-2018 12:18 Noufal Binu

Если вы внесли изменения, как объяснено, и до сих пор не получили сообщение в папке «Входящие», попробуйте установить плагин, такой как Email Log wordpress.org/plugins/email-log, возможно, электронное письмо отправлено, но не доставлено.
Создан 12-12-2018 12:30 Greg Winiarski

Я уже проверил это. Я сомневаюсь в этой строке wp_mail ('digitcrop@gmail.com', 'The subject', 'The message'); Вы уверены, что эта небольшая строка кода выполняется для отправки электронной почты?
Создан 12-12-2018 12:14 Noufal Binu

я никогда не использовал функцию wp_mail
Создан 12-12-2018 12:23 Noufal Binu

Я проверил "плагин журнала электронной почты", он показывает, что сообщение выполнено, но все еще не может отправить в Gmail.
Создан 12-12-2018 01:00 Noufal Binu


Я пересмотрел свой код, чтобы решить некоторые проблемы, но есть вероятность того, что проблема не в коде.
Во-первых, вы вернулись слишком рано. Ваш оригинальный код возвращает на успех, прежде чем вы посылаете по электронной почте. Я передвинул к концу, так что она задает значение (успех или ошибка) в конце в зависимости от того, есть ID сообщения или нет, а затем возвращается. Таким образом, вы получаете свои функции почты, а также.
Маловероятно, что вам нужны оба wp_mail() и Mail(). Если вы делаете это, потому что вы думаете wp_mail() не работает, это действительно не поможет. wp_mail() использует phpMailer библиотеку, если вы не сделали ни одной игры, phpMailer собирается использовать почты() - так это в конечном итоге то же, если это было работать без WP в этом случае вы получите ошибки, так как функции wp_insert_post() не определена.
Кроме того, документация для wp_send_json() указывает на то, что вам не нужно wp_die() как он обрабатывает, что для вас функции.
Ваш код вот с этими изменениями:
submit_contact публичная функция() {

если (! DOING_AJAX || ! контакт-извращенец check_ajax_referer ('', 'извращенец') ) {
вернуть $это->return_json('ошибка');
}

$имя = sanitize_text_field( $_POST, где['имя'] );
$телефон = sanitize_text_field( $_POST, где['телефон'] );
$электронной почты = sanitize_email( $_POST, где['электронной почты'] );
$сообщение = sanitize_textarea_field( $_POST, где['сообщение'] );

$данных = массив(

'имя' => $имя,
'пакет' => $пакет,
"телефон" = > $телефон
'электронной почты' => $электронной почты,
'дата' => $дата,
'дата' => $сообщение
'утвержден' => 0,
'рекомендуемые' => 0,
);

$параметр args = массив(
'post_title' => $имя,
'управление недвижимостью' => $сообщение
'post_author' => 1,
'post_status' => 'опубликовать',
'post_type равно' => 'контакт',
'meta_input' => массив(
'_zon_contact_key' => $данных
)
);

$сообщения дан = wp_insert_post( $аргументы );

если ( $сообщения дан ) {
wp_mail( 'digitcrop@gmail.com', 'тема', 'сообщение' );
}

$return_val = ( $сообщения дан ) ? 'успех' : 'ошибка';
возврат $return_val;
}

return_json публичные функции (в $status ) {

$возврат = массив(
'статус' => $статус
);

wp_send_json (долларов);

}

Если вы все еще не получаете письма, я хотел бы сделать некоторые устранение неполадок на стороне электронной почте вещей. Если в пост вставляется, а не по электронной почте, ваш код работает, и это скорее всего проблема с почтой отправить, а не ваш код.
Если вы на виртуальном хостинге, вам нужно проверить правила для отправки электронной почты с помощью скриптов. WР вышлем из "wordpress@yourdomain.com" по умолчанию. Некоторые хозяева требуют "от" - адрес быть реальной электронной почты. Так проверить. Кроме того, у вас есть этот код создан для тестирования с простым теме и теле сообщения. Существует возможность того, что хост-отправитель отрицает, потому что он думает, что это спам, основанный на тексте быть столь короткий.
Примечание: я обновил и уточнил этот раздел
Мое подозрение заключается в том, что если вы ставите в письме регистратор, вы можете обнаружить, что wp_mail() работает (и лесозаготовки) а если почта отправляется, но вы все еще не получаете его. И если это так, то это потому, что ваш хозяин отвергая отправить.
Можно легко избежать всех этих вещах по настройке отправки через SMTP. Что бы избежать большинства проблем. Есть много способов сделать это, используя плагин или с помощью кода. Интернет изобилует примерами - это всего лишь один из них.
Если вы не можете использовать SMTP, то вы, возможно, потребуется, чтобы устранить другие возможные вопросы по электронной почте с заголовками по умолчанию в WP и тому подобное. Вот статья с более подробной информацией о такого рода неисправностей.
Обновление № 2 - Адрес электронной почты не принимается
Основываясь на ваши обновления, ваш вопрос по электронной почте не принимаются. ИМО, это скорее всего связано с тем, как вы сидите заголовки. В результате, ваше сообщение становится отклоненным.
Как я заявил в оригинальный ответ, Ты лучше настройки для отправки через SMTP-аккаунт. Это поможет вам избежать множества потенциальных проблем.
Независимо от того, делаете ли вы это или нет, вам нужно исправить ваш вопрос заголовка. Не связывайтесь с заголовками, если вы абсолютно необходимо. Я рекомендую вам принять это полностью.
Если вы должны оставить его в, вам нужно исправить следующее:

Если вы что-то меняется, не объявляйте его.
$функция current_user неопределено.
Передать заголовки в качестве значений массива.
"От" значение в заголовке некорректен.

Если вы что-то меняется, не объявляйте его. wp_mail() устанавливает никаких дефолтов, которые не объявляются. Я хотел бы предложить вам вывезти декларация MIME-тип и тип контента точно.
$функция current_user не определен в коде, который вы выложили. Добавить следующее, чтобы убедиться, что он определен:
$функция current_user = wp_get_current_user();

Передать заголовки в качестве значений массива. wp_mail() принимает строку или массив, но если это строка, то она получает взорвался в массив, так что вы можете также начать с массивом.
"От" значение в заголовок неправильный путь у вас есть. Необходимо также иметь значение "от" имя в дополнение к адресу. Он должен быть в следующем формате:
"От: от имени "

Если у вас нет "имени", замена адресу электронной почты:
$заголовки [] = " от:". $функция current_user->user_email . '<' . $функция current_user->user_email . '>';

Так что с этими вещами заниматься, вот что я рекомендую:
если ($сообщения дан) {
$функция current_user = wp_get_current_user();
$заголовки [] = " от:". $функция current_user->user_email . '<' . $функция current_user->user_email . '>';
$с = $электронной почты;
$заголовок = "тестовое письмо";
$тело = "Привет" . $имя . "Ваш ZonPackage" . $пакет . "Бронирование Подтверждено". ;
$заголовок ="зон пакет заказа";
wp_mail( $к, $тема, $тело, $заголовки );
}

Имейте в виду, что не может полностью решить вашу проблему. Если ваш адрес не имеет домен, который совпадает с доменом отправителя, вы можете еще посмотреть "спам" и получить отказ. Кроме того, обязательно проверьте папку Спам, чтобы увидеть, если ваши сообщения принимаются, но помечается как спам.
Создан 15-12-2018 01:59

Если сообщение сохраняется в базе данных, то ваши функции mail () и wp_mail () не запускаются, потому что функция заканчивается здесь
if ($ postID) {
    return $ this-> return_json ('success');
}

Вырежьте эти три строки кода и вставьте их перед возвращением $ this-> return_json ('error');
Кроме того, вам не нужна функция wp_die (), так как wp_send_json () будет запускать exit; для тебя.
Создан 12-12-2018 11:45 Greg Winiarski3427