我有一个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无法正常工作(我没有收到电子邮件)。如何编辑此代码以发送此跨度的电子邮件通知?
答案 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