加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 在WordPress中使用Ajax发送邮件

发布时间:2020-12-13 18:15:07 所属栏目:PHP教程 来源:网络整理
导读:我正在尝试使用Ajax通过我创建的Web表单发送电子邮件,但我迷路了.我不知道Ajax如何在Wordpress中运行. 我首先创建了一个动作 add_action( 'wp_ajax_siteWideMessage','wpse_sendmail' ); 应该检索数据并发送邮件的功能是: function wpse_sendmail(){ $for =
我正在尝试使用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 ."rn".'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

到目前为止,我更新了我的代码:

PHP

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 ."rn".'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穆巴拉克:-)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读