使用自定义间隔在插件激活期间建立wp-cron作业

时间:2020-01-15 21:25:14

标签: wordpress cron

已更新

我正在尝试使用自定义的5分钟间隔在插件激活期间建立重复任务。无法将我的操作与自定义间隔相关联。

如果我选择默认间隔(例如“每日”),则一切正常。

当我在对wp_get_schedules()的调用上方立即回显wp_schedule_event()的结果时,可以看到我的自定义间隔。

据我所知,当我尝试使用自定义间隔时,我的自定义间隔已成功注册,但是我的任务从未成功与之关联。

如果我在cron.php $crons$schedules中回显wp_schedule_event()_set_cron_array()的结果,则可以看到我的任务与自定义间隔正确关联。但是,在插件激活完成之后,我的任务没有反映在Cron Manager / db中。

作为测试,我将自定义间隔直接添加到cron.php中的WP默认值中-当我这样做时,可以成功地计划任务。

我正在通过register_activation_hook()调用的函数中执行以下操作:

add_filter( 'cron_schedules', function($schedules) {
        $schedules['5_min'] = array( 
            'interval' => MINUTE_IN_SECONDS * 5,
            'display' => __( 'Every 5 minutes' ),
        );

        return $schedules;
    }
);

function my_plugin_import_handler() {
     // ...
}

add_action( 'my_plugin_import_hook', 'my_plugin_import_handler' );

wp_schedule_event( time(), '5_min', 'my_plugin_import_hook' );

我想念什么?

更新

我安装了WordPress的新副本,安装了Advanced Cron Manager,并添加了一个仅包含以下代码的简单插件。我看到两件事。

  1. 如果我使用time()的时间戳计划任务,则不会计划时间,但是如果我计划未来的时间,则计划它。
  2. 在Advanced Cron Manager中查看我的任务时,该任务被标识为“单个事件”,并且不会重复发生。

有意义的是,如果这是单个事件,并且我分配给它的开始时间是现在,那么我的任务就永远不会与自定义间隔关联。

那我在做什么导致此事件是单个事件,而不是重复发生的事件?

register_activation_hook( __FILE__, 'activate_test_plugin' );

function activate_test_plugin()
{
    add_filter( 'cron_schedules', function($schedules) {
        $schedules['5_min'] = array( 
            'interval' => MINUTE_IN_SECONDS * 5,
            'display' => __( 'Every 5 minutes' ),
        );

        return $schedules;
    });

    add_action( 'my_test_import_hook', 'my_test_import_handler' );

    function my_test_import_handler()
    {
        echo 'import is beginning';
    }

    if ( ! wp_next_scheduled ( 'my_test_import_hook' ))
    {
        wp_schedule_event( time() + 3600, '5_min', 'my_test_import_hook' );
    }

}

0 个答案:

没有答案