onClick标记在WordPress

时间:2015-12-17 17:00:58

标签: php jquery ajax wordpress

我有一个span标签,它是表单的一部分(但不是最终提交表单),它将用户从第一个问题推进到第二个问题。点击此按钮,我想向硬编码的电子邮件发送简单的电子邮件通知,说明已添加新条目。我正在使用WordPress。

我的HTML如下(无法更改)

<span class="button next email-enter">
    <span class="txt">Get Started</span>
</span>

我正在使用以下jquery函数和ajax(console.log成功):

$('.email-enter').on('click', function(){
    console.log('button is clicked');
    $.post("/wp-content/themes/wptheme/partials/notify.php"); 
});

然后我创建了一个包含以下内容的notify.php文件:

<?php wp_mail( 'myemail@myemail.com', 'The subject', 'The message' ); ?>

虽然点击功能有效但是ajax / wp-mail无法正常工作(我没有收到电子邮件)。如何编辑此代码以发送此跨度的电子邮件通知?

2 个答案:

答案 0 :(得分:2)

它无法正常工作,因为您尝试使用Wordpress功能而不是在Wordpress环境中。即使您将脚本放在主题文件夹中,直接调用它也无法通过Wordpress Core。如果您查看错误日志,您会看到一条错误消息,指出wp_mail未定义。

一个简单的解决方案就是使用PHP mail函数。虽然我建议使用the Wordpress AJAX functionality以适当的方式执行此操作。

首先,将以下内容添加到主题 functions.php 中,以便定义一个新的JS var,其路径为 admin-ajax.php ,并设置为第一个参数脚本的处理程序名称 - 假设在这里 script.js 是您执行ajax请求的地方:

function my_load_scripts() {
  wp_enqueue_script('my_script', get_stylesheet_directory_uri() . '/js/script.js', array('jquery'), false, true );
  wp_localize_script('my_script', 'MyAjax', array('ajaxurl' => admin_url('admin-ajax.php')));
}
add_action('wp_enqueue_scripts', 'my_load_scripts');

然后请求 admin-ajax.php (在js/script.js中):

$('.email-enter').on('click', function() {
    $.post(ajaxurl, {action: 'send_mail'}); 
});

然后将以下内容添加到 functions.php 主题文件中:

function ajax_send_mail() {
  wp_mail('myemail@myemail.com', 'The subject', 'The message');
}
add_action('wp_ajax_send_mail', 'ajax_send_mail');
add_action('wp_ajax_nopriv_send_mail', 'ajax_send_mail');

答案 1 :(得分:0)

我认为你的smtp设置是完美的。

  $('.email-enter').on('click', function(){
        console.log('button is clicked');
        $.post("/wp-content/themes/wptheme/partials/notify.php"); 
    });

/wp-content/themes/wptheme/partials/notify.php代替此尝试制作模板文件并在$.post()中提供固定链接或将文件放入wp-content/notify.php