Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/433.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wordpress Cron作业调用javascript函数提交webform_Javascript_Php_Jquery_Wordpress_Cron - Fatal编程技术网

Wordpress Cron作业调用javascript函数提交webform

Wordpress Cron作业调用javascript函数提交webform,javascript,php,jquery,wordpress,cron,Javascript,Php,Jquery,Wordpress,Cron,我是Wordpress中级开发人员和javascript/jquery新手。最近有人问我是否可以创建一个众包网络表单,多个员工可以在一天中添加到其中(生产记录),然后每天下午5点自动提交表单,将结果发送给所有员工。如果员工没有添加备注,则表单不应自动提交 尝试将项目分解为以下组件: 众包形式 用于检查空字段和自动提交表单的函数 Wordpress cron作业每天下午5点运行自动提交功能 该表单由wordpress插件ProForms提供支持,我将其用于所有客户的所有webforms,这非常棒。

我是Wordpress中级开发人员和javascript/jquery新手。最近有人问我是否可以创建一个众包网络表单,多个员工可以在一天中添加到其中(生产记录),然后每天下午5点自动提交表单,将结果发送给所有员工。如果员工没有添加备注,则表单不应自动提交

尝试将项目分解为以下组件:

  • 众包形式
  • 用于检查空字段和自动提交表单的函数
  • Wordpress cron作业每天下午5点运行自动提交功能
  • 该表单由wordpress插件ProForms提供支持,我将其用于所有客户的所有webforms,这非常棒。在其中,我有一个production notes表单,它能够为登录用户保存“草稿”。我的想法是,我会给所有需要访问表单的员工提供相同的用户,以便他们都可以添加和保存表单的草稿

    表单位于具有自定义页面模板的页面上。我使用了以下代码来单击javascript提交按钮:

    <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中-当日期字段为空时,它什么也不做。但是,如果我添加了日期字段,然后保存了一个草稿(刷新了页面),它将按原样提交。但我不能这样做,因为我需要在没有人实际加载页面的情况下运行该函数

    我觉得我的代码中要么有一些根本性的错误,要么缺少一些基本概念。我也不确定php
    is_页面的条件,但我在研究时发现,我只需要它在相关页面上运行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; }