我正在尝试使用Ajax通过我创建的Web表单发送电子邮件,但我迷路了.我不知道Ajax如何在wordpress中运行.
我首先创建了一个动作
add_action( 'wp_ajax_siteWideMessage','wpse_sendmail' );
function wpse_sendmail() { $for = like_escape($_POST['forwhat']); $email = like_escape($_POST['email']); $headers = 'From: '.$email ."\r\n".'Reply-To: '.$email; $message = like_escape($_POST['message_message']); $respond = like_escape($_POST['message_email']); wp_mail( "support@ontrgt.net","(OTN) Support: ".$support,$message,$headers); }
最后,js是这样的:
$("#contact-send").click(function(){ var forwhat = $("#contact-for").val(); var name = $("#contact-name").val(); var email = $("#contact-email").val(); $.post( "<?PHP echo esc_js( site_url() ) ?>",{ siteWideMessage:"null",forwhat: forwhat,name: name,email:email },function(){ console.log("success"); }); });
我不太清楚我在这里缺少什么.有人可以帮我理解wordpress的Ajax流程吗?
UPDATE
到目前为止,我更新了我的代码:
add_action( 'wp_ajax_siteWideMessage','wpse_sendmail' ); add_action( 'wp_ajax_nopriv_siteWideMessage','wpse_sendmail' ); function wpse_sendmail() { $for = $_POST['forwhat']; $email = $_POST['email']; $headers = 'From: '.$email ."\r\n".'Reply-To: '.$email; $message = $_POST['message_message']; $respond = $_POST['message_email']; /*if(wp_mail( "support@ontrgt.net","(OTN) Support: ".$for,$headers)) { echo "WOOHOO"; }*/ if($for) { //Just to see if there is any response. echo "Whoohoo"; } die(); }
JS
$("#contact-send").click(function(){ var forwhat = $("#contact-for").val(); var name = $("#contact-name").val(); var email = $("#contact-email").val(); var data = { action:'siteWideMessage',forwhat:forwhat,name:name,email:email }; $.post('<?PHP echo admin_url("admin-ajax.PHP"); ?>',data,function(response) { alert(response); }); });
wordpress仍然没有响应我的AJAX命令.我正在使用inspect元素,我看不到任何数据被传递.
首先,您需要添加两个操作,一个用于明确要求使其工作的非登录用户,例如类似这样的操作(基本上在您的functions.PHP文件中):
add_action( 'wp_ajax_siteWideMessage','wpse_sendmail' );
然后,你需要向admin-ajax.PHP发出请求,所以在jQuery函数中,你可以使用这样的东西:
$("#contact-send").click(function(e){ e.preventDefault(); // if the clicked element is a link //... var data = { 'action':'siteWideMessage','more':'values' }; $.post('<?PHP echo admin_url('admin-ajax.PHP'); ?>',function(response) { console.log(response); }); });
确保将exit / die放在服务器端处理程序的末尾,例如:
function wpse_sendmail() { // Process the post data... if(mail(...)) { echo 'success'; } else { echo 'Failed'; } die(); }
在您的成功回调中,响应变量将获得从服务器端发送的响应,即成功/失败.有更好的方法来执行此操作(使用wp_localize_script等).阅读this detailed article.此外,如果你想返回一个json响应,那么你可以使用$.json(‘url’,func).
如果您感到困惑,那么让我告诉您,您应该向admin-ajax.PHP发出请求并通过请求传递操作,在这种情况下它是siteWideMessage,因此wordpress将调用使用add_action hook注册的处理程序你的情况是wpse_sendmail.Eid穆巴拉克:-)