Wordpress Cron作业调用javascript函数提交webform
我是Wordpress中级开发人员和javascript/jquery新手。最近有人问我是否可以创建一个众包网络表单,多个员工可以在一天中添加到其中(生产记录),然后每天下午5点自动提交表单,将结果发送给所有员工。如果员工没有添加备注,则表单不应自动提交 尝试将项目分解为以下组件:Wordpress Cron作业调用javascript函数提交webform,javascript,php,jquery,wordpress,cron,Javascript,Php,Jquery,Wordpress,Cron,我是Wordpress中级开发人员和javascript/jquery新手。最近有人问我是否可以创建一个众包网络表单,多个员工可以在一天中添加到其中(生产记录),然后每天下午5点自动提交表单,将结果发送给所有员工。如果员工没有添加备注,则表单不应自动提交 尝试将项目分解为以下组件: 众包形式 用于检查空字段和自动提交表单的函数 Wordpress cron作业每天下午5点运行自动提交功能 该表单由wordpress插件ProForms提供支持,我将其用于所有客户的所有webforms,这非常棒。
<script type="application/javascript">
function send_production_notes($) {
if( $('.production-date-field input').val() == '' ) {
return;
} else {
$('#production-submit').click();
}
};
</script>
函数发送生产注释($){
if($('.production date field input').val()=''){
返回;
}否则{
$(“#生产提交”)。单击();
}
};
脚本检查日期字段是否为空,如果为空,则单击提交按钮。这样做的目的是,如果用户有笔记要分享,他们总是会将日期添加到日期字段中,并且他们会接受这样的培训
然后,我开始安排Cron作业:
register_activation_hook(__FILE__, 'ag_send_production_notes_scheduler');
function ag_send_production_notes_scheduler() {
if (! wp_next_scheduled ( 'ag_send_production_notes' )) {
//Schedule the event, then to repeat daily using the hook 'ag_send_production_notes'
wp_schedule_event( '1485540300', 'daily', 'ag_send_production_notes' );
}
}
//Hook our function , ag_production_notes(), into the action ag_send_production_notes
add_action( 'ag_send_production_notes', 'ag_production_notes' );
function ag_production_notes(){
if( is_page('production-notes') ) {
echo '<script type="application/javascript">send_production_notes();</script>';
}
}
register\u activation\u hook('ag\u send\u production\u notes\u scheduler');
函数ag\u send\u production\u notes\u scheduler(){
如果(!wp_next_scheduled('ag_send_production_notes')){
//安排活动,然后使用挂钩“ag_send_production_notes”每天重复
wp_计划_事件('1485540300','daily','ag_send_production_notes');
}
}
//将我们的函数ag_production_notes()挂接到动作ag_send_production_notes()中
添加操作('ag_发送生产注释','ag_生产注释');
函数ag_生产注释(){
如果(是第页(“生产说明”){
回显“发送制作笔记()”;
}
}
忽略wp\u schedule\u事件的细节,我尝试了几种不同的方法,因此UNIX时间戳是错误的。我确实知道cron的工作原理,因为在测试期间,我向函数中添加了一封快速的php电子邮件,并按预期触发和发送
我还知道javascript函数是有效的,我在页面上测试了它,将函数包装在jQuery(document).ready()
handler中-当日期字段为空时,它什么也不做。但是,如果我添加了日期字段,然后保存了一个草稿(刷新了页面),它将按原样提交。但我不能这样做,因为我需要在没有人实际加载页面的情况下运行该函数
我觉得我的代码中要么有一些根本性的错误,要么缺少一些基本概念。我也不确定phpis_页面的条件,但我在研究时发现,我只需要它在相关页面上运行javascript
最后,我需要cron作业能够在每天下午5点触发javascript提交函数。我不知道这是否可能,或者对于像我这样的javascript/jQuery新手,是否有更好的方法。这也是我第一次处理Wordpress的cron工作,但我知道他们只有在有人访问该网站时才会被解雇——这对我们来说不是问题
我不知道完整的函数是否需要在我的functions.php文件中,或者在production notes页面上
我还从文档中检查了强大的表单操作,没有看到任何提交表单或将草稿转换为条目的操作。感谢您的时间和建设性的帮助 这里的方法似乎很容易出错(想象一下,如果有人[无意中]退让了其他人的草稿!),我建议您稍微改变一下处理问题的方式
如果我接受了这项任务,我的方法是让工人输入他们的笔记,然后提交表格。在后端,我将“createdatetime”存储在数据库的一个字段中,这将创建标记的条目。也许插件已经做到了?也许需要更新一下
此时,您的下午5:00PM cron作业将收集当天的所有提交,并对其进行编译,然后将其发送到相应的电子邮件分发列表
您可以决定是保留数据,还是当天放弃数据。我个人的建议是保留它。您将始终有它供以后参考,甚至可以编写一些报告工具来显示提交的数量、用户(因为您可以允许每个员工登录到更符合Sarbanes-Oxley的特定用户,等等)
你永远不会有太多的数据,所以让他们提交所有内容,而他们可以,将编译和转发设置到应该的时间
编辑1:创建一天中的特定时间通话
您需要使用一组函数进行日期计算,并使用SetInterval在给定时间执行脚本
下面的代码执行以下操作:
设置我们检查的日期/时间(在您的情况下为24小时格式的下午5:00)
如果我们超过了时间,请提前24小时检查以防止执行
如果在写入时调用函数来执行任务
执行任务的函数通过DOM中的ID句柄在页面上提交表单
var now=新日期()
var millis_until_cutoff=新日期(now.getFullYear(),now.getMonth(),now.getDate(),17,0,0,0)-now
if(直到截止值<0的毫秒)
{
//这已经过了我们一天的时间,推迟到明天
毫安单位,直到截止+=86400000;
}