自定义循环不起作用/WP Cron事件

时间:2017-11-20 作者:jasie

我创建了一个wp cron事件,自定义间隔为5分钟,但它只每小时执行一次,而不是每5分钟执行一次。(回调已正确执行。)

screenshot from wp crontrol plugin

DISABLE\\u WP\\u CRON常量设置为true,WP CRON。php每5分钟通过crontab调用一次。(https://developer.wordpress.org/plugins/cron/hooking-into-the-system-task-scheduler/)

调试中没有错误。日志(WP\\u DEBUG设置为true)。

我用wordpress插件boilderplate生成器创建了我的插件(https://wppb.me/).

我的代码(在Wp\\u Goldprice\\u Activator类中,函数activate()):

    function fetch_metal_prices_recurrence( $schedules ) {
        $schedules[\'every_five_minutes\'] = array(
            \'display\'  => \'every 5 minutes\',
            \'interval\' => 300
        );
        return $schedules;
    }
    add_filter( \'cron_schedules\', \'fetch_metal_prices_recurrence\' );

    // Schedule custom-interval Cron Job Event
    if ( ! wp_next_scheduled ( GPR_PLUGIN_NAME . \'_fetch_metal_prices\' )) {
        wp_schedule_event( current_time( \'timestamp\' ), \'every_five_minutes\', GPR_PLUGIN_NAME . \'_fetch_metal_prices\' );
    }

    // Schedule hourly Cron Job Event
    if ( ! wp_next_scheduled ( GPR_PLUGIN_NAME . \'_fetch_metal_prices_reschedule\' )) {
        wp_schedule_event( current_time( \'timestamp\' ), \'hourly\', GPR_PLUGIN_NAME . \'_fetch_metal_prices_reschedule\' );
    }
}
我每小时都会重新安排5分钟的事件,因为它会在第一次自动执行后消失(但不是手动执行!)。每小时事件不会消失(自动执行时)。我也找不到原因或解决方案。这可能与问题有关,但wp\\u next\\u scheduled()仍会立即返回未来1小时的时间,而不是5小时。

我知道,以前有人问过这个问题,但没有提出有效的解决方案(多年前就发布了):

如果您对此有任何想法,我将不胜感激,我已经没有想法了。

2 个回复
SO网友:malabarista

也许有人会利用它,我有一个类似的问题,解决方法是打电话time() 而不是current_time( \'timestamp\' ) 作为的第一个参数wp_schedule_event().

所以应该是这样的:wp_schedule_event( time(), \'custom_interval\', \'custom_hook\' );

我试图找出time和current\\u time(“timestamp”)之间的差异,但它们似乎返回相同的输出,int unix time。

SO网友:Shwky Fareed

我知道这个答案现在可能对你没有帮助,因为为时已晚:)但这里有一个完整的例子,为即将遇到相同问题的开发人员提供了一个插件中的cronjob工作;

////////////////////////////////////////////
/*         CRON Work STARTS HERE           */
/////////////////////////////////////////////
function sh_booking_cronstarter_activation() {
  if( !wp_next_scheduled( \'sh_booking_cronjob_hourly\' ) ) {  
     wp_schedule_event( time(), \'hourly\', \'sh_booking_cronjob_hourly\' ,array());  
  }
  if( !wp_next_scheduled( \'sh_booking_cronjob_daily\' ) ) {  
     wp_schedule_event( time(), \'twicedaily\', \'sh_booking_cronjob_daily\' ,array());  
  }
}
register_activation_hook (__FILE__, \'sh_booking_cronstarter_activation\');

function sh_booking_cronstarter_deactivate() { 
  $timestamp = wp_next_scheduled (\'sh_booking_cronjob_hourly\');
  wp_unschedule_event ($timestamp, \'sh_booking_cronjob_hourly\',array());

  $timestampp = wp_next_scheduled (\'sh_booking_cronjob_daily\');
  wp_unschedule_event ($timestampp, \'sh_booking_cronjob_daily\',array());
} 
register_deactivation_hook (__FILE__, \'sh_booking_cronstarter_deactivate\');

add_action (\'sh_booking_cronjob_hourly\', \'cron_sh_booking_cronjob_hourly_6cc9234b\',10,0); 
add_action (\'sh_booking_cronjob_daily\', \'cron_sh_booking_cronjob_daily_6cc9234b\',10,0); 

function cron_sh_booking_cronjob_hourly_6cc9234b(){
  /* your logic goes here ;) */
}
function cron_sh_booking_cronjob_daily_6cc9234b(){
  /* your logic goes here ;) */
}
有帮助的跳跃;)

结束