Php 使用jQuery和ajax在WordPress中发送电子邮件
我这里有个小问题。我正在wordpress上制作一个简单的报价表。 我有两个表单,第一个表单将数据发送到jQuery,jQuery执行所有的计算,只有很少的选项,所以我们没有使用DB,然后打印一个html行。在这里之前没有问题;当我试图将该行发送到PHP以发送一封简单的电子邮件时,问题就开始了。我尝试过ajax和wp_mail,但没有成功。 以下是我尝试过的: wordpress模板文件中的HTML:Php 使用jQuery和ajax在WordPress中发送电子邮件,php,jquery,ajax,wordpress,Php,Jquery,Ajax,Wordpress,我这里有个小问题。我正在wordpress上制作一个简单的报价表。 我有两个表单,第一个表单将数据发送到jQuery,jQuery执行所有的计算,只有很少的选项,所以我们没有使用DB,然后打印一个html行。在这里之前没有问题;当我试图将该行发送到PHP以发送一封简单的电子邮件时,问题就开始了。我尝试过ajax和wp_mail,但没有成功。 以下是我尝试过的: wordpress模板文件中的HTML: <!--first form with data to calculate-->
<!--first form with data to calculate-->
<form class="needs-validation">
<!--select fields, no problem here-->
</form>
<div class="table-responsive"> <!--risultato preventivo-->
<table class="table table-bordered" id="dynamic_field">
<tr>
<!--result given by jQuery-->
</tr>
</table>
<p id="total"><!--total price passed by jQuery--></p>
</div>
<!--second form for sending email-->
<form action="#" method="POST">
Nome:<br>
<input type="text" name="nome" id="nome">
<br>
Cognome:<br>
<input type="text" name="cognome" id="cognome">
<br>
Email:<br>
<input type="email" name="email" id="email">
<input type="hidden" name="invia" value="s">
<input type="submit" id="inviaForm" value="Invia">
</form>
<div id="worked"></div>
文件main.js中包含calcs的jQuery:
(function ($) {
$(document).ready(function () {
function generaRisultato (riga,nProfilo,nColore,nSerramento,costoRiga){
var risultato = '<tr id="row' + riga +
'" class="dynamic-added"><td><div><h5 class="my-0">Articolo: ' + nProfilo +
'</h5><br><small class="text-muted">Colorazione: ' + nColore +
'</small><br><small class="text-muted">Serramento: ' + nSerramento +
'</small></div><span id="costo-riga'+riga+'">'+costoRiga+'€</span></td>'+
'<td><button type="button" name="remove" id="'+ riga +'" class="btn btn_remove">-</button>
</td></tr>';
return risultato;
}
//calcs done correctly
$('#dynamic_field').append(generaRisultato(i,profile,color,name,price)); //result printed
var risultatoFinale = $('#dynamic_field').html(); //variable with result stored for email
//sending form mail ajax
$('#inviaForm').on('submit', function(e){
//evito l'invio del form
e.preventDefault();
//recupero i valori
var nomeUser = $('#nome').val();
var cognomeUser = $('#cognome').val();
var emailUser = $('#email').val();
var totaleFinale = $('#totale').html();
var preventivoFinale = $('#dynamic_field').html();
//eseguo la chiamata ajax
$.ajax({
type: "POST",
url: my_vars.ajaxurl,
data: {
action : 'invio_mail', //azione da eseguire
_nonce : my_vars.nonce,
nome : nomeUser,
cognome : cognomeUser,
email : emailUser,
totale : totaleFinale,
preventivo : preventivoFinale
},
success: function(res){
$('#funzionante').html(res);
}
});
});
});
})(jQuery);
PHP inside functions.PHP:
function vf_load_theme_preventivatore(){
wp_register_script('main', get_template_directory_uri().'/preventivatore/js/main.js', false, false,
true);
wp_enqueue_script('main');
wp_localize_script( 'main', 'my_vars', array(
'ajaxurl' =>admin_url('admin-ajax.php'),
'nonce' => wp_create_nonce('invio-mail-nonce')
));
}
add_action('wp_enqueue_scripts', 'vf_load_theme_preventivatore');
function invio_mail_ajax(){
//verifico che il nonce sia corretto
if(!wp_verify_nonce( $_REQUEST['_nonce'], 'invio-mail-nonce') ){
die('Non autorizzato!');
}
//Prepariamo le variabili da usare
$successo = '';
$nome = strval($_REQUEST['nome']);
$cognome = strval($_REQUEST['cognome']);
$email = $_REQUEST['email'];
$preventivo = $_REQUEST['preventivo'];
$totale = $_REQUEST['totale'];
//script mail
$header = "From: Site <test@site-domain.it>\n";
$header .= "BCC: Altro Ricevente <test2@my-domain.it>\n";
// costruiamo le intestazioni specifiche per il formato HTML
$header .= "Content-Type: text/html; charset=\"UTF-8\"\n";
$oggetto = "Ecco il tuo preventivo";
$messaggio = "<html><body><p>Richiesta preventivo da sito</p><p>Nome: ".$nome."</p><p>Cognome:
".$cognome."</p><p>Email: ".$email."</p> <p>Dati del preventivo</p><p>".$preventivo."</p><p>Totale:
".$totale."€</p></body></html>";
$inviata = wp_mail($email,$oggetto,$messaggio,$header);
$successo .= '<p>'.$nome.'</p>';
echo $successo;
die();
if($inviata){
$successo = '<p> email invata</p>';
echo $successo;
die();
} else die('errore nella mail');
}
add_action('wp_ajax_invio_mail','invio_mail_ajax');
add_action('wp_ajax_nopriv_invio_mail','invio_mail_ajax');
这就是我所做的,我只是隐藏了jQuery计算,因为它工作得完美无缺。
我想发送一封带有html格式文本的电子邮件,使用此解决方案,在将ajax和php脚本放入功能之前,电子邮件甚至不会被发送。电子邮件到达时,php在模板文件中,而且我无法传递带有结果和总报价的html表行。也许我搞错了ajax或php部分。
这有什么帮助吗?谢谢大家的支持 创建了AJAX提交表单。测试运行良好,您可以更改数据。希望这对你有帮助 复制并粘贴到function.php文件中
function.php
function invio_mail(){
$to = 'sendto@example.com';
$subject = 'The subject';
$body = 'The email body content';
$headers = array('Content-Type: text/html; charset=UTF-8');
wp_mail( $to, $subject, $body, $headers );
echo 'mail send';
die;
}
add_action("wp_ajax_invio_mail", "invio_mail");
add_action("wp_ajax_nopriv_invio_mail", "invio_mail");
Just paste you want the page (Form)
<form id="ajaxformid" action="#" method="POST">
Nome:<br>
<input type="text" name="nome" id="nome">
<br>
Cognome:<br>
<input type="text" name="cognome" id="cognome">
<br>
Email:<br>
<input type="email" name="email" id="email">
<input type="hidden" name="invia" value="s">
<input type="submit" id="inviaForm" value="Invia">
</form>
Just paste in footer
<script>
jQuery(document).ready(function($) {
var frm = $('#ajaxformid');
frm.submit(function (e) {
var formData = {
nome: jQuery('#nome').val(),
cognome: jQuery('#cognome').val(),
email: jQuery('#email').val(),
action:'invio_mail'
};
$.ajax({
type : 'POST',
url : "<?php echo admin_url('admin-ajax.php'); ?>",
data : formData,
dataType : 'json',
encode : true
}).done(function(data) {
console.log(data);
}).fail(function(data) {
console.log(data);
});
e.preventDefault();
});
});
</script>
您的服务器上的电子邮件设置似乎有问题,请检查SMTP配置。好的,谢谢,我要试试;但是我应该在哪里打电话给wp_mail来发送电子邮件呢?他们到底在哪里?我应该在计算var frm=$'ajaxformid'之前删除带有$_REQUESTbefore的变量;invio_邮件功能内部使用“wp_mail”抱歉@vadivel-a,对我无效,未发送邮件。在函数invio_mail中,在echo json_encode$_POST之后;我开始构建电子邮件和消息的标题,然后调用wp_mail$_POST['email'],$subject,$message,$header;是这样吗?我已经配置了SMTP。对不起我的无知。非常感谢。是否发送Ajax请求?