我对WP-Cron不太熟悉,但我在我的一个网站上使用了它们。我为每小时设置一个自定义查询:
add_action( \'init\', function () {
if( ! wp_next_scheduled( \'expire_cpt\' ) ) {
wp_schedule_event( time(), \'hourly\', \'expire_cpt\' );
}
add_action( \'expire_cpt\', \'pre_expire_the_offers\' );
});
function pre_expire_the_offers() {
//...
}
现在我们的功能程序改变了,我们想制定一个每日时间表。所以我这样安排:
add_action( \'init\', function () {
//Used once to delete all the schedule
//wp_clear_scheduled_hook(\'expire_cpt\');
//I assumed, by clearing, I no-longer need this
//$timestamp = wp_next_scheduled( \'expire_cpt\' );
//wp_unschedule_event( $timestamp, \'expire_cpt\' );
if( ! wp_next_scheduled( \'expire_cpt\' ) ) {
//Need to run this at 24:00:00 everyday, not 24 hours from now
wp_schedule_event( time(\'00:00:00\'), \'daily\', \'expire_cpt\' );
}
add_action( \'expire_cpt\', \'pre_expire_the_offers\' );
});
我正在Windows机器的本地WAMP服务器上执行此操作。我的本地电脑时间
echo date( \'Y-m-d H:i:s\', current_time( \'timestamp\' ) )
, is 2016-04-11 17:18:58。
六个小时的时差可以是格林尼治标准时间和我的时区(+6)-这是合理的。
但问题在于下一个预定时间。
我正在使用:
最合适的回答,由SO网友:Rarst 整理而成
time()
只返回当前时间,不接受任何输入。
$time = time(); // works out to 2016-04-11T12:11:34+00:00
你想要的是明天午夜:
$tomorrow = strtotime( \'tomorrow\' ); // works out to 2016-04-12T00:00:00+00:00
请注意,这些是PHP函数,它们忽略了WP时区,因为它会将PHP时区重置为UTC。因此,如果使用这些,则将其设置为UTC时区的午夜。
在WP中正确使用它是一个混乱的过程(在某些没有timezone_string
设置,请参见my post on DateTime in WP 有关更多详细信息):
$date = new DateTime( \'tomorrow\', new DateTimeZone( get_option( \'timezone_string\' ) ) );
// works out to 2016-04-12T00:00:00+03:00
$timestamp = $date->getTimestamp();
Note: WP Cron不能保证在精确的时间运行,因为它是通过访问站点触发的。我不确定是否经常性跑步会在午夜“粘住”或从那里慢慢滑落,你可能需要定期重新调整。