可以在WordPress中设置提交表单的计划程序吗?

时间:2016-07-11 作者:Komal Dhiman

我需要一个调度程序,以自动更新一个WordPress网站与新的csv后,一定的时间间隔。

我发现了很多wp_schedule_event 但所有人都在激活插件时创建cron作业。如果我也这样做,那么代码就会执行。但我的要求是将其安排在管理员提交表单时。

我的要求是:

插件激活后,管理员将选择间隔。在提交此表单时,我想将时间表设置为自动检查csv的间隔(由管理员选择),以便通过新csv自动更新站点。

在表单提交中,我调用了一个php页面。在这一页上,我编写了以下代码:

$interval=$_POST[\'select_interval\'];
        require_once (str_replace ( \'//\', \'/\', dirname ( __FILE__ ) . \'/\' ) . \'../../../wp-config.php\');
if( !wp_next_scheduled( \'mycronjob\' ) ) {
                wp_schedule_event( time(), $interval, \'cronjob\',$arguments);
            }
        }
add_action (\'cronjob\', \'update_csvSchedular\');
        function update_csvSchedular($args){
 //code to check for csv
}

1 个回复
SO网友:Ehsaan

执行是错误的wp_schedule_event 插件激活和cronjob 标签正确的挂钩标签是wp.

WordPress内部cron系统采用“请求-响应”方式工作,它在向整个系统发出任何请求后立即检查预定事件,在检查预定事件后,加载系统的下一部分。

因此,将计划挂接到init 太早了cronjob, 插件激活等都太晚了,他们可能会工作,但这不是正确的方式。

根据用户给定的数据安排事件的最佳方法是从数据库中获取数据,您可以在数据库中保存管理员给定的设置(例如update_option) 并按给定值安排事件(get_option) 连接到wp 标签

例如:

add_action( \'wp\', \'my_scheduled_event\' );
function my_scheduled_event() {
  $interval = get_option( \'task_interval\' );
    if ( ! wp_next_scheduled( \'my_daily_task\' ) )
        wp_schedule_event( time(), $interval, \'my_daily_task\' );
}