插件有一个cron作业,但该函数并不实际运行

时间:2014-01-29 作者:mrdenny

我一直在开发Wordpress插件,它需要一个cron工作来完成一些工作。我已经完成了作业的设置和调度,我可以使用其中一个插件在cron中看到它,该插件允许您查看cron文件。

然而,该函数似乎从未真正被调用过。

下面是设置cron的函数。我的代码在一个类中,因此我不确定我是否正确执行了此操作,因为我发现的所有示例都没有讨论代码是否在一个类中。

function schedule_archiving() {
    if ( ! wp_next_scheduled( \'redirection_reporting_archive_data\') ) {
        $time=time();
        $time=$time+60;
        wp_schedule_event($time, \'daily\', \'redirection_reporting_archive_data\');
    }
}
我知道WordPress函数“archive\\u data”工作正常,因为如果我从WordPress手动调用它,数据库中的数据会正确存档,所以问题一定是我的cron config(我想)。

EDIT1:根据请求调用schedule\\u存档的代码。

if ($input[\'archive_enabled\'] == \'true\') {
            $archive = new redirector_reporting_class_archive();
            $archive->create_db_objects();
            $archive->schedule_archiving();
        } else {
            $archive = new redirector_reporting_class_archive();
            $archive->unscheduled_archiving();
            $archive->put_archive_back();
            $input[\'archive_enabled\'] = \'false\';
        }
此代码位于我的settings类的settings validate函数中。

下面是cron作业将调用的archive\\u data函数。

function archive_data() {
        write_log(\'redirection-reporting.archive.archive_data starting\');

        global $wpdb;
        $options = get_option(\'redirection_reporting\');
        $days_to_keep = $options[\'days_to_keep\'];
        if ($days_to_keep != 0) {
            $days_to_keep = $days_to_keep*-1;
        }

        $sql = "CALL `{$wpdb->prefix}ArchiveRedirectionData` ($days_to_keep)";

        $wpdb->query( $sql );
    }
EDIT2:我已经将以下内容添加到了add\\u操作和add\\u过滤器调用的其余部分。

$archive = new redirector_reporting_class_archive();
add_action(\'redirection_reporting_archive_data\', array($this, \'archive_data\')); // Adds hook for cron job
您可以查看已发布插件中的完整代码,网址为https://wordpress.org/plugins/redirection-reporting/.

1 个回复
最合适的回答,由SO网友:Shazzad 整理而成

你搞错了。功能wp_schedule_event() 使用第三个参数调度操作挂钩。因此,您需要在计划的挂钩上调用您的函数。像这样-

add_action( \'archive_data\', \'archive_data\' );

结束

相关推荐

使用Cron作业动态填充一次字段,然后在下次有人访问页面时将该字段留空

我可能要去屠夫那里解释我想做什么,对我直言不讳。本质上,我正在为客户开发一种定制的竞赛类型的解决方案。我使用重力表单让用户注册,然后我有一个隐藏字段,可以通过GF动态填充。我有一个Cron作业,每天一次,它将在该字段中填充一个值“winner”。但是,它只需要为计划作业运行后访问站点的第一个用户填充,然后对于下一个用户,它应该再次为空。我已经研究了如何使用会话变量,但除非我能够提取会话id,否则我无法正确地使其工作。我不能使用查询字符串,因为我不希望用户在填写表单之前知道他们是否赢了,表单将使用该值用ja