有一个网站,wordpress需要在不重新加载cron任务的情况下,传输用户填写的姓名和电话号码并发送数据。
ajax但是,原则上我仍然无法弄清楚是否可以在帮助下启动cron任务或挂钩。
目前,cron只有在刷新页面或重新进入站点时才会触发用户数据。
脚本.js
var datamail = {
action: 'cronMail',
name: $('input[name=first_name]').val(),
tel: $('[name=phone]').val()
};
$.ajax({
url: ajaxsettings.url,
type: 'get',
data: datamail,
success: function (data) {
},
error: function (err) {
}
});
函数.php
add_action( 'wp_ajax_cronMail', 'cronMail');
add_action( 'wp_ajax_nopriv_cronMail','cronMail');
wp_clear_scheduled_hook( 'mail_hook' );
add_action( 'mail_hook', 'mail_hook_function', 10, 2);
function cronMail(){
$name = $_GET['name'];
$tel = $_GET['tel'];
wp_schedule_single_event( time() + 300, 'mail_hook', array( $_GET['name'], $_GET['tel']));
spawn_cron();
exit();
}
function mail_hook_function($name,$tel) {
$message = 'Заявка от потенциального клиента '.$name.' с телефоном '.$tel;
wp_mail( 'xoheyed253@brosj.net', 'Новая заявка от клиента', $message);
}
Cron 像这样工作 - 仅在访问该站点时。
spawn_cron将调用那些时间已经到并且不会执行的钩子,mail_hook因为它是未来 300 秒。从代码中删除
spawn_cron它,这里不需要它。在 ajax 内部移动clear_scheduled_hook,在wp_schedule_single_event.之后,代码将正常工作:事件延迟 5 分钟,并且仅在站点被访问时触发。明白这是一个基本原则:php 代码本身不能以任何方式定时,所以 WordPress 中的 cron 是一个伪定时器。每当访问该站点时,它都会检查哪些预定事件已经过期,并执行它们。
在 VPS 服务器上,您可以安装服务器 cron。然后服务器软件将每隔 5 分钟或 1 分钟拉取一次站点。并且 WP cron 将在不访问该站点的情况下运行。
托管不是这种情况。但是您可以使用 easycron.com 外部服务,有关于如何为 WordPress 设置它的说明。之后,cron 事件将由外部计时器执行。