나는 wp_mail와 Ajax워드 프레스 아약스 성공 응답
이메일 작품을 사용하여 워드 프레스의 문의 양식을 만들려고 해요하지만 난 아약스 성공 응답에 문제가 있어요.
이메일을 보낸 후 사용자에게 이메일이 전송되었다는 메시지를 표시해야합니다.
자바 스크립트는 양식을 확인하고 성공 메시지를 표시합니다 :
$atj(function(){
$atj('#training-submit').click(function(e) {
e.preventDefault();
e.stopPropagation();
if(verfiyFields()) {
alert('here');
requestData = {
'action' : 'myajax-submit',
'firstName' : $atj("#name").val(),
'email' : $atj("#email").val(),
}
$atj.post(MyAjax.ajaxurl, requestData).done(function(result){
result = jQuery.parseJSON(result);
console.log(result);
if(result == 'success'){
$atj('.training-form [type=text]').val('');
$atj('.training-form-message').append('<p class="training-form-complete-message">Thank you for the email</p>');
}
});
}
});
})
//Verfiy
function verfiyTrainingFields() {
var flag = true;
var name = $atj('#name');
var email = $atj('#email');
if(name.val().indexOf(' ') === -1){
name.parent().prepend('<p class="form-error">Please enter name, first space last</p>');
errorMessage($atj('.form-error'));
flag = false;
}
if(!IsEmail(email.val())){
email.parent().prepend('<p class="form-error">Please enter valid email address</p>');
errorMessage($atj('.form-error'));
flag = false;
}
return flag;
}
functions.php
파일은 이메일을 보내 아약스 응답을 보낼 수 있습니다.
function myajax_submit() {
$name = sanitize_text_field($_POST['firstName']);
$email = sanitize_text_field($_POST['email']);
$headers[] = 'From: ' . $name . ' <' . $email . '>' . "\r\n";
$headers[] = 'Content-type: text/html' . "\r\n"; //Enables HTML ContentType. Remove it for Plain Text Messages
$to = '[email protected]';
$message = 'Name: ' . $name . "\r\n" . 'email: ' . $email;
add_filter('wp_mail_content_type', 'set_html_content_type');
wp_mail($to, 'Email Test', $message);
remove_filter('wp_mail_content_type', 'set_html_content_type');
echo 'email sent';
// generate the response
$response = json_encode(array('success'));
// response output
header("Content-Type: application/json");
echo $response;
exit;
}
은 이메일이 전송 및 에코 화재 '이메일이 전송'하지만, JS에서 if(result == 'success'){
작동하지 않습니다됩니다.
js 파일의 console.log (결과)는 다음을 제공합니다.
<br />
<b>Warning</b>: call_user_func_array() expects parameter 1 to be a valid callback, function 'set_html_content_type' not found or invalid function name in <b>/Users/user.name/Desktop/MAMP-DocRoot/appname/src/php/wp-includes/plugin.php</b> on line <b>192</b><br />
email sent<br />
<b>Warning</b>: Cannot modify header information - headers already sent by (output started at /Users/user.name/Desktop/MAMP-DocRoot/appname/src/php/wp-includes/plugin.php:192) in <b>/Users/user.name/Desktop/MAMP-DocRoot/appname/src/php/wp-content/themes/sitename/functions.php</b> on line <b>66</b><br />
["success"]
이동이 -'헤더 ("콘텐츠 유형 : 응용 프로그램/JSON")
이여기에 완벽한 예입니다;'의 상단에 귀하의 PHP 파일. 이미 AJAX 응답의 본문을 출력하기 시작한 후에 HTTP 헤더를 보내려고하기 때문에 오류가 발생합니다 ('echo 'sent email ;;). –