已调用WordPress计划任务,但未执行

时间:2015-01-22 作者:Frederik Voordeckers

我创建了一个带有cron的插件,每5分钟更新一次特定类型的所有帖子。我安装了WP Crontrol来检查cron是否注册正确,一切似乎都正常。

这是我注册cron的方式:

function custom_cron_interval( $schedules ) {
    $schedules[\'fiveminutes\'] = array(
        \'interval\' => 300,
        \'display\' => __(\'Every five minutes\')
    );
    return $schedules;
}
add_filter( \'cron_schedules\', \'custom_cron_interval\' ); 

if ( ! wp_next_scheduled( \'recalculate_all_scores\' ) ) {
    wp_schedule_event(time(), \'fiveminutes\', \'recalculate_all_scores\');
}
它已正确注册,但当函数执行时,不会发生任何事情。出于测试目的,我将函数挂接到save\\u post操作。这样一切都很好。但是,当调用计划任务时,它将不会执行。

这是函数的代码

function recalculate_all_scores() {
    global $wpdb; 

    $customers = $wpdb->get_results("SELECT * FROM wp_posts 
                                WHERE post_type = \'customer\' 
                                AND post_status = \'publish\';");

    foreach ($customers as $customer){
        set_score($customer);
    }
}

function set_score($customer){
    $acf_key = "score";
    $score = rand(0,50);
    update_field( $acf_key, $score, $customer->ID );
}
我还将以下几行添加到我的wp配置中。php:

define(\'ALTERNATE_WP_CRON\', true);
define(\'DISABLE_WP_CRON\', false);
知道是什么阻止了函数的执行吗?

EDIT

<我知道wp\\U cron系统不是真正的cron,它依赖于现场访问

2 个回复
SO网友:mtt_g

最近我也遇到了同样的问题,直到我效仿了Wordpress Codex 这建议使用动作挂钩来运行函数。

我想如果你添加以下内容。。。

add_action( \'recalculate_all_scores_hook\', \'recalculate_all_scores\' );
。。。并修改wp\\u schedule\\u event函数以使用动作挂钩名称,而不是直接使用函数。。。

wp_schedule_event( time(), \'fiveminutes\', \'recalculate_all_scores_hook\' );
。。。你可能在做生意。

祝你好运

SO网友:kalpesh

WordPress只支持每小时、每天和每天两次,因此将五分钟改为三分钟中的任何一分钟,并将功能设置为sleep(10); 或任何其他适合您插件的时间

检查here

结束

相关推荐

如何使php脚本只使用wp-cron运行

我有一个php脚本,它执行一个函数并创建一个包含结果的xml文件。我希望这个脚本每天只运行一次,我正在使用wordpress cron来实现这一点。问题是这个脚本总是在所有页面加载时运行,这很糟糕,因为它需要超过30秒才能完成。如何停止它始终运行并使其仅与wp cron一起工作?我读过关于cronjob的文章,但我的主机没有这个功能。这是我在php文件顶部使用的代码: add_action( \'my_cron_hook\', \'myfunction\' ); if( !wp_next